apache+php自助修改svn密码

使用网上的一个php脚本可以自助修改svn用户的密码。环境为windows系统。

1、在httpd.conf中添加访问修改页面时使用svn认证
<Location /svnpass/>
AuthType Basic
AuthName "svntools repository"
AuthUserFile "C:\Program Files\Apache Software Foundation\Apache2.2\passwd"
Require valid-user
</Location>

2、建立svnpass文件夹
我是建在C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\svnpass

3、使用以下代码在svnpass目录下保存为index.php
<?
$username = $_SERVER["PHP_AUTH_USER"]; //经过 AuthType Basic 认证的用户名
$authed_pass = $_SERVER["PHP_AUTH_PW"]; //经过 AuthType Basic 认证的密码
$input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : ""); //从界面上输入的原密码
$newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : ""); //界面上输入的新密码
$repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : ""); //界面上输入的重复密码
$action = (isset($_REQUEST["action"]) ? $_REQUEST["action"] : ""); //以hide方式提交到服务器的action

if($action!="modify"){
$action = "view";
}
else if($authed_pass!=$input_oldpass){
$action = "oldpasswrong";
}
else if(empty($newpass)){
$action = "passempty";
}
else if($newpass!=$repeatpass){
$action = "passnotsame";
}
else{
$action = "modify";
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Subversion 在线自助密码修改</title>
</head>
<body>

<?
//action=view 显示普通的输入信息
if ($action == "view"){
?>
<script language = "javaScript">
<!--
function loginIn(myform)
{
var newpass=myform.newpass.value;
var repeatpass=myform.repeatpass.value;

if(newpass==""){
alert("请输入密码!");
return false;
}

if(repeatpass==""){
alert("请重复输入密码!");
return false;
}

if(newpass!=repeatpass){
alert("两次输入密码不一致,请重新输入!");
return false;
}
return true;
}
//-->
</script>
<style type="text/css">
<!--
table {
border: 1px solid #CCCCCC;
background-color: #f9f9f9;
text-align: center;
vertical-align: middle;
font-size: 9pt;
line-height: 15px;
}
th {
font-weight: bold;
line-height: 20px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-bottom-style: solid;
color: #333333;
background-color: f6f6f6;
}
input{
height: 18px;
}
.button {
height: 20px;
}

-->
</style>
<br><br><br>
<form method="post">
<input type="hidden" name="action" value="modify"/>
<table width="220" cellpadding="3" cellspacing="8" align="center">
<tr>
<th colspan=2>Subversion 密码修改</th>
</tr>
<tr>
<td>用 户 名:</td>
<td align="left"> <?=$username?></td>
</tr>
<tr>
<td>原 密 码:</td>
<td><input type=password size=12 name=oldpass></td>
</tr>
<tr>
<td>用户密码:</td>
<td><input type=password size=12 name=newpass></td>
</tr>
<tr>
<td>确认密码:</td>
<td><input type=password size=12 name=repeatpass></td>
</tr>
<tr>
<td colspan=2>
<input οnclick="return loginIn(this.form)" class="button" type=submit value="修 改">
<input name="reset" type=reset class="button" value="取 消">
</td>
</tr>
</table>
</form>
<?
}
else if($action == "oldpasswrong"){
$msg="原密码错误!";
}
else if($action == "passempty"){
$msg="请输入新密码!";
}
else if($action == "passnotsame"){
$msg="两次输入密码不一致,请重新输入!";
}
else{
$passwdfile="\"C:\\Program Files\\Apache Software Foundation\\Apache2.2\\passwd\"";
$command='htpasswd.exe -b'." ".$passwdfile." ".$username." ".$newpass;
//echo $command;
system($command, $result);
//echo $result;
if($result==0){
$msg="用户[".$username."]密码修改成功,请用新密码登陆.";
}
else{
$msg="用户[".$username."]密码修改失败,返回值为".$result.",请和管理员联系!";
}
}

if (isset($msg)){
?>
<script language="javaScript">
<!--
alert("<?=$msg?>");
window.location.href="<?=$_SERVER["PHP_SELF"]?>"
//-->
</script>
<?
}
?>
</body>
</html>

4、修改$passwdfile和$command
$passwdfile为svn用户密码文件位置比如我是在C:\Program Files\Apache Software Foundation\Apache2.2\passwd,passwd这个文件
$command为组合后的htpasswd命令,我的htpasswd.exe在C:\Program Files\Apache Software Foundation\Apache2.2\bin目录下,但是不管使用绝对路径还是相对路径,都会报错:
'C:\Program' 不是内部或外部命令,也不是可运行的程序或批处理文件。

'htpasswd' 不是内部或外部命令,也不是可运行的程序或批处理文件。

系统找不到指定的路径。

后来没辙了,把htpasswd.exe复制到了svnpass目录下,直接使用htpasswd.exe -b成功了。

http://bbs.chinaunix.net/thread-1692104-1-1.html
http://linux.chinaitlab.com/manual/ApacheManual/programs/htpasswd.html
http://www.blogjava.net/jasmine214--love/archive/2011/01/15/343029.html

ApachePasswd说明   这是一个用于修改Apache中AuthUserFile的工具,编写时主要是为了远程修改基于Apache配置的Subversion的用户密码。   目前提供for apache2.0版本及for apache2.2版本。   当Subversion配置成作为Apache的一个模块运行时,在httpd.conf中可能是类似这下面这样的语句:    <Location /svn> DAV svn SVNParentPath C:\SVN_repos AuthType Basic AuthName "Subversion repositories" AuthUserFile C:\SVN_repos\passwd AuthzSVNAccessFile C:\SVN_repos\access.conf Require valid-user </Location>   ApacehPasswd就是用来修改上面配置中的C:\SVN_repos\passwd这个文件的   使用方法:   1将文件Apache2xPasswd.cgi及Apache2xPasswd.cgi.ini复制到Apache的CGI脚本目录下,通常是cgi -bin目录。(这句话中的x请用相应的版本代替,如for apache2.0,则为Apache20Passwd.cgi)   2如果是for apache2.2版本,复制apache的bin目录下libapr-1.dll、libapriconv-1.dll、libaprutil-1.dll到Apache2xPasswd.cgi所在的目录   3修改配置文件Apache2xPasswd.cgi.ini中auth_user_file路径,如下 [path] auth_user_file=这里改为你的Subversion所用的AuthUserFile全路径,如C:\SVN_repos\passwd   4现在访问你服务器的http://localhost/cgi-bin/Apache2xPasswd.cgi就可以看到修改subversion密码的界面了。 备注: 1配置文件可用的配置项 [path] auth_user_file=这里改为你的Subversion所用的AuthUserFile全路径,如C:\SVN_repos\passwd 日志文件名 log_file=svnpass.log [setup] password_min_length=1 [html] title=修改SubVersion密码 description=修改SubVersion密码 your_name = 用户名 old_password = 旧密码 new_password1 = 新密码 new_password2 = 验证新密码 btn_change = 修 改 btn_reset = 重 置 change_password_ok=成功修改密码 change_password_failed=修改密码失败 old_password_error=旧密码错误 server_error=服务器错误 password_must_greater=密码位数必须大于 two_password_not_matched=两密码不一致 please_enter_name=请输入用户名 back=返回 2我一般用时都是将Apache2xPasswd.cgi改名为svnpass,这样用户修改密码时可以少打些字, 如访问http://192.168.0.1/cgi-bin/svnpass就可以修改密码了, 当改名为svnpass时,配置文件Apache2xPasswd.cgi.ini要相应地改为svnpass.ini,因为这个脚本是根据自己的文件名找配置文件的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值