Master - Slave - Join script

Hallo,

Wir haben mehrere App-Pakete und einige Felder im LDAP und UDM.
Wir haben eine Routine “7i4ucs”, die Scripts wie das untenstehende zusammenstellt und ausführt.

#!/bin/sh

. /usr/share/univention-lib/all.sh

# user extended attributes
$(univention-config-registry shell)

univention-directory-manager settings/extended_attribute remove "$@" --dn "cn=iiiiiii4ucs-user-app-dokuwiki,cn=7i,cn=custom attributes,cn=univention,$ldap_base" >/dev/null
univention-directory-manager settings/extended_attribute remove "$@" --dn "cn=iiiiiii4ucs-user-app-phpmyfaq,cn=7i,cn=custom attributes,cn=univention,$ldap_base" >/dev/null
univention-directory-manager settings/extended_attribute remove "$@" --dn "cn=iiiiiii4ucs-user-app-redmine,cn=7i,cn=custom attributes,cn=univention,$ldap_base" >/dev/null
univention-directory-manager settings/extended_attribute remove "$@" --dn "cn=iiiiiii4ucs-user-app-svn,cn=7i,cn=custom attributes,cn=univention,$ldap_base" >/dev/null
univention-directory-manager settings/extended_attribute remove "$@" --dn "cn=iiiiiii4ucs-user-app-trac,cn=7i,cn=custom attributes,cn=univention,$ldap_base" >/dev/null
univention-directory-manager settings/extended_attribute remove "$@" --dn "cn=iiiiiii4ucs-user-app-wordpress,cn=7i,cn=custom attributes,cn=univention,$ldap_base" >/dev/null
ucs_addServiceToLocalhost "7i" "$@" > /dev/null

# UDM folder
univention-directory-manager container/cn create "$@" --ignore_exists \
--position "cn=custom attributes,cn=univention,$ldap_base" \
--set name="7i" \
--set description="Attributes for 7iApps configuration"

univention-directory-manager container/cn create "$@" --ignore_exists \
--position "$ldap_base" \
--set name="7i"

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set name="iiiiiii4ucs-user-type" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set ldapMapping="iiiiiii4ucs-user-type" \
--set shortDescription="Type (Warning: *None* will delete user data)" \
--set translationShortDescription='"de_DE" "Typ (Achtung: *None* löscht alle Benutzer-Daten)"' \

univention-directory-manager settings/extended_attribute modify \
--dn "cn=iiiiiii4ucs-user-type,cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set tabName="7iApps" \
--set mayChange="1" \
--set syntax="iiiiiii4ucsUserType" \
--set hook="iiiiiii4ucsUserType" \
--set default="user" \
--set groupPosition="1" \
--set groupName="User type" \
--set translationGroupName='"de_DE" "Benutzer-Typ"' \
--set longDescription="Select the 7iApps role for this user. Warning: by changing the role to *None* all 7iApps-related user data will get deleted." \
--set translationLongDescription='"de_DE" "Wählt die 7iApps-Rolle für den Benutzer. Achtung: wenn Sie die Rolle *None* wählen, werden alle 7iApps-bezogene Benutzer-Daten gelöscht."' \

# etc/etc für weitere Felder.

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set name="iiiiiii4ucs-user-site-home" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set ldapMapping="iiiiiii4ucs-user-site-home" \
--set shortDescription="home" \
--set translationShortDescription='"de_DE" "home"' \

univention-directory-manager settings/extended_attribute modify \
--dn "cn=iiiiiii4ucs-user-site-home,cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set tabName="7iApps" \
--set mayChange="1" \
--set syntax="boolean" \
--set default="1" \
--set groupPosition="3" \
--set groupName="Access to sites" \
--set translationGroupName='"de_DE" "Zugriff auf Sites"' \
--set longDescription="Has access to the site" \
--set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

stop_udm_cli_server

. /usr/share/univention-lib/umc.sh
umc_frontend_new_hash

Bei einer Installation eines neuen Paketes wird diese Routine im Postinst aufgerufen.
Dies funktioniert gut auf einem Master-Server und alle Settings/Felder werden korrekt angezeigt.

Leider funktioniert dies nicht auf einem Slave-Server. Irgendwie gibt es Probleme mit dem LDAP.

Frage: wie genau ist das Script zu modifizieren, so dass es auch auf einem Slave-Server funktioniert?

Besten Dank,
Michael Hofmann

Hallo Herr Hofmann,

es gibt einen kleinen Vertipper im Skript:

$(univention-config-registry shell)

muss heißen

eval "$(univention-config-registry shell)"

Aber das ist gar nicht das Problem. Das Problem ist das “$@”. Das ist eine spezielle Variable in Bash, die alle dem Skript übergebenen Parameter beinhaltet. Das Skript sollte in der Form durchaus auf einem Slave funktionieren. Es funktioniert aber nicht wegen der Routine “7i4ucs” selbst.

“$@” beinhaltet in einem Join-Skript insbesondere --binddn uid=Administrator,cn=users,dc=… und --bindpwd supersecretpassword. Wenn Sie im Join-Skript einfach nur “7i4ucs postinst 123” aufrufen, dann sind danach alle Variablen in “$@” verloren. Vor allem, wenn es sich nicht mehr um bash, sondern um PHP handelt. Sie müssen die Parameter ins PHP-Skript retten und von dort an univention-directory-manager weiterreichen (beim Wechsel bash->PHP und PHP->bash wird man wohl sehr auf Maskierung von Sonderzeichen achten müssen).

Viele Grüße
Dirk Wiesenthal

Hallo Herr Wiesenthal,

Danke für den Input.

Wir machen es jetzt quasi umgekehrt: das Join-Script holt sich die entsprechenden Befehle von unserer “7i4ucs”-Routine und fürt diese dann gleich aus. So stimmen die ganzen Umgebungsvariablen.

Zum Beispiel mit:

eval "$(7i4ucs UdmFieldResetEcho app-wordpress)"

Das funktioniert bestens.

Grüsse,
Michael Hofmann

Mastodon