Multivalue=1

german
integration

#1

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


#2

Wie sieht der Wert im LDAP aus?

univention-ldapsearch uid=BENUTZER

Und wie sieht das Listener Modul aus?

Viele Grüße
Stefan


#3

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


#4

[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


#5

Danke - das so geklappt.

Grüsse,
Michael