Loading....

HEAD

  • 有一种精神,叫"公诚勤朴"

挣点外快

PHP修改 LDAP用户密码程序
作者: wzhu 时间: 2009-07-29 11:12:58

ldap.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title> Reset LDAP Password</title>
<style type="text/css">
dt{
    font-weight: bold;
}
</style>
</head>
<body>
<?php
/*
===========================================================    
    ldap.php    Zhu Weiwei
    Copyright © 2006-2008
    http://www.cncmm.com China. All Rights Reserved.
===========================================================
*/

$u   = $_REQUEST['u'];
$op  = $_REQUEST['op'];
$np1 = $_REQUEST['np1'];
$np2 = $_REQUEST['np2'];
$an  = $_REQUEST['an'];
if(!empty($an)){
    if( empty($u) or empty($op) or empty($np1) or empty($np2) ){
        $msg = "Some filed was empty!";
    }else{
        if( $np1 != $np2  ){
            $msg = "confirm password error!";
        }else{
            if($op == $np1){
               $msg = "new password can not be same as old password!";
            }else{
                $ldap_host = "domain.com";
                $ldap_port = 389;
                $base_dn   = "dc=domain,dc=com";
                $connect = @ldap_connect( $ldap_host, $ldap_port);
                if(!$connect){
                    $msg = "Could not connect to LDAP server";
                }else{
                    $user_dn   = sprintf("uid=%s,ou=Staff,dc=domain,dc=com",$u);
                    $user_pass = $op;

                    $bind = @ldap_bind($connect, $user_dn, $user_pass);
                    if(!$bind){
                        $msg = "old password error!";
                    }else{
                        $root_dn   = "cn=Manager,dc=domain,dc=com";
                        $root_pass = 'noPa$$w0rd#';
                        $bind = @ldap_bind($connect, $root_dn, $root_pass);
                        if(!$bind){
                            $msg = "Programe can not bind to LDAP server!";
                        }else{
                            $values["userPassword"][0] = "{md5}".base64_encode(pack("H*",md5($np1)));
                            $rs = @ldap_mod_replace($connect,$user_dn,$values);
                            if($rs){
                                $msg = "password modifed success!";
                            }else{
                                $msg = "password modifed failed!";
                            }
                        }
                    }
                }
                @ldap_close($connect);
            }
        }
    }
}

if(!empty($msg)){
    print("<h1>$msg</h1>");
}
?>

<form method="post" action="">
  <dl>
    <dt>User Id</dt>
    <dd>uid=<input type="text" name="u" size="16" />,ou=Staff,dc=domain,dc=cn</dd>

    <dt>Old Password</dt>
    <dd><input type="text" name="op" /></dd>

    <dt>New Password</dt>
    <dd><input type="text" name="np1" /></dd>

    <dt>Confirm Password</dt>
    <dd><input type="text" name="np2" /></dd>
    <dd><input type="submit" value="Submit" /></dd>
  </dl>
  <input type="hidden" name="an" value="submit" />
</form>
</body>
</html>
相关评论
游客123 发布于 2010-05-04 17:45:25 IP: 114.249.216.*
不知道为什么,ldap_bind总是无法绑定
wzhu 发布于 2010-05-06 16:58:53 IP: 222.128.6.*
首先要确定是哪一个Bind不成功.然后根据清苦具体分析原因.
有心人 发布于 2010-06-22 07:34:59 IP: 220.233.71.*
请问:页面打开,显示下面这些内容,是什么意思呢?

Notice: Undefined index: u in C:\Tools\EasyPHP\www\ldap.php on line 22

Notice: Undefined index: op in C:\Tools\EasyPHP\www\ldap.php on line 23

Notice: Undefined index: np1 in C:\Tools\EasyPHP\www\ldap.php on line 24

Notice: Undefined index: np2 in C:\Tools\EasyPHP\www\ldap.php on line 25

Notice: Undefined index: an in C:\Tools\EasyPHP\www\ldap.php on line 26
wzhu 发布于 2010-06-22 09:46:35 IP: 218.249.58.*
To 有心人,
这个和你的PHP的配置有关系,当然也可以修改当前程序,要么增强程序逻辑,要么在程序的最前面加上
<?php @ini_set ( 'display_errors', 'Off' ); error_reporting(0); ?>
ldap fans 发布于 2010-06-28 02:17:46 IP: 99.244.231.*
这程序没法用,至少是在Openldap上,应该先用一个用户bind,找到UID相应的entries的dn,然后用dn去bind来检测原来的密码是否正确。
所以这个程序是错的。
wzhu 发布于 2010-06-28 14:04:33 IP: 218.249.58.*
To: ldap fans,
可以用用户uid的dn和密码先验证旧密码是否正确,至于修改密码使用具有管理权限root来修改密码。
lxw 发布于 2010-11-10 15:28:15 IP: 218.240.157.*
你好,我用的openldap ,想用你这个程序,修改密码,怎么不管对象,提交了都日白页,也不知是连上ldap server了吗?如何查看呢,盼复。
wzhu 发布于 2010-11-22 21:04:12 IP: 218.249.58.*
To lxw
首先要确定你的php是否有ldap模块。其次要确认程序是怎么报错。具体错误可以查看错误日志,或者在程序的最前面插入<?php ini_set ( 'display_errors', 'On' ); error_reporting(2047); ?>
查看页面的报错
lxw 发布于 2010-11-23 16:16:27 IP: 218.240.157.*
你好,这句是加在PHP程的外面吧,我加到bady 后面,报错了。
我把要连接的ou dc都改成我的了,点提交以后,不管输入的旧密码是对错,总是提示old password error!
我安装了php-ldap模块,而且看样子,似乎与服务器都有连接了。
wzhu 发布于 2010-11-23 18:02:11 IP: 123.125.220.*
To:lxw
1,确认$ldap_host = "domain.com";是否是对应LDAP服务器的IP
2,确认$user_dn是否正确.
发表评论
姓名:
图码: