Fehler während Authentifizierung nach Editieren eines Nutzers
-
Hallo an alle aus der Community,
ich nutze i-doit in der Version 0.9.9-4 (letzte mögliche Aktualisierung). LDAP und i-doit sind korrekt installiert, neue Nutzer am System werden mittels Gruppenzugehörigkeit korrekt gemappt und angelegt.
Sobald ich jedoch in der Rubrik Kontakte -> Personen eine Person editiere (indem ich Daten ändere oder eine Firma zuweise oder einfach ohne Änderungen auf Speichern drücke), scheint er den Benutzer lokal anzulegen und verliert jede bestehende Information über AD-Zugehörigkeiten.
–- vorher ---
LDAP Info
Server: x
DN: y
CN: zenthalten alle korrekte Werte (der Benutzer kann sich ohne Probleme anmelden)
Informationen für Vorname: Nachname: E-Mail Adresse: Telefon Firma: Telefon Privat: Handy: Fax: und Abteilung: sind mit den korrekten Daten aus dem AD befüllt (jedoch erscheinen diese nicht in der Übersichtsseite über alle Benutzer).
--- nach einer Änderung gespeichert ---
- Informationen erscheinen auf der Übersichtsseite
- Infobox für LDAP ist nicht mehr vorhanden
- Anmeldung ist nicht mehr mit dem editierten Benutzer möglich, es erscheint die Meldung Invalid username or password!
- das ldap logfile meldet jedoch, dass die Anmeldung erfolgreich war
Wenn ich den entsprechenden Nutzer archiviere und anschließend lösche, wird er erneut registriert und kann sich anmelden, wenn die Daten editiert werden, beginnt der Vorgang von neu. Dieses Verhalten tritt bei allen Nutzern auf.
Ist dies ein Bug oder durch einen Fehler in irgendeiner Konfigurationsdatei entstanden?
-
Ich hab festgestellt, dass beim ersten anmelden eines LDAP Users eine andere ID in die linktabelle geschrieben wierd, als beim manuellen anlegen. Der folgende Patch holt sich die "richtige" ID. Dann funktioniert auch das editieren von LDAP-Benutzern
Index: src/classes/modules/isys_module_ldap.class.php =================================================================== --- src/classes/modules/isys_module_ldap.class.php (Revision 29) +++ src/classes/modules/isys_module_ldap.class.php (Revision 30) @@ -137,6 +137,8 @@ ); if (is_numeric($l_user_id) && $l_user_id > 0) { + $l_user=$l_user_dao->get_person_by_username($p_username)->__to_array(); + $l_user_id=$l_user['isys_cats_person_list__isys_obj__id']; $this->debug("User account created. User-ID: ". $l_user_id); /* Attach the recently created LDAP-user into the configured groups */ @@ -159,6 +161,9 @@ } else { $this->debug("Unknown error while creating the LDAP-User - Received an empty user-id."); } + } else { + $l_user=$l_user_dao->get_person_by_username($p_username)->__to_array(); + $l_user_id=$l_user['isys_cats_person_list__isys_obj__id']; } } else if ($l_found_user == true) {
-
Beim Update hat sich noch ein Bug eingeschlichen, da werden die ldap infos zweimal gesetzt.
Index: classes/cmdb/dao/category/specific/isys_cmdb_dao_category_s_person_master.class.php =================================================================== --- classes/cmdb/dao/category/specific/isys_cmdb_dao_category_s_person_master.class.php (Revision 37) +++ classes/cmdb/dao/category/specific/isys_cmdb_dao_category_s_person_master.class.php (Arbeitskopie) @@ -122,15 +122,14 @@ "isys_cats_person_list__fax = ".$this->convert_sql_text($p_fax).", ". "isys_cats_person_list__department = ".$this->convert_sql_text($p_department).", ". "isys_cats_person_list__isys_connection__id = ".$this->convert_sql_id($l_id).", ". - "isys_cats_person_list__isys_ldap__id = ".$this->convert_sql_id($p_ldap_server).", ". - "isys_cats_person_list__ldap_dn = ".$this->convert_sql_text($p_ldap_dn).", ". "isys_cats_person_list__description = ".$this->convert_sql_text($p_description).", "; - if ($p_ldap_dn) { + if ($p_ldap_dn>"") $l_sql .= "isys_cats_person_list__ldap_dn = ".$this->convert_sql_text($p_ldap_dn).", "; - $l_sql .= "isys_cats_person_list__isys_ldap__id = ".$this->convert_sql_text($p_ldap_server).", "; - } - + + if ($p_ldap_server > 0) + $l_sql .= "isys_cats_person_list__isys_ldap__id = ".$this->convert_sql_id($p_ldap_server).", "; + $l_sql .= "isys_cats_person_list__status = ".$this->convert_sql_id($p_status)." "; $l_sql .= "WHERE isys_cats_person_list__id = ".$this->convert_sql_id($p_id); @@ -170,11 +169,11 @@ "isys_cats_person_list__isys_obj__id = '".$p_obj_id."', ". "isys_cats_person_list__description = ".$this->convert_sql_text($p_description).", "; - if ($p_ldap_dn) + if ($p_ldap_dn>"") $l_sql .= "isys_cats_person_list__ldap_dn = ".$this->convert_sql_text($p_ldap_dn).", "; if ($p_ldap_server > 0) - $l_sql .= "isys_cats_person_list__isys_ldap__id = ".$this->convert_sql_text($p_ldap_server).", "; + $l_sql .= "isys_cats_person_list__isys_ldap__id = ".$this->convert_sql_id($p_ldap_server).", "; $l_sql .= "isys_cats_person_list__status = ".$this->convert_sql_id($p_status)." ";
wer nicht will, dass die ldap-Einträge die Felder in der DB überschreiben, kann diesen patch nutzen
Index: classes/cmdb/ui/specific/isys_cmdb_ui_category_s_person.class.php =================================================================== --- classes/cmdb/ui/specific/isys_cmdb_ui_category_s_person.class.php (Revision 37) +++ classes/cmdb/ui/specific/isys_cmdb_ui_category_s_person.class.php (Arbeitskopie) @@ -67,17 +67,25 @@ $p_data["ldap_cn"] = $l_ar["cn"][0]; - $p_data["isys_cats_person_list__mail_address"] = $l_ar["mail"][0]; + if($p_data["isys_cats_person_list__mail_address"]=="") + $p_data["isys_cats_person_list__mail_address"] = $l_ar["mail"][0]; - $p_data["isys_cats_person_list__fist_name"] = utf8_decode($l_ar["givenname"][0]); - $p_data["isys_cats_person_list__last_name"] = utf8_decode($l_ar["sn"][0]); + if($p_data["isys_cats_person_list__fist_name"]=="") + $p_data["isys_cats_person_list__fist_name"] = utf8_decode($l_ar["givenname"][0]); + if($p_data["isys_cats_person_list__last_name"]=="") + $p_data["isys_cats_person_list__last_name"] = utf8_decode($l_ar["sn"][0]); - $p_data["isys_cats_person_list__phone_company"] = $l_ar["telephonenumber"][0]; - $p_data["isys_cats_person_list__phone_mobile"] = $l_ar["mobile"][0]; - $p_data["isys_cats_person_list__phone_home"] = $l_ar["homephone"][0]; - $p_data["isys_cats_person_list__fax"] = $l_ar["facsimiletelephonenumber"][0]; + if($p_data["isys_cats_person_list__phone_company"]=="") + $p_data["isys_cats_person_list__phone_company"] = $l_ar["telephonenumber"][0]; + if($p_data["isys_cats_person_list__phone_mobile"]=="") + $p_data["isys_cats_person_list__phone_mobile"] = $l_ar["mobile"][0]; + if($p_data["isys_cats_person_list__phone_home"]=="") + $p_data["isys_cats_person_list__phone_home"] = $l_ar["homephone"][0]; + if($p_data["isys_cats_person_list__fax"]=="") + $p_data["isys_cats_person_list__fax"] = $l_ar["facsimiletelephonenumber"][0]; - $p_data["isys_cats_person_list__department"] = utf8_decode($l_ar["department"][0]); + if($p_data["isys_cats_person_list__department"]=="") + $p_data["isys_cats_person_list__department"] = utf8_decode($l_ar["department"][0]); $p_data["ldap_company"] = $l_ar["company"][0]; $p_data["ldap_description"] = $l_ar["description"][0];