[PHP - Google] Alterar senha de usuário de um AD via PHP

2,427 views
Skip to first unread message

Inara Lopes

unread,
Jul 10, 2013, 2:55:04 PM7/10/13
to list...@googlegroups.com
Olá pessoal, tudo bom?  Sou Inara. :D
Bom, estou tentando alterar senhas de um AD por PHP, mas não consigo ver onde estou errando.
A conexão do LDAP está funcionando, mas na linha 
$result = ldap_search($ldapconn,$ldaptree, 'cn=*'.$user.'*') or die ("Error in search query: ".ldap_error($ldapconn));
dá erro. :(
Seria por causa do ponto entre o primeiro nome e sobrenome do usuário enviados pelo form?
Desde já agradeço.


Abaixo o código.

<div id="case_form">
<?php
 
       
if (getenv("REQUEST_METHOD") == "POST") {
$uid = $_POST["uid"];
$user = $uid.'@ufpe.br';
$pwdold = $_POST['pwdold'];
$pwdtxt1 = $_POST['pwdtxt1'];
$pwdtxt2 = $_POST['pwdtxt2'];
if($pwdtxt1 == $pwdtxt2) {
$pwdtxt = $pwdtxt1;
else{
msg('Desculpe, as senhas não coincidem');
exit('');
}
//Config
$ldapserver = 'http://www.ufpe.br';
$ldapuser   = 'nome.so...@ufpe.br';  
$ldappass   = '123456';
$ldaptree   = 'DC=ufpe,DC=br';
//Conexão
$ldapconn = ldap_connect($ldapserver) or die("Could not connect to LDAP server.");

if($ldapconn) {
// Ligação para o ldap server
$ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass) or die ("Error trying to bind: ".ldap_error($ldapconn));
// Verificando ligação
if ($ldapbind) {
echo "LDAP com sucesso! :D<br /><br />";

$result = ldap_search($ldapconn,$ldaptree, 'cn=*'.$user.'*') or die ("Error in search query: ".ldap_error($ldapconn));
$data = ldap_get_entries($ldapconn, $result);
// Mostra todos os dados
echo '<h1>Aqui os dados:</h1><pre>';
print_r($data);    
echo '</pre>';
//  Impressão para cada entrada
echo '<h1>Mostrando usu&aacute;rios</h1>';
for ($i=0; $i<$data["count"]; $i++) {
echo "User: ". $data[$i]["cn"][0] ."<br />";
if(isset($data[$i]["mail"][0])) {
echo "Email: ". $data[$i]["mail"][0] ."<br /><br />";
} else {
echo "Email: Nenhum<br /><br />";
}
}

// Num de impressão de entrada
echo "Num de entrada:".ldap_count_entries($ldapconn, $result);
}
else{
echo "Falha na ligação do LDAP. :(";
    }
}


ldap_close($ldapconn);

    if (getenv("REQUEST_METHOD") == "GET") {?>
    

           
    <form method='post' action='<?php echo $_SERVER['PHP_SELF'];?>'>
         <input type='text' name='uid' size='50' maxlength='11' placeholder="Usuário" class="campo_form"><br/>
    
      <input type='password' name='pwdold' size='50' maxlength='64' placeholder="Senha atual" class="campo_form"><br/>
    
      <input type='password' name='pwdtxt1' size='50' maxlength='64' placeholder="Nova senha" class="campo_form"><br/>
    
      <input type='password' name='pwdtxt2' size='50' maxlength='64' placeholder="Repetir nova senha" class="campo_form"><br/>
    
            <input type='submit' name='alterar' value='Alterar' class="btn">
 </form>
     
     
    <?php
    }
    ?>
  </div>

principe...@gmail.com

unread,
Jul 11, 2013, 7:51:58 AM7/11/13
to list...@googlegroups.com
invez de copiar e colar, faca o codigo corretamente, entao use o http://br2.php.net/manual/en/function.ldap-error.php para saber que erro exatamente esta acontecendo e como resolver...


--
--
============================================================
JQUERY MAGAZINE > http://www.jquerymagazine.com.br
--
PHP MAGAZINE > http://www.phpmagazine.com.br
--
LISTA NODE.JS > https://groups.google.com/group/lista-nodejs?hl=pt-br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "LISTA PHP" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para listaphp+u...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 

Inara Lopes

unread,
Jul 11, 2013, 9:02:59 AM7/11/13
to list...@googlegroups.com
Ao invés de digitar que copiei e coloquei, poderia ter sido mais gentil só em ter ajudado com o "entao use o http://br2.php.net/manual/en/function.ldap-error.php para saber que erro exatamente esta acontecendo e como resolver...".
Tenha um bom dia e obrigada.
--
Att.
Inara Lopes


"Ame profunda e passionalmente. Você pode se machucar, mas é a única forma de viver o amor completamente."
(Dalai Lama)


principe...@gmail.com

unread,
Jul 11, 2013, 9:25:22 AM7/11/13
to list...@googlegroups.com
mas todo mundo sabe que deve-se usar funcoes de erro....

Rubens Takiguti Ribeiro

unread,
Jul 11, 2013, 9:39:43 AM7/11/13
to list...@googlegroups.com
Inara, creio que o ponto não seja problema. Até porque você disse que o problema ocorreu durante o search e não no bind.

Sugiro que experimente montar um script mais simples, que faz as operações diretamente com os valores desejados (sem pegá-los por $_POST).

Algo como o exemplo mostrado no link:
http://www.php.net/manual/en/ldap.examples-basic.php

Rubens Takiguti Ribeiro
Bacharel em Ciência da Computação - UFLA
Zend Certified Engineer - PHP 5
http://rubsphp.blogspot.com.br/

Inara Lopes

unread,
Jul 11, 2013, 9:32:55 AM7/11/13
to list...@googlegroups.com
ok.

Paulo Patto

unread,
Jul 11, 2013, 9:50:24 AM7/11/13
to PHP Google
Não sei se foi a dilexia, mas onde está o erro que foi gerado, tem um trace de erro??? Fora que usar o `or die` não é meio descontinuado? Não sei como andam as boas práticas em PHP mas não é mais interessante usar um try-catch para se tratar exceptions? Outra coisa, não é possível usar o componente LDAP da Lib do Zend (separado), aqui você pode ver alguma solução sobre isso. Em todo caso acho interessante postar o trace do erro. 

Abraços e boa sorte.


2013/7/11 Inara Lopes <naral...@gmail.com>



--
Paulo Patto
"Se em vez de enchermos o bolso enchermos a cabeça, não seremos roubados"

principe...@gmail.com

unread,
Jul 11, 2013, 9:57:05 AM7/11/13
to list...@googlegroups.com
o try catch normalmente eh usado em orientacao a objetos, de forma procedural, como ela fez, se faz sim com dir, mas se coloca funcoes de erro, para saber ao certo qual o erro certo e nao um "nao pode conectar", reamente esta mensagem de eero nao diz nada, ae nao tem como fazer nada....nao diz o QUE deu errado...

Paulo Patto

unread,
Jul 11, 2013, 9:59:11 AM7/11/13
to PHP Google
OOP ou não, você tem o trace de erro Inara?

Daniel Passos Martins

unread,
Jul 11, 2013, 10:00:09 AM7/11/13
to list...@googlegroups.com

usa radius omi, tu escreve dentro dele e manda o AD buscar.

 

---

Daniel Passos Martins
Lógica Sistemas - Natal/RN
84 3223.5009 - 9171.1020
Conheça o Rio Grande do Norte

Em 11/07/2013 10:57, principe...@gmail.com escreveu:

o try catch normalmente eh usado em orientacao a objetos, de forma procedural, como ela fez, se faz sim com dir, mas se coloca funcoes de erro, para saber ao certo qual o erro certo e nao um "nao pode conectar", reamente esta mensagem de eero nao diz nada, ae nao tem como fazer nada....nao diz o QUE deu errado...
Em 11 de julho de 2013 10:50, Paulo Patto <paulo...@gmail.com> escreveu:
Não sei se foi a dilexia, mas onde está o erro que foi gerado, tem um trace de erro??? Fora que usar o `or die` não é meio descontinuado? Não sei como andam as boas práticas em PHP mas não é mais interessante usar um try-catch para se tratar exceptions? Outra coisa, não é possível usar o componente LDAP da Lib do Zend (separado), aquivocê pode ver alguma solução sobre isso. Em todo caso acho interessante postar o trace do erro. 
 
Abraços e boa sorte.

Paulo Patto

unread,
Jul 11, 2013, 10:00:39 AM7/11/13
to PHP Google
Radius?


2013/7/11 Daniel Passos Martins <dan...@logicasistemas.com.br>

Inara Lopes

unread,
Jul 11, 2013, 9:52:05 AM7/11/13
to list...@googlegroups.com
Obrigada Patto!


Em 11 de julho de 2013 10:50, Paulo Patto <paulo...@gmail.com> escreveu:

Inara Lopes

unread,
Jul 11, 2013, 9:47:49 AM7/11/13
to list...@googlegroups.com
Hum... Obrigada Rubens, muito útil! Irei testar conforme o exemplo. :)

Inara Lopes

unread,
Jul 11, 2013, 10:04:30 AM7/11/13
to list...@googlegroups.com
Patto, no momento não estou com as configurações deste arquivo neste PC. Mais tarde irei testar com as modificações.

Inara Lopes

unread,
Jul 15, 2013, 9:42:45 AM7/15/13
to list...@googlegroups.com
O problema era justamento na busca do usuário, como eu havia questionado aqui no grupo se seria "." entre o nome e sobre nome. Precisei só trocar o , 'cn=*'.$user.'*' pelo saMAccountname e aí funcionou.
>> $searchResults = ldap_search($ldap, $AD_dn,'saMAccountname=*'.$uid.'*');

Paulo Patto

unread,
Jul 15, 2013, 11:10:25 AM7/15/13
to PHP Google
great


2013/7/15 Inara Lopes <naral...@gmail.com>

Guilherme De Lucca

unread,
Aug 22, 2013, 9:13:46 PM8/22/13
to list...@googlegroups.com
desculpa estar abrindo um assunto antigo mas gostaria de saber se sabem o que acontece com ldap_bind que não tem retorno sendo assim não para tratar a solução infelizmente foi utilizar um @

principe...@gmail.com

unread,
Aug 23, 2013, 7:58:03 AM8/23/13
to list...@googlegroups.com
use um or die ldap_error...

Guilherme De Lucca

unread,
Aug 23, 2013, 9:24:50 AM8/23/13
to list...@googlegroups.com
me pergunto se o ldap_error não depende da conexão??? vc chegou a testar ai vou fazer um teste aqui mas acredito que não ira funcionar ! vou aproveitar e perguntar tem alguma função que valida se o server que vou fazer ldap_connect(NAME/IP do SERVER) é um AD / LDAP

principe...@gmail.com

unread,
Aug 23, 2013, 9:41:05 AM8/23/13
to list...@googlegroups.com
http://br2.php.net/manual/pt_BR/function.ldap-error.php

ldap_errorReturn the LDAP error message of the last LDAP command


este tempo que vc esta se perguntando o manual ja respondeu...eh so consultar o manual...dãããã..


vou traduzir pra vc, ldap_error retorna a mensagem deerro do ultimo comando ldap, logo, se ldap_connect der erro, tb dira...




Em 23 de agosto de 2013 10:24, Guilherme De Lucca <guilhermed...@gmail.com> escreveu:
me pergunto se o ldap_error não depende da conexão??? vc chegou a testar ai vou fazer um teste aqui mas acredito que não ira funcionar ! vou aproveitar e perguntar tem alguma função que valida se o server que vou fazer ldap_connect(NAME/IP do SERVER) é um AD / LDAP

--

Guilherme De Lucca

unread,
Aug 23, 2013, 10:18:47 AM8/23/13
to list...@googlegroups.com
bom apos teste aqui não consegui você chegou a testar??? poderia me ajudar com isso pois não funcionou e sobre o manual do php exitem erros

Guilherme De Lucca

unread,
Aug 23, 2013, 10:19:59 AM8/23/13
to list...@googlegroups.com
isso não funciona http://php.net/manual/pt_BR/function.ldap-connect.php o ldap não pode ser checado como se fosse uma conexão a um banco isso é claro para agente mas esta ai

Guilherme De Lucca

unread,
Aug 24, 2013, 5:30:17 PM8/24/13
to list...@googlegroups.com
Fico aguado uma solução real se alguém souber!!!
Reply all
Reply to author
Forward
0 new messages