[NW6/LDAP] Niet alle users hebben een uid?

Pagina: 1
Acties:
  • 39 views sinds 30-01-2008

  • Steven
  • Registratie: December 2000
  • Laatst online: 21-02 22:13
Hoi,

Ik ben bezig met een PHP applicatie waarbij gebruikers hun netware login/pass moeten kunnen gebruiken. Ik heb PHP/Apache en LDAP aan de praat en de volgende stap was om de volledige dn van een gebruiker op te zoeken zodat ik daarmee een login kan simuleren.

Nu loop ik alleen op het volgende probleem; gebruikers zoeken gaat heel moeizaam. En dan in het bijzonder gebruikers die mbv UIMport aangemaakt zijn.
PHP:
1
2
3
4
5
6
7
 $ds = ldap_connect($ldapip); 
if ($ds) { 
    $r=ldap_bind($ds);  // this is an "anonymous" bind, typically
                       // read-only access
    echo "Bind result is ".$r."<p>";
                $sr=ldap_search($ds,"o=kkc", "uid=*");  
}

Als ik dat doe en dan $sr uitlees krijg ik alleen gebruikers die met de hand aangemaakt zijn. Doe ik sn=* (ipv uid=*) dan krijg ik (uiteraard) alle gebruikers en kan ik van elke gebruiker de volledige dn uitlezen inclusief. de gebruikersnaam (in de vorm van: cn=1580,ou=Leerlingen,ou=###,o=###). Dan zou je zeggen doe gewoon een dn=<username> filter, maar dan krijg ik geen results (ook al doe ik dn=*).

De enige workarround om de volledige sn te krijgen aan de hand van de login zou nu dus zijn om ALLE gebruikers uit te lezen, die met preg/ereg te controleren maar dat vind ik erg viesjes en ik zou graag een nettere oplossing willen.

Wie ziet wat ik fout doe, of welke fout er in onze NDS staat (waarom werkt uid=* niet bij iedereen...).


Mod: PNS leek mij meer van toepassing dan programmeer fora aangezien die niet echt een programmeer probleem is

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 20:24

Koffie

Koffiebierbrouwer

Braaimeneer

Even een hele stomme vraag tussendoor; Apache, PHP en dit script .. draaien die op een NetWare server of een andere ?

Tijd voor een nieuwe sig..


  • Steven
  • Registratie: December 2000
  • Laatst online: 21-02 22:13
Op een netware server, maar wel een andere netware server dan waar de NDS op staat. (ik heb die overigens even laten verbinden naar localhost en dat geeft dezelfde problemen)

  • Loesje
  • Registratie: Januari 2000
  • Laatst online: 02-07-2025
UID's gebruikt Netware helemaal niet. Die zijn er alleen voor de compatibiliteit met andere systemen die bv. ldap gebruiken.
Een user heeft pas een UID als er voor een user een 'unix-account' aangemaakt is.

Is dat niet je probleem?

Leven is meervoud van lef


Verwijderd

Loesje schreef op 03 September 2003 @ 13:24:
UID's gebruikt Netware helemaal niet. Die zijn er alleen voor de compatibiliteit met andere systemen die bv. ldap gebruiken.
Een user heeft pas een UID als er voor een user een 'unix-account' aangemaakt is.

Is dat niet je probleem?
bedoel je posixAccount?

[ Voor 86% gewijzigd door Verwijderd op 03-09-2003 15:44 ]


  • Loesje
  • Registratie: Januari 2000
  • Laatst online: 02-07-2025
offtopic:
Ja, dat bedoel ik.

Wel een leuk documentje wat je hebt geschreven, trouwens. Misschien heb je hier ook wat aan.

Leven is meervoud van lef


  • Steven
  • Registratie: December 2000
  • Laatst online: 21-02 22:13
Loesje schreef op 03 september 2003 @ 13:24:
UID's gebruikt Netware helemaal niet. Die zijn er alleen voor de compatibiliteit met andere systemen die bv. ldap gebruiken.
Een user heeft pas een UID als er voor een user een 'unix-account' aangemaakt is.

Is dat niet je probleem?
OK, dan is dat iig verklaard. Maar dan weet ik nog steeds niet hoe ik een bepaalde user moet zoeken. Maar ik ga nu bovenstaande dingen is doorlezen (heel erg bedankt daarvoor!) en hoop er dan achter te komen.

  • Steven
  • Registratie: December 2000
  • Laatst online: 21-02 22:13
Na veel leeswerk snap ik eigenlijk nog steeds niet op welke eigenschap ik de tree kan doorzoeken op gebruikersnaam.

Inloggen kom ik trouwens helemaal niet uit, hij vertikt het eigenlijk altijd.

  • Loesje
  • Registratie: Januari 2000
  • Laatst online: 02-07-2025
Ik snap niet helemaal wat je wilt doen.
Zoeken op gebruikersnaam doe je hierboven toch al? Het volgende stukje zoekt de user 'Loesje'
code:
1
$sr=ldap_search($ds,"ou=Leerlingen,ou=###,o=###", "cn=Loesje");

Als je wilt weten welke attributes er beschikbaar zijn, en wat er in welk attribute staat moet je even een ldap-browser downloaden en daarmee je LDAP-tree bekijken. Dat werkt vast verhelderend.

Als je LDAP voor authenticatie wilt gebruiken zoals in je topicstart staat, moet je geen search gebruiken, maar een ldap-verbinding maken met een usernaam/wachtwoord. In de TS hierboven maak je een 'anonymous' verbinding. Ik weet alleen niet hoe je dat met PHP doet...

Leven is meervoud van lef


  • Steven
  • Registratie: December 2000
  • Laatst online: 21-02 22:13
Loesje:
Zoeken op gebruikersnaam werkt nog niet. Wat jij nu zegt ga ik morgen testen, bedankt! Dat van die LDAP browser klinkt wel slim :)

Dat gaat in php zo: ldap_bind($ds, $user, $pass) maar ik snap niet in welke vorm $user moet.

  • LeNNy
  • Registratie: Maart 2000
  • Laatst online: 15-02 16:45
Ik neem aan dat je contextless wilt zoeken, dus niet ik 1 container. Heb je het cn attribuut als aan [Public] geknoopt (niet zo'n mooie oplossing ivm. security). Anders kun je ook een ldap proxy user gebruiken welke cn leesrechten op de hele directory heeft.

Dit moet je uiteraard instellen op de Netware LDAP server. btw. welek eDir versie gebruik je? 8.6.2 of 8.7.x?

[ Voor 3% gewijzigd door LeNNy op 04-09-2003 23:26 ]


  • Loesje
  • Registratie: Januari 2000
  • Laatst online: 02-07-2025
Voor je LeNNy's puntjes controleert kijken of het je lukt in te loggen, anders heeft een proxy-user ook geen nut.
Voor $user moet je de volledige context opgeven. Dus: 'CN=Loesje.OU=xxx.O=xxx.T=xxx'.

Hoe je contextless moet inloggen met LDAP weet ik niet.

Als het inloggen niet werkt, kijk dan eens naar de utility dstrace. (dstrace -all, dstrace +ldap)

Leven is meervoud van lef


Verwijderd

effe een vraagje

krijg een error unable to bind to ldap, confidentiality required met
ldap_bind($LdapLink,"cn=admin,o=mient","werkt");

waarom klopt dit niet???

dit is wat ik tot nu toe al gedaan heb: Wie weet waarom het fout gaat als ik bovenstaande bind gebruik met $ldapport1="389";

(Data moet over ssl verbinding moet gaan, dus met $ldapport2. maar krijg dus zelfde fout melding!) weet niet waarom.


<?php
$ldapHost= "xxx..xxx.x.x";
$ldapport1="389";
$ldapport2="636";
$ldapLink = ldap_connect($ldapHost,$ldapport1)or die("Could not connect LDAP server");

#simple bind
ldap_bind($ldapLink,"","");

if(isset($_POST['Login'])){
$test = controleInput();
echo "Terugkeerwaarde:".$test."<br>";
if($test){
echo "CN wordt gecontroleeerd <br>";
controleCN($ldapLink);
}else{
echo "CN wordt niet gecontroleerd <br\>";
showLogin($ldapLink,$_POST['gebruikersnaam']);
}
}
else{
showlogin($ldapLink,$username);
}
function showLogin($ldapLink,$username)
{
$dn= "";
$results= ldap_list($ldapLink,$dn,'(Objectclass=organization)');
ldap_sort($ldapLink,$results,$option);
$entry= ldap_first_entry($ldapLink,$results);
while($entry){
$org=ldap_get_dn($ldapLink,$entry);
$option=ldap_dn2ufn($org);
global $organizations;
if ($_POST['Domein']==$option){
$selected= "selected";
}else{
$selected= "";
}
$organizations=$organizations."<option $selected>".$option."</option>\n";
$entry= ldap_next_entry($ldapLink,$entry);
}
ldap_free_result($results);
ldap_unbind($ldapLink);

echo "<form action=$_SERVER[PHP_SELF] method=post>\n";
//echo "<input name=\"ldapLink\" type=\"hidden\" value=\"$ldapLink\">";
echo "<table width=60% boder=0 align=center>\n";
echo "<tr align=center><td> </td></tr>\n";
echo "<table width=30% border=0 align=center>";
echo "<td width=36% class=tekst><font size=\"2\" face=\"Courier\">Gebruikersnaam:</font></td>\n";
echo "<td width=64% class=tekst>\n";
echo "<font size=\"2\" face=\"Century Gothic\">\n";
echo "<input name=gebruikersnaam size=\"20\" value=\"$username\">\n";
echo "</font></td><tr>\n";
echo "<td width=36% class=tekst><font size=\"2\" face=\"Courier\">Wachtwoord:</font></td>\n";
echo "<td width=64%>\n";
echo "<font size=\"2\" face=\"Century Gothic\">\n";
echo "<input type=password name=pwd size=\"20\">\n";
echo "</font></td></tr><tr>\n";
echo "<td width=36% class=tekst><font face=\"Courier\" size=\"2\">Locatie:</font></td>\n";
echo "<td width=64%>";
echo "<select size=\"1\" name=\"Domein\" style=\"position: relative; width: 145; height: 22\">\n";
echo "$organizations\n";
echo "</select>\n";
echo "</td></tr><tr>\n";
echo "<td width=36% class=tekst> </td>\n";
echo "<td width=64%>\n";
echo "<input type=submit name=Login value='Login'>\n";
echo "</td></tr></table></table></form>\n";
}
function controleCN(&$ldapLink)
{

$dn="OU=Users, O=".$_POST['Domein'];
$result=ldap_search($ldapLink,$dn,'(objectclass=person)');
$entry = ldap_first_entry($ldapLink,$result);
$found=0;
while($entry)
{
$newdn=ldap_get_dn($ldapLink,$entry);
//echo "".$newdn."<br/><br/>";
$dncomp= ldap_explode_dn($newdn,0);
$x=0;
foreach($dncomp as $component)
{
if($x==1)
{
//echo $component."<br/>";
if($component=="cn=".TRIM($_POST['gebruikersnaam']))
{ echo "<br/>CN correct ingevuld <br/>";
//ldap_free_result($result);
controleerPswd($ldapLink,$newdn);
$found=1;
exit;
}
}
$x++;
}
//echo "<br/>";
$entry = ldap_next_entry($ldapLink,$entry);
}

if ($found==0){
echo "Combinatie username en password onbekend!<br>";
#$_POST['gebruikersnaam'] wanneer domein ekeerd is gekozen en username staan moet blijven.
#showLogin($ldapLink,"");
showLogin($ldapLink,$_POST['gebruikersnaam']);
}
else{
ldap_free_result($result);
ldap_unbind($ldapLink);
}

}
function controleerPswd($ldapLink,$dn)
{
if(ldap_compare($ldapLink,$dn,"userPassword",TRIM($_POST['pwd']))){
echo "wachtwoord correct ingevuld";
}else
{ $username =$_POST['gebruikersnaam'];
echo "wachtwoord niet-correct ingevuld";
showLogin($ldapLink,$username);

}
}

function controleInput()
{
$usrname= TRIM($_POST['gebruikersnaam']);
$pswrd=TRIM($_POST['pwd']);
if (empty($usrname)||empty($pswrd))
{
if (empty($usrname)){
echo "Usernaam is leeg<br>";
}
if (empty($pswrd)){
echo "Password is leeg<br>";
}
echo "false wordt teruggekeerd<br>";
return FALSE;

}
else
{
echo "Username is niet leeg<br> Passwrd is niet leeg<br>";
return TRUE;
}
}
?>

[ Voor 111% gewijzigd door Verwijderd op 26-10-2004 01:28 . Reden: verbeteren ]


  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 20:24

Koffie

Koffiebierbrouwer

Braaimeneer

We zijn hier geen helpdesk waar je ff een oud topic omhoog kan kicken met een lap code en dan de vraag "Het werkt niet, weat doe ik fout ?"

Algemene regels hoe je op het forum te gedragen (Netiquette)

Tijd voor een nieuwe sig..

Pagina: 1

Dit topic is gesloten.