[PHP][LDAP][NOVELL] de members uit een group halen lukt niet

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Voor school moet ik een opdracht doen met authenticatie van inlogegevens uit een LDAP server(NDS) van Novell.

De gebruikers die ik wil laten inloggen zijn gekoppeld aan een group.
De naam van een group haal ik uit een mysql database. Dit lukt allemaal wel.
Met deze naam wil ik de members van het group halen in NDS. vb Klas

Ik heb een php script gevonden (Active Directory) deze heb ik aangepast. Ik heb "memberof=CN=memberof=cn=Klas,ou=Studenten,o=Org"; als filter binnen een ldap_search gebruikt. $dn= "ou=Studenten,o=Org"; De gebruikers zitten dus in ou Studenten.

Als attribuut die ik mee heb gegeven in het ldap_search is: array("member"). Ik krijg helemaal geen foutmeldingen. Alleen een leeg scherm. Wanneer ik ldap_count_entries($ldapconn, $result); gebruik krijg ik waarde 0 terug.

Ik heb daarna nog geprobeerd om filter aan te passen:ik heb
objectclass=person gecombineerd met memberof=cn maar dan krijg ik waarde 6 terug. (Totaal aantal studenten in ou studenten)
$filter = '(objectclass=person)(member=cn=Klas 1A,"ou=Studenten,o=Org)';

Eigenlijk zou ik dus een waarde 2 moeten krijgen omdat twee studenten members zijn van group Klas. Is mijn filter of mij attribuut die ik gebruik soms verkeerd?
Want ik krijg 6 nullen terug wanneer door mijn array loop met "member".

Alvast bedankt.

[ Voor 8% gewijzigd door Verwijderd op 25-11-2004 15:22 . Reden: correctie ned ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik heb net even hier gekeken en daar zie ik in het voorbeeld wat handige attributes die je op kunt vragen. Misschien is het sowieso wel handig om dit onderdeel van de handleiding eens aandachtig door te nemen.

Het lijkt mij dan ook dat je als filter mee moet geven: (cn=Klas).
Is de naam van je cn trouwens Klas of Klas 1A, dat maakt wel verschil uit. Ander puntje: Het lijkt mij zinloos om ou en o zowel in de filter als in de base_dn mee te geven.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor je reactie.

Ik kan alleen nergens een voorbeeld vinden die werkt met een NDS.
Met een ander scriptje krijg ik groupOfNames en Top terug. Welke attribuut moet ik gebruiken???

Ik ga vandaag naar code van PHPldapAdmin kijken .
Heb vandaag hun demo uitgeprobeerd en daar kon je wel members bekijken
van een group. (alleen moest ik postix group aanmaken en volgens mij heeft dit iets te maken met AD )

Als iemand een antwoord weet op mijn probleemje dan hoor ik dat graag..

alvast bedankt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat ging dus ook niet met phpLDAPAdmin...
Met enn ander search functie heb ik studenten opgevraagd met attributen sn, initials en givenName. Werkt perfect maar als ik een attribuut bij gooi dan blijf ik steeds hetzelfde krijgen. Zou het kunnen dat ik verkeerde attribuut naam opgeef of zo? Zo dit dan ook gelden voor Group?? Ik kan gewoon niet achter komen wat ik verkeerd doe. 8)7

Acties:
  • 0 Henk 'm!

  • JoetjeF
  • Registratie: Juni 2003
  • Laatst online: 10-11-2012

JoetjeF

Mo Chuisneoir

Heb je op de NetWare server het volgende al geprobeerd:
[b]dstrace screen on
dstrace -all
dstrace +ldap[/b]
Dan moet je in ieder geval wat informatie op het DSTRACE console te zien krijgen.

edit:
Alleen de dstrace +ldap is belangrijk, maar zo krijg je er geen troep doorheen

[ Voor 30% gewijzigd door JoetjeF op 29-11-2004 01:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke, ik krijg nu de members op mijn scherm.
Ik heb bij de properties van Group KLas 1A onder unix profile een nummer aan group id gegeven.
Dit is wat ik daarna om mijn scherm kreeg:

gidNumber = 1
objectClass = groupOfNames
objectClass = Top
objectClass = posixGroup
member = cn=ISMI,ou=1ste Klassers,ou=Studenten,ou=Users,o=Drost
member = cn=KEMP,ou=1ste Klassers,ou=Studenten,ou=Users,o=Drost

Wel vreemd dat het zo moet.
Alleen kan ik nu niet de owner van group krijgen.
Op een ander site wordt gezegd dat het helemaal niet kan, is dat zo?

Alvast bedankt


Frostman

Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Een unix/posix profile (en nee, dat heeft niks met AD te maken :P) geven is nergens voor nodig. Waar je alleen naar moet kijken is of [Public] wel genoeg rechten heeft om de gegevens die jij wilt krijgen op te vragen. Waarschijnlijk is dat standaard niet zo. Dus, geen anonymous bind gebruiken, of [Public] meer rechten geven. Het eerste heeft uiteraard de voorkeur.

Verder zou een (&(cn=<usernaam>)(groupmembership=cn=Klas 1A,ou=Studenten,o=Org)) gewoon moeten werken, attributen van de group zelf heb je nergens voor nodig.
Daarna even een bind doen met de teruggegeven DN en het door de gebruiker verstrekte wachtwoord, en je bent klaar.

(oh, en je kunt echt veel beter even iets als 'ldapsearch' gebruiken ipv met PHP scripts te prutselen als je wilt weten wat werkt en wat niet.. dan sluit je tenminste uit dat de scripts zelf fouten bevatten)

(en ben je hier echt al meer dan twee weken mee bezig?!?!!)

[ Voor 6% gewijzigd door Onno op 13-12-2004 10:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb gekeken en blijkt dus inderdaad dat ik anonymously bind.
vul ik dn_name en dn_pswd in dan krijg ik: Warning: LDAP: Unable to bind to server: Confidentiality required in SYS:/Apache2/htdocs/temp.php on line 12
Could not bind 2 LDAP server

$ldapconn = ldap_connect("192.168.2.6",389) or die("Could not connect LDAP server");
$ldapbind = ldap_bind($ldapconn,"admin.mient","admin") or die("Could not bind 2 LDAP server");


wat doe ik fout?? Ik had eerder een config-file met dit in staan

$server = array();
$server['host'] = '192.168.2.6';
$server['port'] = 389;
$server['login_dn'] = 'admin.mient';
$server['login_psw'] = 'admin';

include bij onderstaande script

$ldapLink = ldap_connect($server['host'],$server['port']) or die("Could not connect LDAP server");
ldap_bind($ldapLink,$server['login_dn'],$server['login_pwd'])or die("Could not bind 2 LDAP server");

Geeft dus geen foutmelding van confidentialty alleen wanneer ik het direct invul krijg een foutmelding.

"cn=admin,o=mient" werkt ook niet.

Hoe moet ik het anders invullen ???

Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Waarschijnlijk mag je niet met een plain text wachtwoord authenticeren. SSL/TLS of SASL gebruiken dus.

En ik zou zo'n scriptje niet laten binden als admin user, nergens voor nodig. (en "admin.mient" is trouwens inderdaad geen geldige LDAP DN, het moet cn=admin,o=mient zijn)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe maak ik een ssl verbinding met PHP4??? Weet hier weinig vanaf als je me in stappen uit kunt leggen hoe ik dit op kan zetten zou ik dit zeer op prijs stellen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok ik had dus tls aan staan in NDS en kan dus nu wel plaintext verbinding maken
Nog bedankt Onno voor je code het werkt.

Ik heb weer een ander probleempje met
code:
1
2
if(ldap_compare($ldapconn,$dn,"userPassword",$_POST['pwd']))
{}


Ik wil de dus het wachtwoord controleren van een member die gevonden is bij het group.
Dit doe ik met de bovenstaande ldap_compare. Als een student een fout wachtwoord invuld
wordt een foutmelding gegeven "Student niet gevonden...". Werkt allemaal, alleen duurt het laden van het pagina langer wanneer ik wel een goed wachtwoord en gebruikersnaam in vul: dan wordt het functie ldap_compare sneller uitgevoerd en het volgende pagina wordt getoond.
Is dit het juiste manier om een wachtwoord te controleren?

Ik heb het filter aangepast met (userPassword=$pass) maar dan wordt een student niet gevonden met juiste wachtwoord en gebruikersnaam.

code:
1
2
$filter = '(&(cn=$username)(userPassword=$pass)(groupmembership=cn=$KlasNaam, ou=$LeerJaar,ou=Studenten,ou=Users,o=$Domein))';  
 eval("\$filter = \"$filter\";");

[ Voor 27% gewijzigd door Verwijderd op 14-12-2004 16:43 . Reden: ned. niet goed sorry-> laatste keer dus ]


Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Verwijderd schreef op dinsdag 14 december 2004 @ 16:14:
Ok ik had dus tls aan staan in NDS en kan dus nu wel plaintext verbinding maken
Alle vormen van beveiliging uitzetten omdat het je te lastig is lijkt me niet de juiste oplossing.
Ik wil de dus het wachtwoord controleren van een member die gevonden is bij het group.
Dit doe ik met de bovenstaande ladap_compare.
Niet doen. Zoals eerder gezegd: probeer te binden. Alleen dan weet je zeker dat een gebruiker ook echt gemachtigd is in te loggen met het gegeven wachtwoord. Vergelijken gaat bijvoorbeeld nog steeds goed als een account geblokkeerd is.
Als een student een fout wachtwoord invuld wordt een foutmelding gegeven. Werkt allemaal, alleen duurt het langer om het pagina opnieuwe te laden.
NDS voegt een kleine delay in bij een mislukte poging om te voorkomen dat je kunt bruteforcen door stomweg alle mogelijke wachtwoorden uit te proberen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nogmaals bedankt onno, heb het verandert..



En ik zou zo'n scriptje niet laten binden als admin user, nergens voor nodig.



Wat bedoel je hier eigenlijk mee precies??
Op het inlog scherm zet ik de (o=) organisaties in een dropdownlistbox.(Er zijn dus 3 o= drie scholen/vestigingen in het nds). Student moeten dus een vestiging, username en wachtwoord iopgegeven.

Als ik deze organisaties wil ophalen moet ik dus een connect een bind maken. Een student moet dus nog niet binden, of bedoel je iets anders mee?? Een ander user dan admin moet binden... een niet bestaande gebruiker??(dummie user) Als je dit bedoelt hoe geef ik zijn rechten aan??

En hoe kan ik die beveiligd verbinding opzetten? Heeft dit misschien te maken met functie:
ldap_start_tls($ldapconn);
Maar krijg dan Call to undefined function: ldap_start_tls() in SYS:/Apache2/htdocs/inlog.php on line 54.

Frostman.

Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Verwijderd schreef op woensdag 15 december 2004 @ 22:25:
Als ik deze organisaties wil ophalen moet ik dus een connect een bind maken.
En daar heb je dus echt geen admin user voor nodig. Je script overdreven veel rechten geven kan alleen maar tot problemen leiden.

Zorg gewoon voor een user die precies kan opvragen wat je script nodig heeft, en niks meer.

(overigens hoef je zeer waarschijnlijk helemaal niet te binden om O's op te vragen)

En hoe je TLS in PHP doet.. geen flauw idee. Ik weet niks van PHP. :Y)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nogmaals bedankt Onno
:)
Pagina: 1