WZHU's BLOG
HEAD
- 有一种精神,叫"公诚勤朴"
Recent Posts
- 导出Gmail通讯录(Export Gmail Contacts)
- Subversion 强制用户写备注(日志)才能提交.
- Linux 时间服务器同步命令
- PHP修改 LDAP用户密码程序
- Subversion安装与配置
- 我的Subversion使用LDAP认证之Apache配置实例
- HTTP协议(RFC2616)中的方法定义
- 我的HTTP Client 模拟PHP Class
- 我所使用的PHP图形验证码程序.
- DNS Bind9 配置实例
- (联合早报)中国社会信任的解体及其结果(转)
- Linux+Apache+MySQL+PHP 安装配置(三)——freeType,libpng,jpeg,gd,mcrypt,mhash,imap,PHP安装
- Linux+Apache+MySQL+PHP 安装配置(二)—— Apache安装
- Linux+Apache+MySQL+PHP 安装配置(一)—— MySQL安装
- 甲型H1N1流感防病要诀!
Recent Comments
挣点外快
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>
"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是否正确.