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

Collapse All | Expand All

(-)a/services/univention-s4-connector/conffiles/etc/univention/s4connector/s4/mapping.py (-56 / +40 lines)
 Lines 40-45   import univention.s4connector.s4.dc Link Here 
40
import univention.s4connector.s4.computer
40
import univention.s4connector.s4.computer
41
41
42
@!@
42
@!@
43
43
global_ignore_subtree=['cn=univention,@%@ldap/base@%@','cn=policies,@%@ldap/base@%@',
44
global_ignore_subtree=['cn=univention,@%@ldap/base@%@','cn=policies,@%@ldap/base@%@',
44
			'cn=shares,@%@ldap/base@%@','cn=printers,@%@ldap/base@%@',
45
			'cn=shares,@%@ldap/base@%@','cn=printers,@%@ldap/base@%@',
45
			'cn=networks,@%@ldap/base@%@', 'cn=kerberos,@%@ldap/base@%@',
46
			'cn=networks,@%@ldap/base@%@', 'cn=kerberos,@%@ldap/base@%@',
 Lines 102-113   else: Link Here 
102
			con_search_filter='(&(objectClass=user)(!(objectClass=computer))(userAccountControl:1.2.840.113556.1.4.803:=512))',
103
			con_search_filter='(&(objectClass=user)(!(objectClass=computer))(userAccountControl:1.2.840.113556.1.4.803:=512))',
103
			match_filter='(&(|(&(objectClass=posixAccount)(objectClass=krb5Principal))(objectClass=user))(!(objectClass=univentionHost)))',
104
			match_filter='(&(|(&(objectClass=posixAccount)(objectClass=krb5Principal))(objectClass=user))(!(objectClass=univentionHost)))',
104
@!@
105
@!@
105
ignore_filter = ''
106
from univention.s4connector.s4.mapping import ignore_filter_from_tmpl
106
for user in configRegistry.get('connector/s4/mapping/user/ignorelist', '').split(','):
107
ignore_filter = ignore_filter_from_tmpl('(uid={0!e})(CN={0!e})', 'connector/s4/mapping/user/ignorelist')
107
	if user:
108
		ignore_filter += '(uid=%s)(CN=%s)' % (user, user)
109
if ignore_filter:
108
if ignore_filter:
110
	print "			ignore_filter='(|%s)'," % ignore_filter
109
	print "			ignore_filter=%r," % ignore_filter
111
@!@
110
@!@
112
			ignore_subtree = global_ignore_subtree,
111
			ignore_subtree = global_ignore_subtree,
113
			
112
			
 Lines 313-325   else: Link Here 
313
			scope='sub',
312
			scope='sub',
314
313
315
@!@
314
@!@
316
ignore_filter = ''
315
from univention.s4connector.s4.mapping import ignore_filter_from_attr
316
ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/group/ignorelist')
317
if configRegistry.is_false('connector/s4/mapping/group/grouptype', False):
317
if configRegistry.is_false('connector/s4/mapping/group/grouptype', False):
318
	ignore_filter += '(sambaGroupType=5)(groupType=5)'
318
	ignore_filter = '(|{}{})'.format('(sambaGroupType=5)(groupType=5)', ignore_filter)
319
for group in configRegistry.get('connector/s4/mapping/group/ignorelist', '').split(','):
319
if ignore_filter:
320
	if group:
320
	print "			ignore_filter=%r," % ignore_filter
321
		ignore_filter += '(cn=%s)' % (group)
322
print "			ignore_filter='(|%s)'," % ignore_filter
323
@!@
321
@!@
324
322
325
			ignore_subtree = global_ignore_subtree,
323
			ignore_subtree = global_ignore_subtree,
 Lines 431-442   if group_map: Link Here 
431
			# and this subobject would avoid a deletion of this DC in S4
429
			# and this subobject would avoid a deletion of this DC in S4
432
			con_subtree_delete_objects = [ 'cn=rid set' ],
430
			con_subtree_delete_objects = [ 'cn=rid set' ],
433
@!@
431
@!@
434
ignore_filter = ''
432
from univention.s4connector.s4.mapping import ignore_filter_from_attr
435
for dc in configRegistry.get('connector/s4/mapping/dc/ignorelist', '').split(','):
433
ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/dc/ignorelist')
436
	if dc:
437
		ignore_filter += '(cn=%s)' % (dc)
438
if ignore_filter:
434
if ignore_filter:
439
	print "			ignore_filter='(|%s)'," % ignore_filter
435
	print "			ignore_filter=%r," % ignore_filter
440
@!@
436
@!@
441
	
437
	
442
			@!@
438
			@!@
 Lines 533-544   else: Link Here 
533
529
534
			ignore_subtree = global_ignore_subtree,
530
			ignore_subtree = global_ignore_subtree,
535
@!@
531
@!@
536
ignore_filter = ''
532
from univention.s4connector.s4.mapping import ignore_filter_from_attr
537
for computer in configRegistry.get('connector/s4/mapping/windowscomputer/ignorelist', '').split(','):
533
ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/windowscomputer/ignorelist')
538
	if computer:
539
		ignore_filter += '(cn=%s)' % (computer)
540
if ignore_filter:
534
if ignore_filter:
541
	print "			ignore_filter='(|%s)'," % ignore_filter
535
	print "			ignore_filter=%r," % ignore_filter
542
@!@
536
@!@
543
537
544
			con_create_objectclass=['top', 'computer' ],
538
			con_create_objectclass=['top', 'computer' ],
 Lines 635-647   dns_section = ''' Link Here 
635
	's4_dns_ldap_base': s4_dns_ldap_base,
629
	's4_dns_ldap_base': s4_dns_ldap_base,
636
	}
630
	}
637
631
638
ignore_filter = ''
632
from univention.s4connector.s4.mapping import ignore_filter_from_attr
639
for dns in configRegistry.get('connector/s4/mapping/dns/ignorelist', '').split(','):
633
ignore_filter = ignore_filter_from_attr('dc', 'connector/s4/mapping/dns/ignorelist')
640
	if dns:
634
641
		ignore_filter += '(DC=%s)' % (dns)
642
if ignore_filter:
635
if ignore_filter:
643
	dns_section = dns_section + '''
636
	dns_section = dns_section + '''
644
			ignore_filter='(|%s)',''' % ignore_filter
637
			ignore_filter=%r,''' % ignore_filter
645
638
646
	dns_section = dns_section + '''
639
	dns_section = dns_section + '''
647
			ignore_subtree = global_ignore_subtree,
640
			ignore_subtree = global_ignore_subtree,
 Lines 653-664   if ignore_filter: Link Here 
653
646
654
print dns_section
647
print dns_section
655
648
649
from univention.s4connector.s4.mapping import ignore_filter_from_attr
656
650
657
if configRegistry.is_true('connector/s4/mapping/gpo', True):
651
if configRegistry.is_true('connector/s4/mapping/gpo', True):
658
	ignore_filter = ''
652
	ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/gpo/ignorelist')
659
	for gpo in configRegistry.get('connector/s4/mapping/gpo/ignorelist', '').split(','):
660
		if gpo:
661
			ignore_filter += '(cn=%s)' % (gpo)
662
	if configRegistry.get('connector/s4/mapping/ou/syncmode'):
653
	if configRegistry.get('connector/s4/mapping/ou/syncmode'):
663
		sync_mode_ou=configRegistry.get('connector/s4/mapping/ou/syncmode')
654
		sync_mode_ou=configRegistry.get('connector/s4/mapping/ou/syncmode')
664
	else:
655
	else:
 Lines 673-679   if configRegistry.is_true('connector/s4/mapping/gpo', True): Link Here 
673
664
674
			con_search_filter='(&(objectClass=container)(objectClass=groupPolicyContainer))',
665
			con_search_filter='(&(objectClass=container)(objectClass=groupPolicyContainer))',
675
666
676
			ignore_filter='%(ignore_filter)s',
667
			ignore_filter=%(ignore_filter)r,
677
668
678
			ignore_subtree = global_ignore_subtree,
669
			ignore_subtree = global_ignore_subtree,
679
			
670
			
 Lines 772-782   if configRegistry.is_true('connector/s4/mapping/gpo', True): Link Here 
772
'''
763
'''
773
	print section
764
	print section
774
765
766
from univention.s4connector.s4.mapping import ignore_filter_from_attr
767
775
if configRegistry.is_true('connector/s4/mapping/wmifilter', False):
768
if configRegistry.is_true('connector/s4/mapping/wmifilter', False):
776
	ignore_filter = ''
769
	ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/wmifilter/ignorelist')
777
	for wmifilter in configRegistry.get('connector/s4/mapping/wmifilter/ignorelist', '').split(','):
778
		if wmifilter:
779
			ignore_filter += '(cn=%s)' % (wmifilter)
780
	if configRegistry.get('connector/s4/mapping/ou/syncmode'):
770
	if configRegistry.get('connector/s4/mapping/ou/syncmode'):
781
		sync_mode_ou=configRegistry.get('connector/s4/mapping/ou/syncmode')
771
		sync_mode_ou=configRegistry.get('connector/s4/mapping/ou/syncmode')
782
	else:
772
	else:
 Lines 791-797   if configRegistry.is_true('connector/s4/mapping/wmifilter', False): Link Here 
791
781
792
			con_search_filter='(objectClass=msWMI-Som)',
782
			con_search_filter='(objectClass=msWMI-Som)',
793
783
794
			ignore_filter='%(ignore_filter)s',
784
			ignore_filter=%(ignore_filter)r,
795
785
796
			ignore_subtree = global_ignore_subtree,
786
			ignore_subtree = global_ignore_subtree,
797
			
787
			
 Lines 901-911   if configRegistry.is_true('connector/s4/mapping/wmifilter', False): Link Here 
901
		),
891
		),
902
''' % {'ignore_filter': ignore_filter, 'sync_mode_ou': sync_mode_ou}
892
''' % {'ignore_filter': ignore_filter, 'sync_mode_ou': sync_mode_ou}
903
893
894
from univention.s4connector.s4.mapping import ignore_filter_from_attr
895
904
if configRegistry.is_true('connector/s4/mapping/msprintconnectionpolicy', False):
896
if configRegistry.is_true('connector/s4/mapping/msprintconnectionpolicy', False):
905
	ignore_filter = ''
897
	ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/msprintconnectionpolicy/ignorelist')
906
	for cfilter in configRegistry.get('connector/s4/mapping/msprintconnectionpolicy/ignorelist', '').split(','):
907
		if cfilter:
908
			ignore_filter += '(cn=%s)' % (cfilter)
909
	if configRegistry.get('connector/s4/mapping/ou/syncmode'):
898
	if configRegistry.get('connector/s4/mapping/ou/syncmode'):
910
		sync_mode_ou=configRegistry.get('connector/s4/mapping/ou/syncmode')
899
		sync_mode_ou=configRegistry.get('connector/s4/mapping/ou/syncmode')
911
	else:
900
	else:
 Lines 916-922   if configRegistry.is_true('connector/s4/mapping/msprintconnectionpolicy', False) Link Here 
916
			sync_mode='%(sync_mode_ou)s',
905
			sync_mode='%(sync_mode_ou)s',
917
			scope='sub',
906
			scope='sub',
918
			con_search_filter='(objectClass=msPrint-ConnectionPolicy)',
907
			con_search_filter='(objectClass=msPrint-ConnectionPolicy)',
919
			ignore_filter='%(ignore_filter)s',
908
			ignore_filter=%(ignore_filter)r,
920
			ignore_subtree = global_ignore_subtree,
909
			ignore_subtree = global_ignore_subtree,
921
			con_create_objectclass=['top', 'msPrint-ConnectionPolicy' ],
910
			con_create_objectclass=['top', 'msPrint-ConnectionPolicy' ],
922
			attributes= {
911
			attributes= {
 Lines 984-995   else: Link Here 
984
			con_search_filter='(&(|(objectClass=container)(objectClass=builtinDomain))(!(objectClass=groupPolicyContainer)))', # builtinDomain is cn=builtin (with group cn=Administrators)
973
			con_search_filter='(&(|(objectClass=container)(objectClass=builtinDomain))(!(objectClass=groupPolicyContainer)))', # builtinDomain is cn=builtin (with group cn=Administrators)
985
974
986
@!@
975
@!@
987
ignore_filter = ''
976
from univention.s4connector.s4.mapping import ignore_filter_from_attr
988
for cn in configRegistry.get('connector/s4/mapping/container/ignorelist', 'mail,kerberos,MicrosoftDNS').split(','):
977
ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/container/ignorelist', 'mail,kerberos,MicrosoftDNS')
989
	if cn:
990
		ignore_filter += '(cn=%s)' % (cn)
991
if ignore_filter:
978
if ignore_filter:
992
	print "			ignore_filter='(|%s)'," % ignore_filter
979
	print "			ignore_filter=%r," % ignore_filter
993
@!@
980
@!@
994
981
995
			ignore_subtree = global_ignore_subtree,
982
			ignore_subtree = global_ignore_subtree,
 Lines 1041-1052   else: Link Here 
1041
			con_search_filter='objectClass=organizationalUnit',
1028
			con_search_filter='objectClass=organizationalUnit',
1042
1029
1043
@!@
1030
@!@
1044
ignore_filter = ''
1031
from univention.s4connector.s4.mapping import ignore_filter_from_attr
1045
for ou in configRegistry.get('connector/s4/mapping/ou/ignorelist', '').split(','):
1032
ignore_filter = ignore_filter_from_attr('ou', 'connector/s4/mapping/ou/ignorelist')
1046
	if ou:
1047
		ignore_filter += '(ou=%s)' % (ou)
1048
if ignore_filter:
1033
if ignore_filter:
1049
	print "			ignore_filter='(|%s)'," % ignore_filter
1034
	print "			ignore_filter=%r," % ignore_filter
1050
@!@
1035
@!@
1051
1036
1052
			ignore_subtree = global_ignore_subtree,
1037
			ignore_subtree = global_ignore_subtree,
 Lines 1100-1111   else: Link Here 
1100
			con_search_filter='(|(&(objectClass=domain)(!(|(name=DomainDnsZones)(name=ForestDnsZones))))(objectClass=sambaDomainName))',
1085
			con_search_filter='(|(&(objectClass=domain)(!(|(name=DomainDnsZones)(name=ForestDnsZones))))(objectClass=sambaDomainName))',
1101
1086
1102
@!@
1087
@!@
1103
ignore_filter = ''
1088
from univention.s4connector.s4.mapping import ignore_filter_from_attr
1104
for cn in configRegistry.get('connector/s4/mapping/dc/ignorelist', '').split(','):
1089
ignore_filter = ignore_filter_from_attr('cn', 'connector/s4/mapping/dc/ignorelist')
1105
	if cn:
1090
1106
		ignore_filter += '(cn=%s)' % (cn)
1107
if ignore_filter:
1091
if ignore_filter:
1108
	print "			ignore_filter='(|%s)'," % ignore_filter
1092
	print "			ignore_filter=%r," % ignore_filter
1109
@!@
1093
@!@
1110
1094
1111
			ignore_subtree = global_ignore_subtree,
1095
			ignore_subtree = global_ignore_subtree,
(-)a/services/univention-s4-connector/modules/univention/s4connector/s4/mapping.py (-1 / +37 lines)
 Lines 36-45   import univention.config_registry as ucr Link Here 
36
import univention.debug2 as ud
36
import univention.debug2 as ud
37
import univention.s4connector.s4
37
import univention.s4connector.s4
38
38
39
from univention.s4connector.s4 import format_escaped
40
39
configRegistry = ucr.ConfigRegistry()
41
configRegistry = ucr.ConfigRegistry()
40
configRegistry.load()
42
configRegistry.load()
41
43
42
44
45
def ignore_filter_from_tmpl(template, ucr_key, default=''):
46
	"""
47
	Construct an `ignore_filter` from a `ucr_key`
48
	(`connector/s4/mapping/*/ignorelist`, a comma delimited list of values), as
49
	specified by `template` while correctly escaping the filter-expression.
50
51
	`template` must be formatted as required by `format_escaped`.
52
53
	>>> ignore_filter_from_tmpl('(cn={0!e})',
54
	... 'connector/s4/mapping/nonexistend/ignorelist',
55
	... 'one,two,three')
56
	'(|(cn=one)(cn=two)(cn=three))'
57
	"""
58
	variables = [v for v in configRegistry.get(ucr_key, default).split(',') if v]
59
	filter_parts = [format_escaped(template, v) for v in variables]
60
	if filter_parts:
61
		return '(|{})'.format(''.join(filter_parts))
62
	return ''
63
64
65
def ignore_filter_from_attr(attribute, ucr_key, default=''):
66
	"""
67
	Convenience-wrapper arround `ignore_filter_from_tmpl()`.
68
69
	This expects a single `attribute` instead of a `template` argument.
70
71
	>>> ignore_filter_from_attr('cn',
72
	... 'connector/s4/mapping/nonexistend/ignorelist',
73
	... 'one,two,three')
74
	'(|(cn=one)(cn=two)(cn=three))'
75
	"""
76
	template = '({}={{0!e}})'.format(attribute)
77
	return ignore_filter_from_tmpl(template, ucr_key, default)
78
79
43
def ucs2s4_sid(s4connector, key, object):
80
def ucs2s4_sid(s4connector, key, object):
44
	_d = ud.function('mapping.ucs2s4_sid -- not implemented')
81
	_d = ud.function('mapping.ucs2s4_sid -- not implemented')
45
82
46
- 

Return to bug 32086