Univention Bugzilla – Bug 27771
DHCP Server Password Change Skript
Last modified: 2012-07-20 15:24:13 CEST
Das Univention DHCP Paket bringt kein Server Password Change Skript mit. Deshalb taucht die folgende Meldung in der daemon.log nach der Rotation des Server Passwort auf: Jun 29 09:29:44 master831 dhcpd: Error: Cannot login into ldap server master831.deadlock83.local:7389: Operations error
Workaround: /etc/init.d/univention-dhcp restart
Die saubere Lösung besteht darin, dem Paket univention-bind ein script /usr/lib/univention-server/server_password_change.d/univention-dhcp hinzuzufügen. In dem script wird im "postchange" Fall der restart des dhcp ausgelöst (wie von Stefan im workaround beschrieben). Analog zum Bug #27516 soll das neue script alle Fälle "prechange", "nochange" und "postchange" abfragen, auch wenn konkret nur im "postchange" eine Aktion ausgelöst wird.
Korrektur: das neue script muss im Paket univention-dhcp eingebaut werden, auf die gleiche Weise, wie das früher schon im Paket univention-bind gemacht wurde. Konkret existiert im Moment schon auf dem Zielsystem die Datei /usr/lib/univention-server/server_password_change.d/univention-bind aus dem Quellkode unter ucs/services/univention-bind/usr/lib/univention-server/server_password_change.d/univention-bind Nach diesem Muster soll die neue Datei auf dem Zielsystem /usr/lib/univention-server/server_password_change.d/univention-dhcp im Quellkode unter ucs/services/univention-dhcp/usr/lib/univention-server/server_password_change.d/univention-dhcp liegen und dort beim Wechsel das server Passworts vom script /usr/lib/univention-server/server_password_change aufgerufen werden.
Ich hab im Paket univention-dhcp ein neues script usr/lib/univention-server/server_password_change.d/univention-dhcp angelegt: eval "$(univention-config-registry shell)" if [ "$1" = "prechange" ] ; then # Nothing to be done on dhcp before password change. : fi if [ "$1" = "nochange" ] ; then # Nothing to be done on dhcp if password remains unchanged. : fi if [ "$1" = "postchange" ] ; then if [ -x "/etc/init.d/univention-dhcp" ]; then # Restart dhcp so that daemon can login into ldap server again. invoke-rc.d univention-dhcp restart else echo "missing /etc/init.d/univention-dhcp" fi fi Nach dem Bauen des Pakets war die Datei beim Testen auf dem Zielsystem (DC master) installiert. Bei jedem Ändern des server Passworts auf dem DC master wird das neue script nun aufgerufen und startet den dhcp service genau wie den bind service neu (siehe log /var/log/univention/server_password_change.log). run-parts: executing /usr/lib/univention-server/server_password_change.d/univention-bind postchange run-parts: executing /usr/lib/univention-server/server_password_change.d/univention-dhcp postchange Restarting univention-dhcp daemon. ok: run: univention-dhcp: (pid 20095) 0s, normally down done. run-parts: executing /usr/lib/univention-server/server_password_change.d/univention-nscd postchange Restarting NSCD:. done (Fr 6. Jul 13:25:08 CEST 2012)
FAIL: ChangeLog svn13937 fehlt \item The DHCP service is now automatically restarted after a server password change (\ucsBug{27771}). → svn13945 OK: univention-dhcp_6.0.22-3.513.201207061320, svn33998,svn34001 FIXME: restart → crestart? Machen aber die anderen Dienste auch nicht? FIXME: Unnötiges eval "$(ucr shell)" FIXME: if-then → case? OK: $ ps `pgrep dhcpd` 1311 ? S 0:00 /usr/sbin/dhcpd -q -f $ ucr set server/password/interval=21 $ tail -f /var/log/univention/server_password_change.log & $ /usr/lib/univention-server/server_password_change .. run-parts: executing /usr/lib/univention-server/server_password_change.d/univention-dhcp prechange ... run-parts: executing /usr/lib/univention-server/server_password_change.d/univention-dhcp postchange Restarting univention-dhcp daemon. ok: run: univention-dhcp: (pid 31526) 0s, normally down done. ... $ ps `pgrep dhcpd` 31526 ? S 0:00 /usr/sbin/dhcpd -q -f
UCS 3.0-2 has been released: http://forum.univention.de/viewtopic.php?f=54&t=1905 If this error occurs again, please use "Clone This Bug".