Hallo,
Ich versuche ein “multivalue” Feld zu definieren, dass mehrere Sites (zB “home,test,demo,project”) hat.
univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set name="iiiiiii4ucs-user-site-sites" \
--set module="users/user" \
--set tabName="7iApps" \
--set groupName="Access to other sites" \
--set groupPosition="4" \
--set ldapMapping="iiiiiii4ucs-user-site-sites" \
--set objectClass="iiiiiii4ucs-user" \
--set shortDescription="Sites" \
--set longDescription="Has access to these sites" \
--set mayChange=1 \
--set syntax=string \
--set multivalue=1 \
In der Web-Administration kann ich alles schön erfassen, löschen, etc. … soweit so gut.
Problem: Im Listener hat das Feld “iiiiiii4ucs-user-site-sites” jedoch immer nur den ersten Wert der eingegebenen Liste. Die restelichen fehlen. Wie ist dies zu beheben?
Besten Dank & Gruss,
Michael
Wie sieht der Wert im LDAP aus?
univention-ldapsearch uid=BENUTZER
Und wie sieht das Listener Modul aus?
Viele Grüße
Stefan
LDAP: Da ist alles richtig drin.
...
objectClass: univentionObject
objectClass: univentionPolicyReference
objectClass: univentionPerson
objectClass: iiiiiii4ucs-user
iiiiiii4ucs-user-type: admin
iiiiiii4ucs-user-site-sites: hallo
iiiiiii4ucs-user-site-sites: velo
iiiiiii4ucs-user-site-sites: testme
...
HANDLER: Der sieht wie folgt aus.
__package__='' # workaround for PEP 366
import listener
import os, binascii, subprocess
name = '7i'
description = 'update 7iApps on changes in UCS-LDAP'
filter = '(objectClass=iiiiiii4ucs-user)'
attributes = ['uid','uidNumber','cn','iiiiiii4ucs-user-type','iiiiiii4ucs-user-app-dokuwiki','iiiiiii4ucs-user-app-phpmyfaq','iiiiiii4ucs-user-app-redmine','iiiiiii4ucs-user-app-svn','iiiiiii4ucs-user-app-trac','iiiiiii4ucs-user-app-wordpress','iiiiiii4ucs-user-site-home','iiiiiii4ucs-user-site-test','iiiiiii4ucs-user-site-sites']
def handler(dn, new, old):
listener.setuid(0)
try:
str = ''
if new:
for s in new:
str += 'new:'+s+'='+new[s][0]+'\n'
if old:
for s in old:
str += 'old:'+s+'='+old[s][0]+'\n'
filename = '/tmp/7i4ucs-'+binascii.b2a_hex(os.urandom(15))
f = open(filename,'w')
f.write(str)
f.close()
os.chmod(filename,0666)
subprocess.call(['/usr/bin/7i4ucs','listener',filename])
# listener.run('/usr/bin/7i4ucs',['7i4ucs','listener',filename],uid=0)
finally:
listener.unsetuid()
Danke & Gruss,
Michael
[quote=“mphofmann”] if new:
for s in new:
str += 'new:'+s+'='+new[s][0]+'\n'
[/quote]
Hier ist nur new[s][0], man müsste auch über new[s] iterieren, also so in der Art:
for s in new:
for val in new[s]:
str += 'new:'+s+'='+val+'\n'
Viele Grüße
Stefan