View | Details | Raw Unified | Return to bug 52682
Collapse All | Expand All

(-)a/base/univention-pam/well-known-sid-name-mapping.py (-26 / +30 lines)
 Lines 53-58   modrdn = '1' Link Here 
53
ucr = univention.config_registry.ConfigRegistry()
53
ucr = univention.config_registry.ConfigRegistry()
54
ucr.load()
54
ucr.load()
55
modified_default_names = []
55
modified_default_names = []
56
set_ucr_key__value_list = []
57
unset_ucr_key_list = []
56
58
57
59
58
def sidToName(sid):
60
def sidToName(sid):
 Lines 65-70   def sidToName(sid): Link Here 
65
67
66
68
67
def checkAndSet(new, old):
69
def checkAndSet(new, old):
70
	global set_ucr_key__value_list
71
	global unset_ucr_key_list
72
68
	obj = new or old
73
	obj = new or old
69
	if not obj:
74
	if not obj:
70
		return
75
		return
 Lines 115-136   def checkAndSet(new, old): Link Here 
115
		ucr.load()
120
		ucr.load()
116
		ucr_value = ucr.get(unset_ucr_key)
121
		ucr_value = ucr.get(unset_ucr_key)
117
		if ucr_value:
122
		if ucr_value:
118
			ud.debug(ud.LISTENER, ud.PROCESS, "%s: ucr unset %s=%s" % (name, unset_ucr_key, ucr_value))
123
			unset_ucr_key_list.append(unset_ucr_key)
119
			listener.setuid(0)
124
			modified_default_names.append(default_name)
120
			try:
125
			ud.debug(ud.LISTENER, ud.PROCESS, "%s: scheduling ucr unset %s=%s" % (name, unset_ucr_key, ucr_value))
121
				univention.config_registry.handler_unset([unset_ucr_key])
122
				return default_name
123
			finally:
124
				listener.unsetuid()
125
	else:
126
	else:
126
		ucr_key_value = "%s/%s=%s" % (ucr_base, default_name_lower, obj_name)
127
		ucr_key_value = "%s/%s=%s" % (ucr_base, default_name_lower, obj_name)
127
		ud.debug(ud.LISTENER, ud.PROCESS, "%s: ucr set %s" % (name, ucr_key_value))
128
		modified_default_names.append(default_name)
128
		listener.setuid(0)
129
		ud.debug(ud.LISTENER, ud.PROCESS, "%s: scheduling ucr set %s" % (name, ucr_key_value))
129
		try:
130
		set_ucr_key__value_list.append(ucr_key_value)
130
			univention.config_registry.handler_set([ucr_key_value])
131
			return default_name
132
		finally:
133
			listener.unsetuid()
134
131
135
132
136
def no_relevant_change(new, old):
133
def no_relevant_change(new, old):
 Lines 157-164   def no_relevant_change(new, old): Link Here 
157
154
158
def handler(dn, new, old, command):
155
def handler(dn, new, old, command):
159
	# type: (str, dict, dict, str) -> None
156
	# type: (str, dict, dict, str) -> None
160
	global modified_default_names
161
162
	if ucr.is_false("listener/module/wellknownsidnamemapping", False):
157
	if ucr.is_false("listener/module/wellknownsidnamemapping", False):
163
		ud.debug(ud.LISTENER, ud.INFO, '%s: deactivated by listener/module/wellknownsidnamemapping' % (name,))
158
		ud.debug(ud.LISTENER, ud.INFO, '%s: deactivated by listener/module/wellknownsidnamemapping' % (name,))
164
		return
159
		return
 Lines 209-239   def handler(dn, new, old, command): Link Here 
209
	if new:
204
	if new:
210
		if not old:  # add
205
		if not old:  # add
211
			ud.debug(ud.LISTENER, ud.INFO, "%s: new %r" % (name, new.get("sambaSID")))
206
			ud.debug(ud.LISTENER, ud.INFO, "%s: new %r" % (name, new.get("sambaSID")))
212
			changed_default_name = checkAndSet(new, old)
207
			checkAndSet(new, old)
213
			if changed_default_name:
214
				modified_default_names.append(changed_default_name)
215
208
216
		else:  # modify
209
		else:  # modify
217
			if no_relevant_change(new, old):
210
			if no_relevant_change(new, old):
218
				return
211
				return
219
212
			checkAndSet(new, old)
220
			changed_default_name = checkAndSet(new, old)
221
			if changed_default_name:
222
				modified_default_names.append(changed_default_name)
223
213
224
	elif old:  # delete
214
	elif old:  # delete
225
		ud.debug(ud.LISTENER, ud.INFO, "%s: del %r" % (name, old.get("sambaSID")))
215
		ud.debug(ud.LISTENER, ud.INFO, "%s: del %r" % (name, old.get("sambaSID")))
226
		changed_default_name = checkAndSet(new, old)
216
		checkAndSet(new, old)
227
		if changed_default_name:
228
			modified_default_names.append(changed_default_name)
229
217
230
218
231
def postrun():
219
def postrun():
232
	# type: () -> None
220
	# type: () -> None
233
	global modified_default_names
221
	global modified_default_names
222
	global set_ucr_key__value_list
223
	global unset_ucr_key_list
224
234
	if not modified_default_names:
225
	if not modified_default_names:
235
		return
226
		return
236
227
228
	listener.setuid(0)
229
	try:
230
		if unset_ucr_key_list:
231
			ud.debug(ud.LISTENER, ud.INFO, "%s: Running ucs unset %s" % (name, unset_ucr_key_list))
232
			univention.config_registry.handler_unset(unset_ucr_key_list)
233
			unset_ucr_key_list = []
234
		if set_ucr_key__value_list:
235
			ud.debug(ud.LISTENER, ud.INFO, "%s: Running ucs set %s" % (name, set_ucr_key__value_list))
236
			univention.config_registry.handler_set(set_ucr_key__value_list)
237
			set_ucr_key__value_list = []
238
	finally:
239
		listener.unsetuid()
240
237
	hook_dir = '/usr/lib/univention-pam/well-known-sid-name-mapping.d'
241
	hook_dir = '/usr/lib/univention-pam/well-known-sid-name-mapping.d'
238
	if not os.path.isdir(hook_dir):
242
	if not os.path.isdir(hook_dir):
239
		return
243
		return

Return to bug 52682