Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login

    ldap-sync wirft PHP-Fehler

    Scheduled Pinned Locked Moved Betrieb
    8 Posts 3 Posters 313 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K Offline
      kholzenhauer
      last edited by kholzenhauer

      Hallo zusammen!

      Beim Versuch, das ldap zu syncen bekomme ich diesen Fehler:

      PHP Fatal error:  Uncaught TypeError: array_key_exists(): Argument #2 ($array) must be of type array, bool given in /var/www/html/i-doit/src/idoit/Console/Subscriber/CommandEvents.php:53
      

      Ich führe gemäß der Knowledge Base diesen Befehl aus:

      sudo -u www-data php console.php ldap-sync -c /var/www/html/i-doit/src/handler/ldap-sync.ini --dumpConfig
      

      Die lday-sync.ini ist die aus der KB, angepasst um einen i-doit-User.

      Hat jemand einen Tipp...?

      Vielen Dank!
      Klaus

      1 Reply Last reply Reply Quote 0
      • K Offline
        kholzenhauer
        last edited by

        Ergänzung:

        i-doit läuft auf Ubuntu 22.04 LTS, PHP 8.1.2

        LFischerL 1 Reply Last reply Reply Quote 0
        • LFischerL Offline
          LFischer @kholzenhauer
          last edited by LFischer

          Hallo @kholzenhauer

          um den Fehler zu beseitigen musst du in deiner ldap-sync.ini den "[commandArguments]" Bereich ergänzen - siehe hier https://kb.i-doit.com/de/automatisierung-und-integration/cli/console/verwendung-von-konfigurationsdateien-fuer-console-commands.html

          Ich habe den Fehler aufgenommen, sodass wir diesen mit dem nächsten Release lösen 🙂

          Viele Grüße
          Leo

          edit

          Es ist übrigens auch möglich das deine ldap-sync.ini nicht korrekt gelesen werden konnte 🤔

          1 Reply Last reply Reply Quote 0
          • K Offline
            kholzenhauer
            last edited by kholzenhauer

            Guten Morgen!

            Das verstehe ich nicht wirklich...
            In dem KB-Artikel steht:

            Der Aufbau der .ini#
            
                [commandArguments]
            Zur Zeit keine vorhanden.
            

            Hier meine ldap-sync.ini (natürlich ohne den korrekten User 😜 :

            [commandArguments]
                [commandOptions]
                user=xxxxxxxx
                password=xxxxxxx
                tenantId=1
                [additional]
                import_rooms=true
                defaultCompany=''
                deletedUsersBehaviour=disable_login
                disabledUsersBehaviour=disable_login
                ; LDAP Attributes are individual. This default configuration is prepared for Active Directory:
                attributes[department]=department
                attributes[phone_company]=telephoneNumber
                attributes[phone_home]=homephone
                attributes[phone_mobile]=mobile
                attributes[fax]=facsimileTelephoneNumber
                attributes[description]=info
                attributes[personnel_number]=initials
                attributes[organization]=company
                attributes[location]=physicalDeliveryOfficeName
                attributes[salutation]=title
                attributes[street]=streetAddress
                attributes[city]=l
                attributes[zip_code]=postalCode
                attributes[function]=title
                attributes[service_designation]=title
                attributes[pager]=pager
                ;Attributerweiterung Personen
                attributes[custom_1]=objectSid
                attributes[custom_2]=sn
                attributes[custom_3]=homePhone
                attributes[custom_4]=mobile
                attributes[custom_5]=info
                attributes[custom_6]=manager
                attributes[custom_7]=company
                attributes[custom_8]=department
                autoReactivateUsers=false
                ignoreUsersWithAttributes[]="sn"
                ignoreUsersWithAttributes[]="givenName"
                ignoreFunction=empty
                syncEmptyAttributes=true
            

            Die ldap-sync startet ja (führe ich im Web-Verzeichnis als www-data aus), aber es gibt eben einen php-Fehler.

            Hab ich da was falsch verstanden?

            K 1 Reply Last reply Reply Quote 0
            • K Offline
              kholzenhauer @kholzenhauer
              last edited by kholzenhauer

              Noch eine Ergänzung, der "normale Aufruf"

              sudo -u www-data php console.php -uxxxxxxx -pxxxxxxxx --tenantId 1 --ldapServerId 1
              

              funktioniert, allerdings werden meine Mappings aus der ini-Datei natürlich nicht mitgezogen.

              Der PHP-Fehler tritt immer dann auf, sobald ich die ini-Datei einbinde. Ich habe auch schon versucht, nur den [additional]-Teil in der ini zu lassen und den Rest (User, Tenant usw.) im Command mitzugeben.

              Es endet aber alles immer wieder in dem Fehler, dass hier der Datentyp nicht stimmen soll:

              if (!empty($config)) {
                              if (!file_exists($config)) {
                                  $event->getOutput()
                                      ->writeln("<fg=yellow>Config file not found</>");
                                  $configData = [];
                              } else {
                                  $event->getOutput()
                                      ->writeln('<info>Processing config file</info>');
                                  $configData = parse_ini_file($config, true, INI_SCANNER_RAW);
                              }
              
                              $definition = $command->getDefinition();
              
                              if (array_key_exists('commandArguments', $configData)) {
                                  $this->advancedIniParsing($configData['commandArguments']);
                                  foreach ($configData['commandArguments'] as $key => $value) {
                                      $input->setArgument($key, $value);
                                      $definition->getArgument($key)->setDefault($value);
                                  }
                              }
              
                              if (array_key_exists('commandOptions', $configData)) {
                                  $this->advancedIniParsing($configData['commandOptions']);
                                  foreach ($configData['commandOptions'] as $key => $value) {
                                      $input->setOption($key, $value);
                                      $definition->getOption($key)->setDefault($value);
                                  }
                              }
              
                              if (array_key_exists('additional', $configData)) {
                                  $this->advancedIniParsing($configData['additional']);
                                  $command->setConfig($configData['additional']);
                              }
              

              Immer in der Zeile "if (array_key_exists(....))" ist angeblich $configData ein Bool, kein Array.

              K LFischerL 2 Replies Last reply Reply Quote 0
              • K Offline
                kholzenhauer @kholzenhauer
                last edited by

                Ok, scheint sich erledigt zu haben.....

                Wenn man die Beispiel-ldap.ini kopiert, wird vor den Blöcken mit den []-Klammern eingerückt.

                Das führt offenbar dazu, dass das Skript den Block nicht erkennt.

                Schiebt man den Block [commandArguments] usw. an den Zeilenanfang schiebt, funktioniert das Ganze🤣

                Kopiert man die Beispiele von der KB-Seite, sind da offenbar Leerzeichen vor, die das Ganze abschießen:

                ....[commandArguments]
                ....[commandOptions]
                ....user=admin
                ....password=pass
                ....tenantId=1
                ....update
                ....quiet
                ....[additional]
                

                Egal, gefunden, Topic kann geschlossen werden!

                Danke und Gruß,
                Klaus

                Michael HuhnM 1 Reply Last reply Reply Quote 0
                • Michael HuhnM Offline
                  Michael Huhn @kholzenhauer
                  last edited by

                  undefined @kholzenhauer

                  das Problem kann auf der KB gelöst werden indem dort die Einrückung korrigiert wird.
                  Habe dort dazu einen Isssue erstellt https://github.com/i-doit/knowledge-base/issues/431
                  Danke.

                  1 Reply Last reply Reply Quote 0
                  • LFischerL Offline
                    LFischer @kholzenhauer
                    last edited by

                    Hey @kholzenhauer

                    Immer in der Zeile "if (array_key_exists(....))" ist angeblich $configData ein Bool, kein Array.

                    Das ist richtig und passiert immer dann, wenn parse_ini_file(...) die übergebene INI Datei nicht verarbeiten konnte. Ich habe den Code dahingehend angepasst, das er dem Nutzer eine entsprechende Meldung ausgibt wenn eine INI Datei nicht gelesen / geparsed werden konnte.

                    Dieser angepasste Code wird voraussichtlich mit i-doit 30 veröffentlicht werden 🙂

                    Viele Grüße
                    Leo

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post