def __call__(self, data, writer=""): if writer == "": writer = self.myprint if self.fm == "": writer(data.__repr__()) if self.fm == "ldif": for i in data: if i[1] != {}: writer(ldif.CreateLDIF(i[0], i[1]), 0) else: writer(ldif.CreateLDIF(i[0], {"": []}), 0) if self.fm == "json": import json writer(json.write(data))
def add_ldap_serv(self, dn_value, ldif_list, k): result_add_ldap = self.s_list[k][1].add(dn_value, ldif_list) log_str = '\n' + ldif.CreateLDIF(dn_value, ldif_list) if result_add_ldap: self.s_list[k][0].write(log_str) else: log_str = '\n# ' + serv + ': ' + log_str logger.info(log_str)
def print_rec_content(item): dn = item['content']['dn'][0] print "# " + item['item'] del (item['content']['dn']) print ldif.CreateLDIF(dn, item['content']), if len(item['children'].keys()): for sitem in item['children']: print_rec_content(item['children'][sitem])
def delete_ldap_serv(self, dn_value, k): result_del_ldap = self.s_list[k][1].delete(dn_value) log_str = '\n' + ldif.CreateLDIF(dn_value, {'changetype': ('delete', )}) if result_del_ldap: s_list[k][0].write(log_str) else: log_str = '\n# ' + k + ': ' + log_str logger.info(log_str)
def add_ldap(self, dn_value, ldif_list): for serv, l in self.s_list.items(): result_add_ldap = l[1].add(dn_value, ldif_list) log_str = '\n' + ldif.CreateLDIF(dn_value, ldif_list) if result_add_ldap: l[0].write(log_str) else: log_str = '\n# ' + serv + ': ' + log_str logger.info(log_str)
def create_ldif_from_master(lo, ldif_file, base, page_size): """ create ldif file from everything from lo """ logging.info('Fetching LDIF ...') if ldif_file == '-': output = sys.stdout else: if os.path.isfile(ldif_file): os.unlink(ldif_file) output = gzip.open(ldif_file, 'wb') if hasattr(ldap, 'LDAP_CONTROL_PAGE_OID'): # python-ldap <= 2.3 logging.debug('Using old python-ldap 2.3 API') api24 = False lc = SimplePagedResultsControl(controlType=ldap.LDAP_CONTROL_PAGE_OID, criticality=True, controlValue=(page_size, '')) page_ctrl_oid = ldap.LDAP_CONTROL_PAGE_OID else: # python-ldap >= 2.4 logging.debug('Using new python-ldap 2.4 API') api24 = True lc = SimplePagedResultsControl(criticality=True, size=page_size, cookie='') page_ctrl_oid = lc.controlType while True: msgid = lo.lo.search_ext(base, ldap.SCOPE_SUBTREE, '(objectclass=*)', ['+', '*'], serverctrls=[lc]) rtype, rdata, rmsgid, serverctrls = lo.lo.result3(msgid) for dn, data in rdata: logging.debug('Processing %s ...', dn) for attr in replication.EXCLUDE_ATTRIBUTES: data.pop(attr, None) output.write(ldif.CreateLDIF(dn, data, cols=10000)) pctrls = [c for c in serverctrls if c.controlType == page_ctrl_oid] if pctrls: if api24: cookie = lc.cookie = pctrls[0].cookie else: _est, cookie = pctrls[0].controlValue lc.controlValue = (page_size, cookie) if not cookie: break else: logging.warning( "Server ignores RFC 2696 Simple Paged Results Control.") break output.close()
def delete_ldap(self, dn_value): for serv, l in self.s_list.items(): result_del_ldap = l[1].delete(dn_value) log_str = '\n' + ldif.CreateLDIF(dn_value,{'changetype': \ ('delete',)}) if result_del_ldap: l[0].write(log_str) else: log_str = '\n# ' + serv + ': ' + log_str logger.info(log_str)
def modrdn_ldap(self, dn_value, new_value, delete_old=True): for serv, l in self.s_list.items(): result_del_ldap = l[1].modrdn(dn_value, new_value, delete_old) log_str = '\n' + ldif.CreateLDIF(dn_value,\ {'changetype': ('modrdn',),\ 'newrdn':(new_value,),\ 'deleteoldrdn':(str(delete_old),)}) if result_del_ldap: l[0].write(log_str) else: log_str = '# ' + serv + ': ' + log_str logger.info(log_str)
def mod_ldap(self, ldap_mod, attr, attr_value, dn_value, list=None): if list: ldif_list = [(ldap_mod, attr, attr_value)] else: ldif_list = [(ldap_mod, attr, (attr_value, ))] for serv, l in self.s_list.items(): result_ldap_mod = l[1].modify(dn_value, ldif_list) log_str = '\n' + ldif.CreateLDIF(dn_value, ldif_list) if result_ldap_mod: l[0].write(log_str) else: log_str = '\n# ' + serv + ': ' + log_str logger.info(log_str)
def dump_license(): try: _lo, _pos = univention.admin.uldap.getMachineConnection( ldap_master=False) data = _lo.search('objectClass=univentionLicense') del _lo del _pos # just one license (should be always the case) # return the dictionary without the dn data = ldif.CreateLDIF(data[0][0], data[0][1]) return data except Exception as e: # no udm, no ldap, malformed return value, whatever MODULE.error('getting License from LDAP failed: %s' % e) return None
def dump_data(self): # we could return infos we have in this object itself. # but dont be too clever here. just dump # everything we have in LDAP. try: _lo = uldap.getMachineConnection() data = _lo.search('objectClass=univentionLicense') del _lo # just one license (should be always the case) # return the dictionary without the dn data = ldif.CreateLDIF(data[0][0], data[0][1]) return data except Exception as e: # no udm, no ldap, malformed return value, whatever MODULE.error('getting License from LDAP failed: %s' % e) return None
def mod_ldap_serv(self, ldap_mod, attr, attr_value, dn_value, k, list=None): if list: ldif_list = [(ldap_mod, attr, attr_value)] else: ldif_list = [(ldap_mod, attr, (attr_value, ))] result_ldap_mod = self.s_list[k][1].modify(dn_value, ldif_list) log_str = '\n' + ldif.CreateLDIF(dn_value, ldif_list) if result_ldap_mod: self.s_list[k][0].write(log_str) else: log_str = '\n# ' + serv + ': ' + log_str logger.info(log_str)
) ] test_entry_ldif = """dn: emptyvalue: emptyvalue: emptyvalue: """ ldif_parser = ldif.LDIFRecordList(StringIO.StringIO(test_entry_ldif)) ldif_parser.parse() test_entry_records.extend(ldif_parser.all_records) for test_dn,test_entry in test_entry_records: ldif_lines = ldif.CreateLDIF( test_dn,test_entry,['bin'] ) sys.stdout.write(ldif_lines) ldif_parser = ldif.LDIFRecordList(StringIO.StringIO(ldif_lines)) ldif_parser.parse() result_entry = ldif_parser.all_records[0][1] # print test_entry for a in test_entry.keys(): test_entry[a].sort();result_entry[a].sort() if test_entry[a]!=result_entry[a]: print 'Error in attribute %s: "%s"!="%s"' % ( a,repr(test_entry[a]),repr(result_entry[a]) )
def convertToLdif(self, contact): """ Convert a contact object into a ldif object """ entry = {'objectClass': ['top', 'person', 'organizationalPerson', 'inetOrgPerson', 'mozillaAbPersonObsolete']} last_name = "" first_name = "" self.dict_address = {} for field, value in contact: #print type(value), value if field.type() == 'last_name': last_name = value.encode('utf-8') elif field.type() == 'first_name': first_name = value.encode('utf-8') elif field.type() == 'phone_number' \ or field.type() == 'mobile_number' \ or field.type() == 'fax_number': if field.type() == 'mobile_number': if 'mobile' in entry.keys(): entry['mobile'].append(value) else: entry['mobile'] = [value] elif field.type() == 'fax_number': if 'fax' in entry.keys(): entry['fax'].append(value) else: entry['fax'] = [value] else: if 'telephoneNumber' in entry.keys(): entry['telephoneNumber'].append(value) else: entry['telephoneNumber'] = [value] elif field.type() == 'email_address' and value != 'none': if 'email' in entry.keys(): entry['email'].append(value.encode('utf-8')) else: entry['email'] = [value.encode('utf-8')] elif field.type() == 'url' and value != 'none': if field.location() != 'none': if field.location.lower() == 'work': if 'mozillaWorkUrl' in entry.keys(): entry['mozillaWorkUrl'].append(value.encode('utf-8')) else: entry['mozillaWorkUrl'] = [value.encode('utf-8')] else: if 'mozillaHomeUrl' in entry.keys(): entry['mozillaHomeUrl'].append(value.encode('utf-8')) else: entry['mozillaHomeUrl'] = [value.encode('utf-8')] else: if 'url' in entry.keys(): entry['url'].append(value.encode('utf-8')) else: entry['url'] = [value.encode('utf-8')] elif field.type() == 'company_name' and value != 'none': if 'o' in entry.keys(): entry['o'].append(value.encode('utf-8')) else: entry['o'] = [value.encode('utf-8')] elif field.type() == 'job_title' and value != 'none': if 'title' in entry.keys(): entry['title'].append(value.encode('utf-8')) else: entry['title'] = [value.encode('utf-8')] elif field.type() == 'date': entry['birthyear'] = [value[0:4]] entry['birthmonth'] = [value[4:6]] entry['birthday'] = [value[6:8]] elif field.type() in self.address_fields: # Set the attribute of each address according to their location if field.type() == 'street_address': if field.location().lower() == 'home': if 'mozillaHomeStreet' in entry.keys(): entry['mozillaHomeStreet'].append(value.encode('utf-8')) else: entry['mozillaHomeStreet'] = [value.encode('utf-8')] else: if 'street' in entry.keys(): entry['street'].append(value.encode('utf-8')) else: entry['street'] = [value.encode('utf-8')] elif field.type() == 'state': if field.location().lower() == 'home': if 'mozillaHomeState' in entry.keys(): entry['mozillaHomeState'].append(value.encode('utf-8')) else: entry['mozillaHomeState'] = [value.encode('utf-8')] else: if 'st' in entry.keys(): entry['st'].append(value.encode('utf-8')) else: entry['st'] = [value.encode('utf-8')] elif field.type() == 'postal_code': if field.location().lower() == 'home': if 'mozillaHomePostalCode' in entry.keys(): entry['mozillaHomePostalCode'].append(value.encode('utf-8')) else: entry['mozillaHomePostalCode'] = [value.encode('utf-8')] else: if 'postalCode' in entry.keys(): entry['postalCode'].append(value.encode('utf-8')) else: entry['postalCode'] = [value.encode('utf-8')] elif field.type() == 'po_box': if field.location().lower() == 'home': if 'mozillaHomeStreet' in entry.keys(): entry['mozillaHomeStreet'].append(value.encode('utf-8')) else: entry['mozillaHomeStreet'] = [value.encode('utf-8')] else: if 'street' in entry.keys(): entry['street'].append(value.encode('utf-8')) else: entry['street'] = [value.encode('utf-8')] # not supported in ldif #elif field.type() == 'extended_address': elif field.type() == 'country': if field.location().lower() == 'home': if 'mozillaHomeCountryName' in entry.keys(): entry['mozillaHomeCountryName'].append(value.encode('utf-8')) else: entry['mozillaHomeCountryName'] = [value.encode('utf-8')] else: if 'c' in entry.keys(): entry['c'].append(value.encode('utf-8')) else: entry['c'] = [value.encode('utf-8')] elif field.type() == 'city': if field.location().lower() == 'home': if 'mozillaHomeLocalityName' in entry.keys(): entry['mozillaHomeLocalityName'].append(value.encode('utf-8')) else: entry['mozillaHomeLocalityName'] = [value.encode('utf-8')] else: if 'l' in entry.keys(): entry['l'].append(value.encode('utf-8')) else: entry['l'] = [value.encode('utf-8')] # Add Name and Full Name to the object entry['sn'] = [last_name] entry['givenName'] = [first_name] entry['cn'] = [ u'%s %s'.encode('utf-8') %(first_name, last_name) ] if 'mail' in entry.keys() and len(entry['mail']) > 0: dn = u'cn=%s %s, mail=%s'.encode('utf-8') %(first_name, last_name, entry['mail'][0]) else: dn = u'cn=%s %s'.encode('utf-8') %(first_name, last_name) output = ldif.CreateLDIF(dn, entry) return output
def export(self, x): if x[1] == {}: return ldif.CreateLDIF(x[0], {None: []}) else: return ldif.CreateLDIF(x[0], x[1])
def print_ldif(entry, outfh): print >> outfh, ldif.CreateLDIF(entry[0], entry[1]), outfh.flush()