acceder un domaine windows 2003

Petit nouveau ! | 5 Messages

30 janv. 2012, 13:38

Bonjour,

j'essaye avec le code suivant de faire un accès vers un A.D. Windows et je reçois l'erreur "access is denied" le module ldap foncionne,
je ne comprend pas :roll: pouvez-vous m'aider a vérifier ce script?

Code : Tout sélectionner

session_start(); $creatorparts = explode('\\',$_SERVER["REMOTE_USER"]); $creator = $creatorparts[1]; if($_SESSION['memberof']){ $memberof = $_SESSION['memberof']; }else{ $memberof = get_memberships($creator); $_SESSION['memberof'] = $memberof; } $page = basename($_SERVER["PHP_SELF"]); $page = substr($page,0,strpos(basename($_SERVER["PHP_SELF"]),'.')); if(strpos(basename($_SERVER["PHP_SELF"]),'-')){ $page = substr($page,0,strpos(basename($_SERVER["PHP_SELF"]),'-')); } $bimAuth = false; $cpoAuth = false; $pageAllowed = false; if($memberof){ foreach($memberof as $group){ //echo $group.'*<br>'; if($group == $bimSecurityGroup){ $bimAuth = true; if(array_search($page,$bimSecurity,1)){ $pageAllowed = true; } } if($group == $cpoSecurityGroup){ $cpoAuth = true; if(array_search($page,$cpoSecurity,1)){ $pageAllowed = true; } } } } ?>
Merci d'avance.

Salento

ViPHP
xTG
ViPHP | 7331 Messages

30 janv. 2012, 14:59

Tu n'as aucun accès LDAP dans ce code, donc l'erreur vient de plus haut.
La fonction get_memberships() par exemple ?

Petit nouveau ! | 5 Messages

30 janv. 2012, 15:46

Merci pour la réponse,
ça doit être ici:

Code : Tout sélectionner

<?php include('adodb-time.inc.php'); function dirNameToUserName($dirname){ $start = strpos($dirname,'=')+1; $end = strpos($dirname,','); return(substr($dirname,$start,$end-$start)); } function sfile($file){ $tmp = file($file); foreach($tmp as $line){ $ttmp = explode(';',$line); $result[$ttmp[0]] = $ttmp[1]; } return $result; } function showoptions($options,$selectedoption){ natcasesort($options); foreach($options as $optionname => $anoption){ if(trim($anoption)){ if(strtolower(trim($optionname))==strtolower($selectedoption)){ $selected = ' selected'; $seloptexists = 1; }else{ $selected = ''; } $result .= '<option'.$selected.' value="'.$optionname.'">'.trim($anoption)."\n"; } } if($selectedoption == ''){ $result = '<option selected value="">'.$result; } if(($selectedoption)and($seloptexists == '')){ $result = '<option selected value="">[unknown] '.$selectedoption.$result."\n"; } return($result); } function createrandompassword(){ $chars = "abcdefghijkmnpqrstuvwxyz23456789"; srand((double)microtime()*1000000); $i = 0; $pass = '' ; while ($i <= 8) { $num = rand() % 33; $tmp = substr($chars, $num, 1); $pass = $pass . $tmp; $i++; } return $pass; } function createreasypassword(){ $chars = "AEIUY"; $chars1 = "BCDFGHJKMNPQRSTVWXZ"; srand((double)microtime()*1000000); $pass = substr($chars1,(rand() % 33),1).substr($chars,(rand() % 33),1).substr($chars1,(rand() % 33),1).substr($chars,(rand() % 33),1); return $pass; } function get_ldap_users(){ $cachefile = 'cache/users.txt'; // GET LDAP DATA CONFIG $user_dn = $GLOBALS['ldapUserDn']; $ldappass = $GLOBALS['ldapUserPwd']; $base_dn = $GLOBALS['domain']; $server = $GLOBALS['ldapserver']; $ou = $GLOBALS['userou'].','.$GLOBALS['domain']; $cache_timeout = 15; // In seconds // CHECK AGE and EXISTENCE OF CACHE $filename = $cachefile; if (file_exists($filename)) { if(($cache_timeout) > (time() - filemtime($filename))){ $cached = 1; }else{ $cached = 0; } }else{ $cached = 0; } // GET DATA if($cached){ // READ CACHE FILE TO ARRAY $users = sfile($cachefile); }else{ // READ ALL INFO DIRECTLY FROM LDAP/AD $ds=ldap_connect($server); if ($ds) { // binding to ldap server $r = ldap_bind($ds, $user_dn, $ldappass); // verify binding if (!$r) { echo "LDAP bind failed..."."\n"; } // Search surname entry $sr=ldap_search($ds, $ou, "sn=*"); // Get entries $info = ldap_get_entries($ds, $sr); // Get all entries for ($i=0; $i<$info["count"]; $i++) { $users[$info[$i]['cn'][0]] = $info[$i]['sn'][0].', '.$info[$i]['givenname'][0]; } ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"."\n"; } // WRITE CACHE FILE FROM ARRAYS $cfile = fopen($cachefile,"w"); foreach($users as $n => $dn){ fwrite($cfile, $n.';'.$dn."\n"); } fclose($cfile); } return($users); } function get_ldap_users_details(){ // GET LDAP DATA CONFIG $user_dn = $GLOBALS['ldapUserDn']; $ldappass = $GLOBALS['ldapUserPwd']; $base_dn = $GLOBALS['domain']; $server = $GLOBALS['ldapserver']; $ou = $GLOBALS['userou'].','.$GLOBALS['domain']; // READ ALL INFO DIRECTLY FROM LDAP/AD $ds=ldap_connect($server); if ($ds) { // binding to ldap server $r = ldap_bind($ds, $user_dn, $ldappass); // verify binding if (!$r) { echo "LDAP bind failed..."."\n"; } // Search surname entry $sr=ldap_search($ds, $ou, "sn=*"); // Get entries $info = ldap_get_entries($ds, $sr); ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"."\n"; } return($info); } function get_ldap_groups($ou){ $cachefile = 'cache/groups.txt'; // GET LDAP DATA CONFIG $user_dn = $GLOBALS['ldapUserDn']; $ldappass = $GLOBALS['ldapUserPwd']; $base_dn = $GLOBALS['domain']; $server = $GLOBALS['ldapserver']; $ou = $ou.','.$GLOBALS['domain']; $cache_timeout = 15; // In seconds // CHECK AGE and EXISTENCE OF CACHE $filename = $cachefile; if (file_exists($filename)) { if(($cache_timeout) > (time() - filemtime($filename))){ $cached = 1; }else{ $cached = 0; } }else{ $cached = 0; } // GET DATA if($cached){ // READ CACHE FILE TO ARRAY $groups = sfile($cachefile); }else{ // READ ALL INFO DIRECTLY FROM LDAP/AD $ds=ldap_connect($server); if ($ds) { // binding to ldap server $r = ldap_bind($ds, $user_dn, $ldappass); // verify binding if (!$r) { echo "LDAP bind failed..."."\n"; } // Search groupname entry $sr=ldap_search($ds, $ou, "cn=*"); // Get entries $info = ldap_get_entries($ds, $sr); // Get all entries for ($i=0; $i<$info["count"]; $i++) { $groups[$info[$i]['cn'][0]] = $info[$i]['cn'][0]; } ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"."\n"; } // WRITE CACHE FILE FROM ARRAYS $cfile = fopen($cachefile,"w"); foreach($groups as $n => $dn){ fwrite($cfile, $n.';'.$dn."\n"); } fclose($cfile); } return($groups); } function get_ldap_user_details($userCn){ // GET LDAP DATA CONFIG $user_dn = $GLOBALS['ldapUserDn']; $ldappass = $GLOBALS['ldapUserPwd']; $base_dn = $GLOBALS['domain']; $server = $GLOBALS['ldapserver']; $ou = $GLOBALS['userou'].','.$GLOBALS['domain']; // READ ALL INFO DIRECTLY FROM LDAP/AD $ds=ldap_connect($server); if ($ds) { // binding to ldap server $r = ldap_bind($ds, $user_dn, $ldappass); // verify binding if (!$r) { echo "LDAP bind failed..."."\n"; } // Search surname entry $sr=ldap_search($ds, $ou, "cn=".$userCn); // Get entries $info = ldap_get_entries($ds, $sr); // Get all details in simple array foreach($info[0] as $detailname => $detail){ for ($i=0; $i<$detail["count"]; $i++) { $userdetails[$detailname][$i] = $detail[$i]; } } ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"."\n"; } return($userdetails); } function ldap_user_exists($userCn){ // GET LDAP DATA CONFIG $user_dn = $GLOBALS['ldapUserDn']; $ldappass = $GLOBALS['ldapUserPwd']; $base_dn = $GLOBALS['domain']; $server = $GLOBALS['ldapserver']; $ou = $GLOBALS['userou'].','.$GLOBALS['domain']; // READ ALL INFO DIRECTLY FROM LDAP/AD $ds=ldap_connect($server); if ($ds) { // binding to ldap server $r = ldap_bind($ds, $user_dn, $ldappass); // verify binding if (!$r) { echo "LDAP bind failed..."."\n"; } // Search surname entry $sr=ldap_search($ds, $ou, "cn=".$userCn); // Get entries $info = ldap_get_entries($ds, $sr); // Get all details in simple array foreach($info as $user){ $result .= $user; } ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"."\n"; } return($result); } function get_memberships($user){ $userdetails = @get_ldap_user_details($user); foreach($userdetails['memberof'] as $group){ //echo '<b>=='.$group.'==</b><br>'; $gr = substr($group,0,strpos($group,',')); $grou = substr($group,strpos($group,',')+1); $subgroups = array_merge((array)get_groups_memberships($gr,$grou),(array)$subgroups); } $result = @array_merge($userdetails['memberof'],$subgroups); return $result; } function get_groups_memberships($gr,$grou){ $groupdetails = get_ldap_group_details($gr,$grou); if(is_array($groupdetails['memberof'])){ foreach($groupdetails['memberof'] as $subgroup){ $subgroups[] = $subgroup; $sgr = substr($subgroup,0,strpos($subgroup,',')); $sgrou = substr($subgroup,strpos($subgroup,',')+1); $subsubgroups = array_merge((array)get_groups_memberships($sgr,$sgrou),(array)$subsubgroups); } $result = array_merge($subgroups,$subsubgroups); return $result; } } function get_ldap_group_details($group,$ou){ //echo '<font color="red"><b>'.$group.'#'.$ou.'</b></font><br>'; // GET LDAP DATA CONFIG $user_dn = $GLOBALS['ldapUserDn']; $ldappass = $GLOBALS['ldapUserPwd']; $base_dn = $GLOBALS['domain']; $server = $GLOBALS['ldapserver']; // READ ALL INFO DIRECTLY FROM LDAP/AD $ds=ldap_connect($server); if ($ds) { // binding to ldap server $r = ldap_bind($ds, $user_dn, $ldappass); // verify binding if (!$r) { echo "LDAP bind failed..."."\n"; } // Search surname entry if($sr=@ldap_search($ds, $ou, $group)){ // Get entries $info = ldap_get_entries($ds, $sr); // Get all details in simple array foreach($info[0] as $detailname => $detail){ for ($i=0; $i<$detail["count"]; $i++) { $groupdetails[$detailname][$i] = $detail[$i]; } } } ldap_close($ds); } else { echo "<h4>Unable to connect to LDAP server</h4>"."\n"; } return($groupdetails); }

ViPHP
xTG
ViPHP | 7331 Messages

30 janv. 2012, 17:19

Commences par supprimer les @ qui trainent dans ton code et tu auras surement un message d'erreur plus compréhensible qui pourra nous guider.
Cacher les erreurs est une très mauvaise manie et pose toujours un tas de problème en cas de debug.

Petit nouveau ! | 5 Messages

01 févr. 2012, 16:31

Désolé pour le retard,

j'ai beaucoup d'erreurs maintenant:

1) erreur, undefinet offset dans,

Code : Tout sélectionner

$creatorparts = explode('\\',$_SERVER["REMOTE_USER"]); $creator = $creatorparts[1];
:roll:

Petit nouveau ! | 5 Messages

01 févr. 2012, 17:01

ok j'ai trouvé c'est comme ça:

Code : Tout sélectionner

$creatorparts = explode('\\',$_SERVER["REMOTE_USER"]); $creator = (isset($creatorparts[1]));
Par contre pouvez-vous m'aider pour ce code ci:

Code : Tout sélectionner

foreach(isset($info[0] as $detailname => $detail)){
Merci d'avance.

ViPHP
xTG
ViPHP | 7331 Messages

01 févr. 2012, 17:38

Euh non là tu casses tout. ^^

La fonction isset() renvoie un booléen selon que la variable existe ou non.
Donc :
$creator = (isset($creatorparts[1])) ? $creatorparts[1] : 'valeur par défaut ici';
Mais à priori ton script enchaîne les variables manquantes (cf ta boucle foreach).
$info[0] semble ne pas exister (tout du moins si c'est aussi un undefined offset).
Donc il est impossible de faire le traitement de la boucle.

C'est comme mettre dans un panier des pommes puis prendre les pommes une à une dans le panier pour les éplucher.
Mais s'il n'y a pas de pommes dans le panier... Bah pas d'épluchage possible. ;)

Petit nouveau ! | 5 Messages

02 févr. 2012, 14:11

Je ne comprend plus rien, trop compliqué pour moi :shock:

pour l'instant j'ai le message d'erreur suivant:

Parse error: syntax error, unexpected T_AS, expecting, dans cette ligne de code:

Code : Tout sélectionner

foreach(isset($info[0] as $detailname => $detail))
si je comprend bien il ne reconnais pas AS ?

Merci de votre patience.

pour l'instant j'ai un site qui fonctionne avec IIS6, et php 5.1.6, aspnet 2
mon plus grand soucis est que mon site fait fréquemment de requêtes LDAP et souvent il se bloque comme si il n'avait pas beaucoup de temps pour faire ça requête et au même temps si qlq d'autre fait aussi une autre requête ldap il se plante définitivement.
j'ai donc pensé d’essayé par ex. Xampp avec php 5.3.9 et apache2.xxx et je me retrouve face a ces problèmes de langages php sur mon site qui me semble un peut vieux.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 févr. 2012, 14:19

parce que tu n'a pas fermé la parenthèse du isset qui d'ailleurs ne devrais pas être la !!!

je sais bien qu'il y a une ) à la fin mais isset test une variable pas tout le script !

d'ailleurs la doc http://www.php.net/isset indique clairement
Avertissement

isset() fonctionne uniquement avec des variables car l'utilisation de toute autre chose aura comme conséquence une erreur d'analyse. Pour vérifier si une constants est définie, utilisez la fonction defined().
utilise un IDE pour coder ça t'évitera ce type problème (zend studio, netbeans, eclipse et surement d'autre que je ne connais pas !).

donc au final
<?php
if (isset($info[0]))
foreach( $info[0] as $detailname => $detail)
?>

@+
Il en faut peu pour être heureux ......