View | Details | Raw Unified | Return to bug 44276 | Differences between
and this patch

Collapse All | Expand All

(-)a/services/univention-s4-connector/modules/univention/s4connector/s4/__init__.py (-7 / +8 lines)
 Lines 332-348   def samaccountname_dn_mapping(s4connector, given_object, dn_mapping_stored, ucso Link Here 
332
				result = s4connector.lo_s4.lo.search_ext_s(s4connector.lo_s4.base, ldap.SCOPE_SUBTREE, filter_s4, ['sAMAccountName'])
332
				result = s4connector.lo_s4.lo.search_ext_s(s4connector.lo_s4.base, ldap.SCOPE_SUBTREE, filter_s4, ['sAMAccountName'])
333
333
334
				if result and len(result) > 0 and result[0] and len(result[0]) > 0 and result[0][0]:  # no referral, so we've got a valid result
334
				if result and len(result) > 0 and result[0] and len(result[0]) > 0 and result[0][0]:  # no referral, so we've got a valid result
335
					s4dn = unicode(encode_attrib(result[0][0]))
335
					s4dn = unicode(encode_attrib(result[0][0]), 'utf8')
336
					if dn_key == 'olddn' or (dn_key == 'dn' and 'olddn' not in object):
336
					if dn_key == 'olddn' or (dn_key == 'dn' and 'olddn' not in object):
337
						newdn = s4dn
337
						newdn = s4dn
338
					else:
338
					else:
339
						s4_rdn = ldap.dn.str2dn(s4dn)[0]
339
						s4_rdn = ldap.dn.str2dn(s4dn)[0]
340
						new_s4_dn = unicode(ldap.dn.dn2str([s4_rdn] + exploded_dn[1:]))
340
						new_s4_dn = unicode(ldap.dn.dn2str([s4_rdn] + exploded_dn[1:]), 'utf8')
341
						newdn = new_s4_dn.lower().replace(s4connector.lo_s4.base.lower(), s4connector.lo.base.lower())
341
						newdn = new_s4_dn.lower().replace(s4connector.lo_s4.base.lower(), s4connector.lo.base.lower())
342
342
343
				else:
343
				else:
344
					newdn_rdn = [('cn', fst_rdn_value, ldap.AVA_STRING)]
344
					newdn_rdn = [('cn', fst_rdn_value, ldap.AVA_STRING)]
345
					newdn = unicode(ldap.dn.dn2str([newdn_rdn] + exploded_dn[1:]))  # new object, don't need to change
345
					newdn = unicode(ldap.dn.dn2str([newdn_rdn] + exploded_dn[1:]), 'utf8')  # new object, don't need to change
346
				ud.debug(ud.LDAP, ud.INFO, "samaccount_dn_mapping: newdn: %s" % newdn)
346
				ud.debug(ud.LDAP, ud.INFO, "samaccount_dn_mapping: newdn: %s" % newdn)
347
			else:
347
			else:
348
				# get the object to read the sAMAccountName in S4 and use it as name
348
				# get the object to read the sAMAccountName in S4 and use it as name
 Lines 381-387   def samaccountname_dn_mapping(s4connector, given_object, dn_mapping_stored, ucso Link Here 
381
				ucsdn_filter = format_escaped(u'(&(objectclass={0!e})({1}={2!e}))', ocucs, ucsattrib, samaccountname)
381
				ucsdn_filter = format_escaped(u'(&(objectclass={0!e})({1}={2!e}))', ocucs, ucsattrib, samaccountname)
382
				ucsdn_result = s4connector.search_ucs(filter=ucsdn_filter, base=s4connector.lo.base, scope='sub', attr=['objectClass'])
382
				ucsdn_result = s4connector.search_ucs(filter=ucsdn_filter, base=s4connector.lo.base, scope='sub', attr=['objectClass'])
383
				if ucsdn_result and len(ucsdn_result) > 0 and ucsdn_result[0] and len(ucsdn_result[0]) > 0:
383
				if ucsdn_result and len(ucsdn_result) > 0 and ucsdn_result[0] and len(ucsdn_result[0]) > 0:
384
					ucsdn = unicode(ucsdn_result[0][0])
384
					ucsdn = unicode(ucsdn_result[0][0], 'utf8')
385
385
386
				if ucsdn and (dn_key == 'olddn' or (dn_key == 'dn' and 'olddn' not in object)):
386
				if ucsdn and (dn_key == 'olddn' or (dn_key == 'dn' and 'olddn' not in object)):
387
					newdn = ucsdn
387
					newdn = ucsdn
 Lines 392-398   def samaccountname_dn_mapping(s4connector, given_object, dn_mapping_stored, ucso Link Here 
392
					else:
392
					else:
393
						newdn_rdn = [(ucsattrib, samaccountname, ldap.AVA_STRING)]
393
						newdn_rdn = [(ucsattrib, samaccountname, ldap.AVA_STRING)]
394
394
395
					newdn = unicode(ldap.dn.dn2str([newdn_rdn] + exploded_dn[1:]))  # guess the old dn
395
					newdn = unicode(ldap.dn.dn2str([newdn_rdn] + exploded_dn[1:]), 'utf8')  # guess the old dn
396
			try:
396
			try:
397
				ud.debug(ud.LDAP, ud.INFO, "samaccount_dn_mapping: newdn for key %s:" % dn_key)
397
				ud.debug(ud.LDAP, ud.INFO, "samaccount_dn_mapping: newdn for key %s:" % dn_key)
398
				ud.debug(ud.LDAP, ud.INFO, "samaccount_dn_mapping: olddn: %s" % dn)
398
				ud.debug(ud.LDAP, ud.INFO, "samaccount_dn_mapping: olddn: %s" % dn)
 Lines 807-812   class LDAPEscapeFormatter(string.Formatter): Link Here 
807
	"""
807
	"""
808
	def convert_field(self, value, conversion):
808
	def convert_field(self, value, conversion):
809
		if conversion == 'e':
809
		if conversion == 'e':
810
			if isinstance(value, basestring):
811
				return escape_filter_chars(value)
810
			return escape_filter_chars(str(value))
812
			return escape_filter_chars(str(value))
811
		return super(LDAPEscapeFormatter, self).convert_field(value, conversion)
813
		return super(LDAPEscapeFormatter, self).convert_field(value, conversion)
812
814
 Lines 1342-1348   class s4(univention.s4connector.ucs): Link Here 
1342
1344
1343
			rdn_exploded = ldap.dn.str2dn(rdn)
1345
			rdn_exploded = ldap.dn.str2dn(rdn)
1344
			parent_exploded = ldap.dn.str2dn(object['attributes']['lastKnownParent'][0])
1346
			parent_exploded = ldap.dn.str2dn(object['attributes']['lastKnownParent'][0])
1345
			return unicode(ldap.dn.dn2str(rdn_exploded + parent_exploded))
1347
			return unicode(ldap.dn.dn2str(rdn_exploded + parent_exploded), 'utf8')
1346
		else:
1348
		else:
1347
			ud.debug(ud.LDAP, ud.WARN, 'lastKnownParent attribute for deleted object rdn="%s" was not set, so we must ignore the object' % rdn)
1349
			ud.debug(ud.LDAP, ud.WARN, 'lastKnownParent attribute for deleted object rdn="%s" was not set, so we must ignore the object' % rdn)
1348
			return None
1350
			return None
1349
- 

Return to bug 44276