[PHP] LDAP_search Active Directory

Pagina: 1
Acties:
  • 167 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bemeall
  • Registratie: Februari 2003
  • Laatst online: 08:49

bemeall

Down Under!

Topicstarter
Ik ben met PHP een applicatie aan het ontwikkelen welke de gebruikers uit de Active Directory (Windows 2k3) uit moet gaan lezen. Met de LDAP functies van PHP (http://nl3.php.net/ldap/) is dit goed te doen.

Nu loop ik echter tegen het probleem aan dat wanneer ik een ldap_search doe op een AD met meer dan 1000 gebruikers, ik maar 1000 gebruikers terugkrijg, plus een error.

Ik weet dat dit probleem veroorzaakt wordt door de MaxPageSize, ingesteld op de Domain Controller. Ik kan dit natuurlijk verhogen naar bv 2000, maar dan loop ik tegen die tijd wederom tegen het zelfde probleem aan.

Met gewone LDAP tooltjes kan ik wel een zoekopdracht doen voor meer dan 1000 gebruikers, omdat deze een soort van paged results toepassen, wat door het LDAP protocol dus wel ondersteund wordt.

Iets wat ik in gedachte moet houden is dat zowel op Windows als Linux de oplossing zou moeten werken omdat de appliatie voor meerdere dingen ingezet zal gaan worden.

Iemand die hiermee ervaring heeft om het probleem wellicht te omzeilen in scripting of in de PHP configuratie? Alle informatie wat behulpzaam kan zijn is welkom.

In het verleden behaalde resultaten bieden geen garantie voor de toekomst...


Acties:
  • 0 Henk 'm!

  • bemeall
  • Registratie: Februari 2003
  • Laatst online: 08:49

bemeall

Down Under!

Topicstarter
Kickje.

Ik ben er ondertussen nog steeds mee bezig en heb een alternatief gevonden door een extern tooltje te gebruiken om de data te exporteren en daarna weer in te lezen.

Echt helemaal blij met de oplossing ben ik nog niet, dus wellicht dat iemand nog het een en ander over het probleem in combinatie met PHP weet?

In het verleden behaalde resultaten bieden geen garantie voor de toekomst...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ldap_search heeft een parameter "sizelimit" waarmee je iig die error kan voorkomen.
ook kan je dit proberen:
PHP:
1
2
3
4
5
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

// en/of

ldap_set_option($connect, LDAP_OPT_SIZELIMIT, 2000);

Acties:
  • 0 Henk 'm!

  • bemeall
  • Registratie: Februari 2003
  • Laatst online: 08:49

bemeall

Down Under!

Topicstarter
Erkens schreef op woensdag 09 augustus 2006 @ 12:39:
ldap_search heeft een parameter "sizelimit" waarmee je iig die error kan voorkomen.
ook kan je dit proberen:
PHP:
1
2
3
4
5
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

// en/of

ldap_set_option($connect, LDAP_OPT_SIZELIMIT, 2000);
Die beide set_options had ik al geprobeerd, maar niks lijkt de 1000 results te kunnen overrulen die ik terug krijg.

Ik kan het geheel met de sizelimit van ldap_search wel limitten, maar dan mis ik een groot deel van de gebruikers die ik wil synchen, ook niet helemaal de bedoeling lijkt me :P

Ik vind het alleen raar dat een heleboel tools het wel kunnen, maar dat de functie in PHP gewoon niet goed werkt bij zoveel gebruikers. Daar komt nog bij dat deze commando's veel in verschillende PHP CMSsen, gebruikerssystemen e.d. gebruikt worden. Lijkt me raar dat dat dan gewoon ingezet wordt.

In het verleden behaalde resultaten bieden geen garantie voor de toekomst...


  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 06-08 00:09

Bl4ckviper

BlaBlaBla

Ik heb dat zelfde gehad maar dan in java. En ik mocht/kon die size niet veranderen wat ik gedaan heb is het volgende:

Als je een ldap browser gebruikt zie je dat je kan zoeken op CN= <username>
wat je dan kan doen is functie die eerst zoekt op CN=A* etc etc (moet je natuurlijk niet meer gebruikers hebben dan 1000 bij de A anders moet je daar nog iets anders voor bedenken)

Mijn functie voor het ophalen van de users in java:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for (int i = 'A'; i <= 'Z'; i++) {
            String filter = "(cn=" + (char) i + "*)";

            NamingEnumeration answerAuto = ctx.search("<LDAP zoekstring>",
                    filter, ctls);

            while (answer.hasMore()) {
                SearchResult item = (SearchResult) answer.next();
                Attributes attr = item.getAttributes();

                if ((attr.get("mail") == null) || "".equals(attr.get("mail")) ||
                        (attr.get("name") == null) ||
                        "".equals(attr.get("name"))) {
                } else {
                    Attribute naam = attr.get("name");
                    Attribute mail = attr.get("mail");

                   Result Email = new Result(naam.get().toString(),
                            mail.get().toString());
                    filterList.add(Email);
                }
            }

         }

Hoop dat je daarmee verder kant.

werkt hier prima haal ruim 9000 dingen op.

Geen id hoe je dat in PHP doet maar dat weet je zelf vast wel of kan iemand wel voor je doen hier misschien.

[ Voor 5% gewijzigd door Bl4ckviper op 10-08-2006 10:38 ]

Be fast .... Be furious....


  • bemeall
  • Registratie: Februari 2003
  • Laatst online: 08:49

bemeall

Down Under!

Topicstarter
Bl4ckviper schreef op donderdag 10 augustus 2006 @ 10:34:
[..]
Hoop dat je daarmee verder kant.

werkt hier prima haal ruim 9000 dingen op.

Geen id hoe je dat in PHP doet maar dat weet je zelf vast wel of kan iemand wel voor je doen hier misschien.
Briljant! En zo simpel ook.
Volgens mij ga ik het ook wel redden met m'n aantal users zo. Voordat ze tegen 1000 users per letter aankomen duurt verwacht ik nog wel even.

K heb m iig al overgenomen in m'n php script en getest op een bak users, lijkt prima te werken, thanks!

In het verleden behaalde resultaten bieden geen garantie voor de toekomst...


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 12-06 00:33
Deze link geeft geen directe oplossing, maar het verschaft wel wat info over waarom het niet werkt.

http://moodle.org/mod/forum/discuss.php?d=28791

Grote kans dat het wel gaat komen lijkt mij.

  • bemeall
  • Registratie: Februari 2003
  • Laatst online: 08:49

bemeall

Down Under!

Topicstarter
The - DDD schreef op donderdag 10 augustus 2006 @ 14:49:
Deze link geeft geen directe oplossing, maar het verschaft wel wat info over waarom het niet werkt.

http://moodle.org/mod/forum/discuss.php?d=28791

Grote kans dat het wel gaat komen lijkt mij.
Mja die was ik ook al een keer tegen gekomen. Heb zelfs volgens mij ergens aanpassingen in de c file van de mod_ldap gezien om het toch paged op te kunnen vragen. Maar aangezien het dadelijk in een live omgeving moet draaien heb ik geen zin om mijn vingers daaraan te branden en na een tijdje op mijn bord te krijgen dat er iets mis mee gaat.

Vind het wel vreemd dat het probleem al zo lang bekend is en er nog steeds niks voor gefixt is in PHP. Die link is al van zowat een jaar geleden, en ik ben al oudere pagina's tegen gekomen over het probleem. Je zou toch zeggen dat het veel gebruikt wordt, dat het dan wel een keer gefixt had moeten zijn.

In het verleden behaalde resultaten bieden geen garantie voor de toekomst...

Pagina: 1