https://blog.csdn.net/ssmile/article/details/52468738
默認在Linux下Apache+SVN沒(méi)有提供用戶(hù)修改密碼功能,這里利用PHP腳本來(lái)為用戶(hù)提供一種修改密碼的方法。
第一步,用戶(hù)在修改密碼之前需要先登錄,而登錄的驗證方法和訪(fǎng)問(wèn)SVN是一樣的,在/etc/apache2/mods-available/alias.conf中加入如下配置
- Alias /svntools/ "/var/www/svntools/"
- <Directory "/var/www/svntools">
- AuthType Basic
- AuthName "svntools repository"
- AuthUserFile /var/repository/htpasswd<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
- Require valid-user
- </Directory>
第二步,創(chuàng )建 /var/www/svntools 目錄,創(chuàng )建一個(gè)php文件,如index.php,輸入以下代碼 - <?php
- $username = $_SERVER["PHP_AUTH_USER"]; //經(jīng)過(guò) AuthType Basic 認證的用戶(hù)名
- $authed_pass = $_SERVER["PHP_AUTH_PW"]; //經(jīng)過(guò) 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方式提交到服務(wù)器的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 在線(xiàn)自助密碼修改</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>
- <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>用戶(hù)名:</td>
- <td align="left"> <?=$username?></td>
- </tr>
- <tr>
- <td>原密碼:</td>
- <td><input type=password size=12 name=oldpass></td>
- </tr>
- <tr>
- <td>用戶(hù)密碼:</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>
- <?php
- }
- else if($action == "oldpasswrong"){
- $msg="原密碼錯誤!";
- }
- else if($action == "passempty"){
- $msg="請輸入新密碼!";
- }
- else if($action == "passnotsame"){
- $msg="兩次輸入密碼不一致,請重新輸入!";
- }
- else{
- $passwdfile="/var/repository/htpasswd";
- $command='"/usr/bin/htpasswd" -b '.$passwdfile." ".$username." ".$newpass;
- system($command, $result);
- if($result==0){
- $msg="用戶(hù)[".$username."]密碼修改成功,請用新密碼登陸.";
- }
- else{
- $msg="用戶(hù)[".$username."]密碼修改失敗,返回值為".$result.",請和管理員聯(lián)系!";
- }
- }
- if (isset($msg)){
- ?>
- <script language="javaScript">
- //<!--
- alert("<?=$msg?>");
- window.location.href="<?=$_SERVER["PHP_SELF"]?>"
- //-->
- </script>
- <?php
- }
- ?>
- </body>
- </html>
chown www-data:www-data /var/repository/htpasswd
第四步,訪(fǎng)問(wèn)http://hostname/svntools/index.php
PS:網(wǎng)上提供的修改用戶(hù)密碼基本都是類(lèi)似這個(gè)腳本,但是注意,php的頁(yè)面需要在“<?”標簽后面加上“php”字符串,否則都無(wú)法正常運行。
聯(lián)系客服