Bug 16214 - univention-server-join bricht bei Fehlern nicht immer ab
univention-server-join bricht bei Fehlern nicht immer ab
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Join (univention-join)
UCS 2.4
Other Linux
: P5 normal (vote)
: UCS 3.0-2
Assigned To: Jürgen Kahrs
Stefan Gohmann
: interim-2
: 20761 (view as bug list)
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2009-10-30 15:00 CET by Ingo Steuwer
Modified: 2012-07-20 15:24 CEST (History)
4 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ingo Steuwer univentionstaff 2009-10-30 15:00:35 CET
Im Skript steht:

                if [ $? = 1 ]; then
                        log 1 "E: failed to modify $1 $old_dn [$rc]"
                fi

Return-Codes >1 werden dann nicht als Fehler gewertet.
Comment 1 Ingo Steuwer univentionstaff 2009-11-27 12:14:54 CET
Beispiel: die MAC-Adresse eines joinenden DC-Slave ist bereits an einem anderen System vergeben, der eigentliche Join hängt dann erst später bei "donwloading host certificate".
Comment 2 Ingo Steuwer univentionstaff 2010-06-28 13:28:34 CEST
Beispiel2: Der join-user hat keine ausreichenden Berechtigungen den join (Änderungen am Rechnerobjekt) durchzuführen.
Comment 3 Jan Christoph Ebersbach univentionstaff 2012-03-09 12:35:41 CET
*** Bug 20761 has been marked as a duplicate of this bug. ***
Comment 4 Felix Herrmann univentionstaff 2012-03-14 13:37:49 CET
Es ist eine spezielle Variante des Bugs aufgetreten: 

Wurde der Join von einem init-Skript beim Systemstart angestoßen (Projektimplementierung univention-autojoin), hing der Join bei "downloading
host certificate". 

Wurde der Join durch den Aufruf des init-Skriptes auf einem laufenden System angestoßen, lief er problemlos durch.

Ursache: 
Während des Systemstarts wurde beim Join die MAC-Adresse ausgewertet. Da diese bereits im UDM an einem anderen Objekt vorhanden war, schlug die Zurodnung korrekterweise fehl. Es wurde keine Fehlermeldung ausgegeben und erst der Folgefehler (host certificates) fiel auf.

Auf dem laufenden System wurde keine MAC-Adresse übergeben (möglicherweise wg Xen-Konfiguration) und der Join lief durch. Allerdings wurde keine MAC-Adresse im UDM hinterlegt.
Comment 5 Stefan Gohmann univentionstaff 2012-06-27 12:20:00 CEST
Ein Teil wurde ggf. schon mit Bug #19430 implementiert.
Comment 6 Jürgen Kahrs univentionstaff 2012-06-27 13:35:02 CEST
Auf den ersten Blick scheint die Sache doch klar zu sein:

  - im allerersten Kommentar wird gefordert, return codes größer als 1 auszuwerten; das passiert aber nirgends
  - udm gibt auch die return codes 2 ("password is to short") und 3 (OPERATION FAILED) aus
  - udm wird an 7 Stellen in univention-server-join aufgerufen; an 4 dieser Stellen findet keine Auswertung des rc statt und an den restlichen 3 wird der rc nur auf 1 ausgewertet

Vermutlich reicht es also aus, an allen 7 Stellen die Abfrage des rc so einzubauen, dass die beiden Fälle "0" und "!= 0" erfasst sind. 

Quellkode daszu steckt im SVN unter
  udm: ucs/management/univention-directory-manager-modules/univention-cli-client).
  univention-server-join: ucs/management/univention-join$ vi univention-server-join

Ist das Ok so oder hab ich da was falsch verstanden ?
Comment 7 Jürgen Kahrs univentionstaff 2012-06-27 14:43:34 CEST
Philip hat mir gerade erklärt, dass das script univention-server-join nur auf dem DC master ausgeführt wird, um einen beliebigen Rechner mit beliebiger IP und MAC im LDAP einzutragen. Dieses script ist NICHT dazu gedacht, auf einem Rechner mit einer anderen Rolle als DC master aufgerufen zu werden.

Zum Testen reicht es deshalb aus, mit einem einzigen DC Master zu arbeiten, dessen LDAP-Einträge mit Hilfe des scripts univention-server-join geändert werden. Es ist nicht notwendig und auch NICHT sinnvoll, neben univention-server-join noch das script univention-join aufzurufen.
Comment 8 Jürgen Kahrs univentionstaff 2012-06-27 15:29:40 CEST
Das in Kommentar 1 und Kommentar 4 beschriebene Problem kann ich hier nicht nachvollziehen. Im folgenden Beispiel lege ich einen server mit einer MAC-Adresse an und wiederhole das Anlegen ein zweites Mal. Im ersten Durchgang klappt das Anlegen erwartungsgemäß, im zweiten kommt sofort eine ordentliche Fehlermeldung über die bereits existierende MAC-Adresse. Soweit läuft das script also bestens.

/usr/share/univention-join/univention-server-join -hostname ein_neuer_server -role memberserver -mac '52:54:00:43:bd:58' ; echo $?
univention-server-join: joins a server to an univention domain
copyright (c) 2001-2012 Univention GmbH, Germany

ldap_dn="cn=ein_neuer_server,cn=memberserver,cn=computers,dc=jkahrs,dc=dev"
KerberosPasswd="mdVid0yF" 
0
root@ucs30-64-dc-smb:~# /usr/share/univention-join/univention-server-join -hostname ein_anderer_server -role memberserver -mac '52:54:00:43:bd:58' ; echo $?
univention-server-join: joins a server to an univention domain
copyright (c) 2001-2012 Univention GmbH, Germany

E: failed to create Member Server (2) [E: Object exists: (mac)  52:54:00:43:bd:58]
1


Da keine akuten Probleme mehr vorliegen, werde ich nur noch präventiv alle Stellen, an denen udm gerufen wird so erweitern, dass return codes ordentlich ausgewertet und aussagekräftige Fehlermeldungen von UDM weitergereicht werden.
Comment 9 Stefan Gohmann univentionstaff 2012-06-27 16:23:41 CEST
Bitte auch sicherstellen, dass die Meldungen richtig in univention-join angezeigt werden. Der Administrator ruft beim Joinen nur univention-join auf, das triggert dann den Aufruf von univention-server-join auf dem Master.
Comment 10 Jürgen Kahrs univentionstaff 2012-06-28 10:39:58 CEST
Ich hab die Änderungen am script durchgeführt und das Paket neu gebaut.

+univention-join (4.0.36-1) unstable; urgency=low
+
+  * univention-server-join: Improved error checking (Bug #16214)
+  * Replaced "if [ $? = 1 ]" with "if [ $? -gt 0 ]" in several
+    places so that all errors reported by udm are detected 
+  * Added such a check after "udm groups/group modify"
+  * Replaced internal variable name HOSTNAME with NEWHOSTNAME
+    because HOSTNAME is always set by default with the local
+    server name and this shall not be the default value to be used
+  * If -hostname is missing, then script now terminates with error
+  * If -role is missing, then script now terminates with error
+  * Added an exit (with error) if -role parameter is unknown
+
+ -- Juergen Kahrs <Kahrs@univention.de>  Thu, 28 Jun 2012 09:45:35 +0200

Mit dem neu gebauten Paket hab ich noch mal das aktuelle Problem (MAC-Adresse bereits vergeben wenn Rechner versucht zu joinen) nachgestellt und dabei eine ordentliche Fehlermeldung bekommen:

univention-join: joins a computer to an ucs domain
copyright (c) 2001-2012 Univention GmbH, Germany

Insert DC Master Account : Administrator
Insert DC Master Password:

Search DC Master:                                          done
Check DC Master:                                           done
Stop LDAP Server:                                          done
Stop Samba 4 Server:                                       done
Search ldap/base                                           done
Start LDAP Server:                                         done
Search LDAP binddn                                         done
Sync time                                                  done
Join Computer Account:                                     done


**************************************************************************
* Join failed!                                                           *
* Contact your system administrator                                      *
**************************************************************************
* Message:  univention-server-join: joins a server to an univention domain
copyright (c) 2001-2012 Univention GmbH, Germany

E: failed to create DC Backup (2) [E: Object exists: (mac)  52:54:00:43:bd:59]
**************************************************************************

Im changelog des Handbuchs hab ich unter "Domain joins of UCS systems" eine Ergänzung vorgenommen.
Comment 11 Stefan Gohmann univentionstaff 2012-07-03 09:44:18 CEST
Funktionstests - Doppelte MAC: OK

Funktionstests - Keine Berechtigung: OK

Funktionstests - Normaler Join: OK

Changelog: OK

Code Review: OK
Comment 12 Stefan Gohmann univentionstaff 2012-07-20 15:24:22 CEST
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".