概要
个人通过搭建SVN系统,记录一下自己走过的坑,以供他人后续不用再碰到相应的问题。
SVN版本:VisualSVN-Server-3.9.6(该版本及低版本可支持多个用户,高版本只支持15位用户)
资源
- htpasswd.exe(网上有很多下载资源)
配置修改
1、PHP下载
由于需要PHP环境,在官网直接下载https://windows.php.net/download
将下载好的压缩文件复制到svn安装根目录中,名称命名为php,如下所示:
2、conf文件修改
打开SVN安装目录,C:\Program Files\VisualSVN Server\conf中的httpd-custom.conf文件
添加php运行环境。不同版本的dll文件名称会不一致,根据个人下载版本自定义选择。
LoadModule php_module "C:\Program Files\VisualSVN Server\php\php8apache2_4.dll"
<IfModule php_module>
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
</IfModule>
# 配置 php.ini 的路径
PHPIniDir "php"
为适应php不同版本,修改为php_module
3、conf文件修改
新建一个 php 文件(文件名:password.php)放到 C:\Program Files\VisualSVN Server\htdocs\password.phpphp文件是一个网页脚本,所以需要放在htdocs文件夹中
php文件代码如下:
<?php
/***************************************************************/
$passwdfile="C:\Repositories\htpasswd";
$htpasswdPath = "C:\Program Files\VisualSVN Server\bin\htpasswd.exe";
/***************************************************************/
$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=UTF-8">
<title>Subversion 在线自助密码修改</title>
</head>
<body>
<?php
//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>
<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>SVN密码修改</th>
</tr>
<tr>
<td>用 户 名:</td>
<td align="left"> <?php echo $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 onclick="return loginIn(this.form)" class="button" type=submit value="修 改">
<input name="reset" type=reset class="button" value="取 消">
<a href="/"><input name="return" type=button class="button" value="返 回"></a>
</td>
</tr>
</table>
</form>
<?php
} else if ($action == "oldpasswrong") {
$msg="原密码错误!";
} else if ($action == "passempty") {
$msg="请输入新密码!";
} else if ($action == "passnotsame") {
$msg="两次输入密码不一致,请重新输入!";
} else {
// $passwdfile="D:\SVN_Repositories\htpasswd";
// $command='"d:\VisualSVN Server\bin\htpasswd.exe" -b '.$passwdfile." ".$username." ".$newpass;
$command='"'. $htpasswdPath. '" -b '.$passwdfile." ".$username." ".$newpass;
system($command, $result);
if ($result==0) {
$msg_succ="用户[".$username."]密码修改成功,请重新登陆.";
} else {
$msg="用户[".$username."]密码修改失败,返回值为".$result.",请和管理员联系!";
}
}
if (isset($msg_succ)) {
?>
<script language="javaScript">
<!--
alert("<?php echo $msg_succ?>");
window.location.href="/"
//-->
</script>
<?php
} else if (isset($msg)) {
?>
<script language="javaScript">
<!--
alert("<?php echo $msg?>");
window.location.href="<?php echo $_SERVER["PHP_SELF"]?>"
//-->
</script>
<?php
}
?>
</body>
</html>
这2个文件,根据实际地址进行配置,尤其passwdfile配置错误,后续会一直提示修改失败。
passwdfile:svn用户文件
htpasswdPath:下载的exe文件
4、添加跳转链接
在network设置中,取消Use secure connections(HTTPS)勾选,在打开根目录文件,文件路径: C:\Program Files\VisualSVN Server\WebUI\index.html在页脚增加修改密码的链接,代码如下:
<br /><br /><a style="font-size: 16px;" href="http://192.168.1.180:8080/password.php">自助修改密码</a>
4、测试
当你完成上述的所有步骤,直接在浏览器中访问服务器,下方出现修改密码链接,就可以进行密码修改了。