1 / 16
Mar 18

Hallo Zusammen,

seit dem letzten Update (23.1.20250307) bekommen wir bei der Benutzerstellung, folgende Fehlermeldung:
grafik

Ich habe testweise die Version 23.1.20250113 zurückgespielt, da tritt dieses Problem nicht auf.

Wie bekommen wir das Problem gelöst?

Danke schon mal für eure Hilfe.

Gruß Andy

Die Fehlermeldung besagt, das eines der Felder der im LDAP upgedated werden soll, ein mehrfacher Wert erlaubt, aber das Array nicht nur numerische Indices hat.
Ich habe mal kurz im Code geschaut kann da aber auf die schnelle nichts finden.
Ich glaube auch nicht so ganz, das wir da was geändert haben, sondern ehr das PHP da jetzt einen strengeren Check eingebaut hat der einen Fehler wirf, was früher einfach ignoriert wurde.

Frage ist was für ein LDAP System ist das, welche Mail Attribute verwendet ihr da und was genau machst Du, wenn es zu dem Fehler kommt.

Du kannst unter Admin > App Konfiguration > Sicherheit ganz unter mal die Rückverfolgung / Trace für Exceptions einschalten, dann sieht man evtl. etwas mehr.

Ansonsten kannst Du natürlich auch gerne ein Support Budget kaufen, und wir schauen uns das zusammen an.

Ralf

grafik
Das kommt raus, wenn ich Rückverfolgung aktiviere.

Ich versuche standardmäßig nur einen Nutzer anzulegen. Gebe dafür Vorname, Nachname, Benutzername, Passwort, Hauptgruppe und Gruppen ein.

Wir nutzen “OpenLDAP: slapd 2.5.18+dfsg-0ubuntu0.22.04.2”. Ich kann am Wochenende gerne ein Update davon durchführen und schauen, ob es das Problem behebt, wenn die Rückverfolgung nichts anderes Preis gibt, was ich jetzt nicht herauslesen kann?!

Da würde ich mir nichts von erwarten, der Fehler kommt aus dem PHP, noch bevor überhaupt mit dem LDAP gesprochen wird.

Du kannst mal mehr debugging einschalten:

docker exec egroupware sed -i 's/var $debug = false;/var $debug = true;/' /usr/share/egroupware/api/src/Mail/Smtp/Ldap.php
docker exec egroupware kill -s usr2 1
/etc/egroupware-docker/egroupware-logs.sh

Und danach nochmal einen neuen User anlegen und die Ausgabe hier posten.

Ralf

PHP message: Ein Fehler ist aufgetreten! (ValueError): ldap_mod_replace(): Argument #3 ($entry) must be an array with numeric keys (0);
PHP message: File: /api/src/Mail/Smtp/Ldap.php, Line: 262;
PHP message: #0 /usr/share/egroupware/api/src/Mail/Smtp/Ldap.php(262): ldap_mod_replace();
PHP message: #1 /usr/share/egroupware/api/src/Mail/Hooks.php(94): EGroupware\Api\Mail\Smtp\Ldap->addAccount();
PHP message: #2 /usr/share/egroupware/api/src/Mail/Hooks.php(74): EGroupware\Api\Mail\Hooks::run_plugin_hooks();
PHP message: #3 [internal function]: EGroupware\Api\Mail\Hooks::addaccount();
PHP message: #4 /usr/share/egroupware/api/src/Hooks.php(138): call_user_func();
PHP message: #5 /usr/share/egroupware/api/src/Hooks.php(82): EGroupware\Api\Hooks::single();
PHP message: #6 /usr/share/egroupware/admin/inc/class.admin_cmd_edit_user.inc.php(224): EGroupware\Api\Hooks::process();
PHP message: #7 /usr/share/egroupware/admin/inc/class.admin_cmd.inc.php(239): admin_cmd_edit_user->exec();
PHP message: #8 /usr/share/egroupware/admin/inc/class.admin_account.inc.php(242): admin_cmd->run();
PHP message: #9 /usr/share/egroupware/addressbook/inc/class.addressbook_ui.inc.php(2424): admin_account::addressbook_pre_save();
PHP message: #10 /usr/share/egroupware/api/src/loader/deprecated_factory.php(154): addressbook_ui->edit();
PHP message: #11 /usr/share/egroupware/api/src/Etemplate.php(451): ExecMethod();
PHP message: #12 [internal function]: EGroupware\Api\Etemplate::ajax_process_content();
PHP message: #13 /usr/share/egroupware/api/src/Json/Request.php(205): call_user_func_array();
PHP message: #14 /usr/share/egroupware/api/src/Json/Request.php(106): EGroupware\Api\Json\Request->handleRequest();
PHP message: #15 /usr/share/egroupware/json.php(130): EGroupware\Api\Json\Request->parseRequest();
PHP message: #16 {main};
PHP message: # Instance=default, User=aknoebl, Request=POST https://egwtest.verbund-service.de/egroupware/json.php?menuaction=addressbook.addressbook_ui.

Dann kommt quasi das gleiche raus?

Ja, der ValueError wird vor der Debug Ausgabe geworfen :frowning:

Ich fange den jetzt, logge ihn und liefere false zurück, so wie das (vermutlich) bisher auch passiert ist:

Spiel mal den Patch bei Dir ein:

curl https://github.com/EGroupware/egroupware/commit/179c364c2b81c138182ad396ab4d53a0d5289a94.patch | docker exec -i egroupware patch -p1 -d /usr/share/egroupware
docker exec egroupware kill -s usr2 1
/etc/egroupware-docker/egroupware-logs.sh

Und reproduziere den Fehler nochmal, dann sollten jetzt die Aufrufparameter gelogged werden (und der Fehler ignoriert).

Poste bitte mal das Log, damit ich den Fehler beheben kann.

Benutzt Ihr eigentlich das was wir da im LDAP eintragen für Euren Mailserver?

Ralf

2025/03/20 10:33:08 [error] 21#21: *6002 FastCGI sent in stderr: "
PHP message: Ein Fehler ist aufgetreten! (Exception): ldap_mod_replace($ds, ‘uid=atesti,ou=People,dc=verbund,dc=zub’, {“mail”:“atesti@verbund.zub”,“objectclass”:[“top”,“person”,“organizationalPerson”,“inetOrgPerson”,“posixAccount”,“shadowAccount”]}) ldap_mod_replace(): Argument #3 ($entry) must be an array with numeric keys (0);
PHP message: File: /api/src/Mail/Smtp/Ldap.php, Line: 273;
PHP message: #0 /usr/share/egroupware/api/src/Mail/Hooks.php(94): EGroupware\Api\Mail\Smtp\Ldap->addAccount();
PHP message: #1 /usr/share/egroupware/api/src/Mail/Hooks.php(74): EGroupware\Api\Mail\Hooks::run_plugin_hooks();
PHP message: #2 [internal function]: EGroupware\Api\Mail\Hooks::addaccount();
PHP message: #3 /usr/share/egroupware/api/src/Hooks.php(138): call_user_func();
PHP message: #4 /usr/share/egroupware/api/src/Hooks.php(82): EGroupware\Api\Hooks::single();
PHP message: #5 /usr/share/egroupware/admin/inc/class.admin_cmd_edit_user.inc.php(224): EGroupware\Api\Hooks::process();
PHP message: #6 /usr/share/egroupware/admin/inc/class.admin_cmd.inc.php(239): admin_cmd_edit_user->exec();
PHP message: #7 /usr/share/egroupware/admin/inc/class.admin_account.inc.php(242): admin_cmd->run();
PHP message: #8 /usr/share/egroupware/addressbook/inc/class.addressbook_ui.inc.php(2424): admin_account::addressbook_pre_save();
PHP message: #9 /usr/share/egroupware/api/src/loader/deprecated_factory.php(154): addressbook_ui->edit();
PHP message: #10 /usr/share/egroupware/api/src/Etemplate.php(451): ExecMethod();
PHP message: #11 [internal function]: EGroupware\Api\Etemplate::ajax_process_content();
PHP message: #12 /usr/share/egroupware/api/src/Json/Request.php(205): call_user_func_array();
PHP message: #13 /usr/share/egroupware/api/src/Json/Request.php(106): EGroupware\Api\Json\Request->handleRequest();
PHP message: #14 /usr/share/egroupware/json.php(130): EGroupware\Api\Json\Request->parseRequest();
PHP message: #15 {main};
PHP message: # Instance=default, User=aknoebl, Req

Hier das neue Log.

Ok, war was ich dachte, der folgende Commit sollte da helfen:

Du musst den wie den anderen einspielen und der andere muss auch immer davor mit eingespielt werden, sprich wenn Du nicht neu gestartet hast, langt es den neuen Commit zusätzlich einzuspielen, sonst musst Du beide in Reihenfolge einspieln.

Bitte kurz Bescheid geben, ob dann im error-Log nichts mehr auftaucht, und ob Du die EMail Adresse im LDAP ändern kannst.

Ralf

Ich habe den neuen Patch nun genauso eingefügt, wie den davor.

curl https://github.com/EGroupware/egroupware/commit/040c67f8da71d1d15f5f3fe700c7aafa9c53699c.patch | docker exec -i egroupware patch -p1 -d /usr/share/egroupware
docker exec egroupware kill -s usr2 1
/etc/egroupware-docker/egroupware-logs.sh

Da kommt aber genau die gleiche Ausgabe raus. Ich habe den Server vorher nicht neugestartet.

Die Mailadresse lässt sich im LDAP ändern und ein Account wird auch ohne sichtbare Fehlermeldung angelegt (wird ja durch deinen Commit unterdrückt, wenn ich das richtig verstanden habe).
Aber das Log schreibt weiterhin die Fehlermeldungen (beim Erstellen eines Benutzers).

Kann eigentlich nicht sein, poste die bitte nochmal.

Ralf

2025/03/20 15:58:09 [error] 27#27: *7604 FastCGI sent in stderr: "
PHP message: Ein Fehler ist aufgetreten! (Exception): ldap_mod_replace($ds, ‘uid=atesti,ou=People,dc=verbund,dc=zub’, {“mail”:[“atesti@verbund.zub”],“objectclass”:[“top”,“person”,“organizationalPerson”,“inetOrgPerson”,“posixAccount”,“shadowAccount”]}) ldap_mod_replace(): Argument #3 ($entry) must be an array with numeric keys (0);
PHP message: File: /api/src/Mail/Smtp/Ldap.php, Line: 277;
PHP message: #0 /usr/share/egroupware/api/src/Mail/Hooks.php(94): EGroupware\Api\Mail\Smtp\Ldap->addAccount();
PHP message: #1 /usr/share/egroupware/api/src/Mail/Hooks.php(74): EGroupware\Api\Mail\Hooks::run_plugin_hooks();
PHP message: #2 [internal function]: EGroupware\Api\Mail\Hooks::addaccount();
PHP message: #3 /usr/share/egroupware/api/src/Hooks.php(138): call_user_func();
PHP message: #4 /usr/share/egroupware/api/src/Hooks.php(82): EGroupware\Api\Hooks::single();
PHP message: #5 /usr/share/egroupware/admin/inc/class.admin_cmd_edit_user.inc.php(224): EGroupware\Api\Hooks::process();
PHP message: #6 /usr/share/egroupware/admin/inc/class.admin_cmd.inc.php(239): admin_cmd_edit_user->exec();
PHP message: #7 /usr/share/egroupware/admin/inc/class.admin_account.inc.php(242): admin_cmd->run();
PHP message: #8 /usr/share/egroupware/addressbook/inc/class.addressbook_ui.inc.php(2424): admin_account::addressbook_pre_save();
PHP message: #9 /usr/share/egroupware/api/src/loader/deprecated_factory.php(154): addressbook_ui->edit();
PHP message: #10 /usr/share/egroupware/api/src/Etemplate.php(451): ExecMethod();
PHP message: #11 [internal function]: EGroupware\Api\Etemplate::ajax_process_content();
PHP message: #12 /usr/share/egroupware/api/src/Json/Request.php(205): call_user_func_array();
PHP message: #13 /usr/share/egroupware/api/src/Json/Request.php(106): EGroupware\Api\Json\Request->handleRequest();
PHP message: #14 /usr/share/egroupware/json.php(130): EGroupware\Api\Json\Request->parseRequest();
PHP message: #15 {main};
PHP message: # Instance=default, User=aknoebl, R

das kam raus

Hat sich doch geändert, das Mail-Attribute ist jetzt ein Array (eckige Klammern), statt einem String.

Das ändert aber gar nichts an dem Fehler.

Gerade die Antwort bekommen, da ist ein Fehler in PHP der mit der nächsten Version gefixed sein sollte:

Ralf

Du kannst ja mal einfach das PHP im Container updaten:

docker exec -it egroupware bash
apt-get update && apt-get upgrade
exit
docker restart egroupware

Dann sind die Commits von mir wieder raus, und Du solltest auf PHP 8.3.19 sein, in dem das Problem behoben ist.

Ralf

Besten Dank, damit hat es nun geklappt.

Habe es alles logischerweise auf dem Testserver gemacht. Kommt jetzt die Tage ein neuer eGW Container oder soll ich das letztere auf dem Produktivserver auch so umsetzen?