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

Collapse All | Expand All

(-)a/services/univention-s4-connector/modules/univention/s4connector/__init__.py (-7 / +3 lines)
 Lines 345-351   class attribute: Link Here 
345
		self.con_attribute = con_attribute
345
		self.con_attribute = con_attribute
346
		self.con_other_attribute = con_other_attribute
346
		self.con_other_attribute = con_other_attribute
347
		self.required = required
347
		self.required = required
348
		self.compare_function = compare_function
348
		# If no compare_function is given, we default to `compare_lowercase()`
349
		self.compare_function = compare_function or compare_lowercase
349
		if mapping:
350
		if mapping:
350
			self.mapping = mapping
351
			self.mapping = mapping
351
		# Make a reverse check of this mapping. This is necassary if the attribute is
352
		# Make a reverse check of this mapping. This is necassary if the attribute is
 Lines 1192-1198   class ucs: Link Here 
1192
					if not detected_ca:
1193
					if not detected_ca:
1193
						if isinstance(value, type(types.ListType())) and len(value) == 1:
1194
						if isinstance(value, type(types.ListType())) and len(value) == 1:
1194
							value = value[0]
1195
							value = value[0]
1195
						equal = False
1196
1196
1197
						# set encoding
1197
						# set encoding
1198
						compare = [ucs_object[ucs_key], value]
1198
						compare = [ucs_object[ucs_key], value]
 Lines 1202-1212   class ucs: Link Here 
1202
							else:
1202
							else:
1203
								compare[i] = univention.s4connector.s4.compatible_modstring(compare[i])
1203
								compare[i] = univention.s4connector.s4.compatible_modstring(compare[i])
1204
1204
1205
						if attributes.compare_function:
1205
						if not attributes.compare_function(compare[0], compare[1]):
1206
							equal = attributes.compare_function(compare[0], compare[1])
1207
						else:
1208
							equal = compare[0] == compare[1]
1209
						if not equal:
1210
							# This is deduplication of LDAP attribute values for S4 -> UCS.
1206
							# This is deduplication of LDAP attribute values for S4 -> UCS.
1211
							# It destroys ordering of multi-valued attributes. This seems problematic
1207
							# It destroys ordering of multi-valued attributes. This seems problematic
1212
							# as the handling of `con_other_attribute` assumes preserved ordering
1208
							# as the handling of `con_other_attribute` assumes preserved ordering
(-)a/services/univention-s4-connector/modules/univention/s4connector/s4/__init__.py (-20 / +4 lines)
 Lines 2609-2616   class s4(univention.s4connector.ucs): Link Here 
2609
									ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: %s is in not in write or sync mode. Skipping" % attribute)
2609
									ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: %s is in not in write or sync mode. Skipping" % attribute)
2610
									continue
2610
									continue
2611
2611
2612
								modify = False
2613
2614
								# Get the UCS attributes
2612
								# Get the UCS attributes
2615
								old_values = set(old_ucs_object.get(attr, []))
2613
								old_values = set(old_ucs_object.get(attr, []))
2616
								new_values = set(new_ucs_object.get(attr, []))
2614
								new_values = set(new_ucs_object.get(attr, []))
 Lines 2618-2630   class s4(univention.s4connector.ucs): Link Here 
2618
								ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: old_values: %s" % old_values)
2616
								ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: old_values: %s" % old_values)
2619
								ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: new_values: %s" % new_values)
2617
								ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: new_values: %s" % new_values)
2620
2618
2621
								if attribute_type[attribute].compare_function:
2619
								if attribute_type[attribute].compare_function(list(old_values), list(new_values)):
2622
									if not attribute_type[attribute].compare_function(list(old_values), list(new_values)):
2623
										modify = True
2624
								elif not univention.s4connector.compare_lowercase(list(old_values), list(new_values)):  # FIXME: use defined compare-function from mapping.py
2625
									modify = True
2626
2627
								if not modify:
2628
									ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: no modification necessary for %s" % attribute)
2620
									ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: no modification necessary for %s" % attribute)
2629
									continue
2621
									continue
2630
2622
 Lines 2693-2707   class s4(univention.s4connector.ucs): Link Here 
2693
									ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: The current S4 values: %s" % current_s4_values)
2685
									ud.debug(ud.LDAP, ud.INFO, "sync_from_ucs: The current S4 values: %s" % current_s4_values)
2694
2686
2695
									if (to_add or to_remove) and attribute_type[attribute].single_value:
2687
									if (to_add or to_remove) and attribute_type[attribute].single_value:
2696
										modify = False
2688
										modified = (not current_s4_values or not value) or \
2697
										if not current_s4_values or not value:
2689
											not attribute_type[attribute].compare_function(list(current_s4_values), list(value))
2698
											modify = True
2690
										if modified:
2699
										elif attribute_type[attribute].compare_function:
2700
											if not attribute_type[attribute].compare_function(list(current_s4_values), list(value)):
2701
												modify = True
2702
										elif not univention.s4connector.compare_lowercase(list(current_s4_values), list(value)):
2703
											modify = True
2704
										if modify:
2705
											if hasattr(attribute_type[attribute], 'mapping') and len(attribute_type[attribute].mapping) > 0 and attribute_type[attribute].mapping[0]:
2691
											if hasattr(attribute_type[attribute], 'mapping') and len(attribute_type[attribute].mapping) > 0 and attribute_type[attribute].mapping[0]:
2706
												ud.debug(ud.LDAP, ud.PROCESS, "Calling single value mapping function")
2692
												ud.debug(ud.LDAP, ud.PROCESS, "Calling single value mapping function")
2707
												value = attribute_type[attribute].mapping[0](self, None, object)
2693
												value = attribute_type[attribute].mapping[0](self, None, object)
2708
- 
2709
from mapping
2694
from mapping
2710
--
2711
.../conffiles/etc/univention/s4connector/s4/mapping.py         | 10 ----------
2695
.../conffiles/etc/univention/s4connector/s4/mapping.py         | 10 ----------
2712
1 file changed, 10 deletions(-)
2696
1 file changed, 10 deletions(-)
(-)a/services/univention-s4-connector/conffiles/etc/univention/s4connector/s4/mapping.py (-12 lines)
 Lines 121-127   if ignore_filter: Link Here 
121
							ldap_attribute='uid',
121
							ldap_attribute='uid',
122
							con_attribute='sAMAccountName',
122
							con_attribute='sAMAccountName',
123
							required=1,
123
							required=1,
124
							compare_function=univention.s4connector.compare_lowercase,
125
							single_value=True,
124
							single_value=True,
126
						),
125
						),
127
					'givenName' : univention.s4connector.attribute (
126
					'givenName' : univention.s4connector.attribute (
 Lines 359-365   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
359
							ldap_attribute='cn',
358
							ldap_attribute='cn',
360
							con_attribute='sAMAccountName',
359
							con_attribute='sAMAccountName',
361
							required=1,
360
							required=1,
362
							compare_function=univention.s4connector.compare_lowercase,
363
							single_value=True,
361
							single_value=True,
364
						),
362
						),
365
					'description': univention.s4connector.attribute (
363
					'description': univention.s4connector.attribute (
 Lines 471-483   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
471
							ldap_attribute='cn',
469
							ldap_attribute='cn',
472
							con_attribute='cn',
470
							con_attribute='cn',
473
							required=1,
471
							required=1,
474
							compare_function=univention.s4connector.compare_lowercase,
475
							single_value=True,
472
							single_value=True,
476
						),
473
						),
477
					'samAccountName': univention.s4connector.attribute (
474
					'samAccountName': univention.s4connector.attribute (
478
							ldap_attribute='uid',
475
							ldap_attribute='uid',
479
							con_attribute='sAMAccountName',
476
							con_attribute='sAMAccountName',
480
							compare_function=univention.s4connector.compare_lowercase,
481
							single_value=True,
477
							single_value=True,
482
						),
478
						),
483
					'description': univention.s4connector.attribute (
479
					'description': univention.s4connector.attribute (
 Lines 566-578   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
566
							ldap_attribute='cn',
562
							ldap_attribute='cn',
567
							con_attribute='cn',
563
							con_attribute='cn',
568
							required=1,
564
							required=1,
569
							compare_function=univention.s4connector.compare_lowercase,
570
							single_value=True,
565
							single_value=True,
571
						),
566
						),
572
					'samAccountName': univention.s4connector.attribute (
567
					'samAccountName': univention.s4connector.attribute (
573
							ldap_attribute='uid',
568
							ldap_attribute='uid',
574
							con_attribute='sAMAccountName',
569
							con_attribute='sAMAccountName',
575
							compare_function=univention.s4connector.compare_lowercase,
576
							single_value=True,
570
							single_value=True,
577
						),
571
						),
578
					'description': univention.s4connector.attribute (
572
					'description': univention.s4connector.attribute (
 Lines 679-685   if configRegistry.is_true('connector/s4/mapping/gpo', True): Link Here 
679
							ldap_attribute='cn',
673
							ldap_attribute='cn',
680
							con_attribute='cn',
674
							con_attribute='cn',
681
							required=1,
675
							required=1,
682
							compare_function=univention.s4connector.compare_lowercase,
683
							single_value=True,
676
							single_value=True,
684
						),
677
						),
685
					'description': univention.s4connector.attribute (
678
					'description': univention.s4connector.attribute (
 Lines 921-927   if configRegistry.is_true('connector/s4/mapping/msprintconnectionpolicy', False) Link Here 
921
							con_attribute='cn',
914
							con_attribute='cn',
922
							required=1,
915
							required=1,
923
							single_value=True,
916
							single_value=True,
924
							compare_function=univention.s4connector.compare_lowercase,
925
						),
917
						),
926
					'description': univention.s4connector.attribute (
918
					'description': univention.s4connector.attribute (
927
							ucs_attribute='description',
919
							ucs_attribute='description',
 Lines 995-1001   if ignore_filter: Link Here 
995
							ldap_attribute='cn',
987
							ldap_attribute='cn',
996
							con_attribute='cn',
988
							con_attribute='cn',
997
							required=1,
989
							required=1,
998
							compare_function=univention.s4connector.compare_lowercase,
999
							single_value=True,
990
							single_value=True,
1000
						),
991
						),
1001
					'description': univention.s4connector.attribute (
992
					'description': univention.s4connector.attribute (
 Lines 1050-1056   if ignore_filter: Link Here 
1050
							ldap_attribute='ou',
1041
							ldap_attribute='ou',
1051
							con_attribute='ou',
1042
							con_attribute='ou',
1052
							required=1,
1043
							required=1,
1053
							compare_function=univention.s4connector.compare_lowercase,
1054
							single_value=True,
1044
							single_value=True,
1055
						),
1045
						),
1056
					'description': univention.s4connector.attribute (
1046
					'description': univention.s4connector.attribute (
1057
- 
1058
case-sensitive compare for some attrs
1047
case-sensitive compare for some attrs
1059
--
1060
.../conffiles/etc/univention/s4connector/s4/mapping.py  | 17 +++++++++++++++++
1048
.../conffiles/etc/univention/s4connector/s4/mapping.py  | 17 +++++++++++++++++
1061
.../modules/univention/s4connector/__init__.py          |  4 ++++
1049
.../modules/univention/s4connector/__init__.py          |  4 ++++
1062
2 files changed, 21 insertions(+)
1050
2 files changed, 21 insertions(+)
(-)a/services/univention-s4-connector/conffiles/etc/univention/s4connector/s4/mapping.py (+17 lines)
 Lines 127-144   if ignore_filter: Link Here 
127
							ucs_attribute='firstname',
127
							ucs_attribute='firstname',
128
							ldap_attribute='givenName',
128
							ldap_attribute='givenName',
129
							con_attribute='givenName',
129
							con_attribute='givenName',
130
							compare_function=univention.s4connector.compare_normal,
130
							single_value=True,
131
							single_value=True,
131
						),
132
						),
132
					'displayName': univention.s4connector.attribute (
133
					'displayName': univention.s4connector.attribute (
133
							ucs_attribute='displayName',
134
							ucs_attribute='displayName',
134
							ldap_attribute='displayName',
135
							ldap_attribute='displayName',
135
							con_attribute='displayName',
136
							con_attribute='displayName',
137
							compare_function=univention.s4connector.compare_normal,
136
							single_value=True,
138
							single_value=True,
137
						),
139
						),
138
					'sn': univention.s4connector.attribute (
140
					'sn': univention.s4connector.attribute (
139
							ucs_attribute='lastname',
141
							ucs_attribute='lastname',
140
							ldap_attribute='sn',
142
							ldap_attribute='sn',
141
							con_attribute='sn',
143
							con_attribute='sn',
144
							compare_function=univention.s4connector.compare_normal,
142
							single_value=True,
145
							single_value=True,
143
						),
146
						),
144
					@!@
147
					@!@
 Lines 199-210   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
199
							ucs_attribute='organisation',
202
							ucs_attribute='organisation',
200
							ldap_attribute='o',
203
							ldap_attribute='o',
201
							con_attribute='company',
204
							con_attribute='company',
205
							compare_function=univention.s4connector.compare_normal,
202
							single_value=True,
206
							single_value=True,
203
						),
207
						),
204
					'description': univention.s4connector.attribute (
208
					'description': univention.s4connector.attribute (
205
							ucs_attribute='description',
209
							ucs_attribute='description',
206
							ldap_attribute='description',
210
							ldap_attribute='description',
207
							con_attribute='description',
211
							con_attribute='description',
212
							compare_function=univention.s4connector.compare_normal,
208
							single_value=True,
213
							single_value=True,
209
						),
214
						),
210
					'mailPrimaryAddress': univention.s4connector.attribute (
215
					'mailPrimaryAddress': univention.s4connector.attribute (
 Lines 218-229   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
218
							ucs_attribute='street',
223
							ucs_attribute='street',
219
							ldap_attribute='street',
224
							ldap_attribute='street',
220
							con_attribute='streetAddress',
225
							con_attribute='streetAddress',
226
							compare_function=univention.s4connector.compare_normal,
221
							single_value=True,
227
							single_value=True,
222
						),
228
						),
223
					'city': univention.s4connector.attribute (
229
					'city': univention.s4connector.attribute (
224
							ucs_attribute='city',
230
							ucs_attribute='city',
225
							ldap_attribute='l',
231
							ldap_attribute='l',
226
							con_attribute='l',
232
							con_attribute='l',
233
							compare_function=univention.s4connector.compare_normal,
227
							single_value=True,
234
							single_value=True,
228
						),
235
						),
229
					'postcode': univention.s4connector.attribute (
236
					'postcode': univention.s4connector.attribute (
 Lines 364-369   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
364
							ucs_attribute='description',
371
							ucs_attribute='description',
365
							ldap_attribute='description',
372
							ldap_attribute='description',
366
							con_attribute='description',
373
							con_attribute='description',
374
							compare_function=univention.s4connector.compare_normal,
367
							single_value=True,
375
							single_value=True,
368
						),
376
						),
369
@!@
377
@!@
 Lines 480-485   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
480
							ucs_attribute='description',
488
							ucs_attribute='description',
481
							ldap_attribute='description',
489
							ldap_attribute='description',
482
							con_attribute='description',
490
							con_attribute='description',
491
							compare_function=univention.s4connector.compare_normal,
483
							single_value=True,
492
							single_value=True,
484
						),
493
						),
485
					'operatingSystem': univention.s4connector.attribute (
494
					'operatingSystem': univention.s4connector.attribute (
 Lines 573-578   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
573
							ucs_attribute='description',
582
							ucs_attribute='description',
574
							ldap_attribute='description',
583
							ldap_attribute='description',
575
							con_attribute='description',
584
							con_attribute='description',
585
							compare_function=univention.s4connector.compare_normal,
576
							single_value=True,
586
							single_value=True,
577
						),
587
						),
578
					'operatingSystem': univention.s4connector.attribute (
588
					'operatingSystem': univention.s4connector.attribute (
 Lines 679-684   if configRegistry.is_true('connector/s4/mapping/gpo', True): Link Here 
679
							ucs_attribute='description',
689
							ucs_attribute='description',
680
							ldap_attribute='description',
690
							ldap_attribute='description',
681
							con_attribute='description',
691
							con_attribute='description',
692
							compare_function=univention.s4connector.compare_normal,
682
							single_value=True,
693
							single_value=True,
683
						),
694
						),
684
					'displayName': univention.s4connector.attribute (
695
					'displayName': univention.s4connector.attribute (
 Lines 803-814   if configRegistry.is_true('connector/s4/mapping/wmifilter', False): Link Here 
803
							ucs_attribute='description',
814
							ucs_attribute='description',
804
							ldap_attribute='description',
815
							ldap_attribute='description',
805
							con_attribute='description',
816
							con_attribute='description',
817
							compare_function=univention.s4connector.compare_normal,
806
							single_value=True,
818
							single_value=True,
807
						),
819
						),
808
					'displayName': univention.s4connector.attribute (
820
					'displayName': univention.s4connector.attribute (
809
							ucs_attribute='displayName',
821
							ucs_attribute='displayName',
810
							ldap_attribute='displayName',
822
							ldap_attribute='displayName',
811
							con_attribute='displayName',
823
							con_attribute='displayName',
824
							compare_function=univention.s4connector.compare_normal,
812
							single_value=True,
825
							single_value=True,
813
						),
826
						),
814
					'author': univention.s4connector.attribute (
827
					'author': univention.s4connector.attribute (
 Lines 919-930   if configRegistry.is_true('connector/s4/mapping/msprintconnectionpolicy', False) Link Here 
919
							ucs_attribute='description',
932
							ucs_attribute='description',
920
							ldap_attribute='description',
933
							ldap_attribute='description',
921
							con_attribute='description',
934
							con_attribute='description',
935
							compare_function=univention.s4connector.compare_normal,
922
							single_value=True,
936
							single_value=True,
923
						),
937
						),
924
					'displayName': univention.s4connector.attribute (
938
					'displayName': univention.s4connector.attribute (
925
							ucs_attribute='displayName',
939
							ucs_attribute='displayName',
926
							ldap_attribute='displayName',
940
							ldap_attribute='displayName',
927
							con_attribute='displayName',
941
							con_attribute='displayName',
942
							compare_function=univention.s4connector.compare_normal,
928
							single_value=True,
943
							single_value=True,
929
						),
944
						),
930
					'msPrintAttributes': univention.s4connector.attribute (
945
					'msPrintAttributes': univention.s4connector.attribute (
 Lines 993-998   if ignore_filter: Link Here 
993
							ucs_attribute='description',
1008
							ucs_attribute='description',
994
							ldap_attribute='description',
1009
							ldap_attribute='description',
995
							con_attribute='description',
1010
							con_attribute='description',
1011
							compare_function=univention.s4connector.compare_normal,
996
							single_value=True,
1012
							single_value=True,
997
						),
1013
						),
998
@!@
1014
@!@
 Lines 1047-1052   if ignore_filter: Link Here 
1047
							ucs_attribute='description',
1063
							ucs_attribute='description',
1048
							ldap_attribute='description',
1064
							ldap_attribute='description',
1049
							con_attribute='description',
1065
							con_attribute='description',
1066
							compare_function=univention.s4connector.compare_normal,
1050
							single_value=True,
1067
							single_value=True,
1051
						),
1068
						),
1052
@!@
1069
@!@
(-)a/services/univention-s4-connector/modules/univention/s4connector/__init__.py (-2 / +4 lines)
 Lines 142-147   def dictonary_lowercase(dict): Link Here 
142
			pass
142
			pass
143
143
144
144
145
def compare_normal(val1, val2):
146
	return val1 == val2
147
148
145
def compare_lowercase(val1, val2):
149
def compare_lowercase(val1, val2):
146
	try:  # TODO: failes if conversion to ascii-str raises exception
150
	try:  # TODO: failes if conversion to ascii-str raises exception
147
		if dictonary_lowercase(val1) == dictonary_lowercase(val2):
151
		if dictonary_lowercase(val1) == dictonary_lowercase(val2):
148
- 
149
--
150
.../conffiles/etc/univention/s4connector/s4/mapping.py               | 5 -----
152
.../conffiles/etc/univention/s4connector/s4/mapping.py               | 5 -----
151
1 file changed, 5 deletions(-)
153
1 file changed, 5 deletions(-)
(-)a/services/univention-s4-connector/conffiles/etc/univention/s4connector/s4/mapping.py (-6 lines)
 Lines 197-207   if configRegistry.is_true('connector/s4/mapping/sid_to_ucs', True) and not confi Link Here 
197
							ucs_attribute='organisation',
197
							ucs_attribute='organisation',
198
							ldap_attribute='o',
198
							ldap_attribute='o',
199
							con_attribute='company',
199
							con_attribute='company',
200
						),
201
					'organisation': univention.s4connector.attribute (
202
							ucs_attribute='organisation',
203
							ldap_attribute='o',
204
							con_attribute='company',
205
							compare_function=univention.s4connector.compare_normal,
200
							compare_function=univention.s4connector.compare_normal,
206
							single_value=True,
201
							single_value=True,
207
						),
202
						),
208
- 

Return to bug 39309