Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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])
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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()
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
 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
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
  )
]

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])
      )

Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
 def export(self, x):
     if x[1] == {}:
         return ldif.CreateLDIF(x[0], {None: []})
     else:
         return ldif.CreateLDIF(x[0], x[1])
Ejemplo n.º 16
0
def print_ldif(entry, outfh):
    print >> outfh, ldif.CreateLDIF(entry[0], entry[1]),
    outfh.flush()