分享

Linux下 Apache+SVN 让用户自行修改SVN密码

 XeonGate 2021-03-04

https://blog.csdn.net/ssmile/article/details/52468738

默认在Linux下Apache+SVN没有提供用户修改密码功能,这里利用PHP脚本来为用户提供一种修改密码的方法。

第一步,用户在修改密码之前需要先登录,而登录的验证方法和访问SVN是一样的,在/etc/apache2/mods-available/alias.conf中加入如下配置

  1. Alias /svntools/ "/var/www/svntools/"
  2. <Directory "/var/www/svntools">
  3. AuthType Basic
  4. AuthName "svntools repository"
  5. AuthUserFile /var/repository/htpasswd<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
  6. Require valid-user
  7. </Directory>
第二步,创建 /var/www/svntools 目录,创建一个php文件,如index.php,输入以下代码
  1. <?php
  2. $username = $_SERVER["PHP_AUTH_USER"]; //经过 AuthType Basic 认证的用户名
  3. $authed_pass = $_SERVER["PHP_AUTH_PW"]; //经过 AuthType Basic 认证的密码
  4. $input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : ""); //从界面上输入的原密码
  5. $newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : ""); //界面上输入的新密码
  6. $repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : ""); //界面上输入的重复密码
  7. $action = (isset($_REQUEST["action"]) ? $_REQUEST["action"] : ""); //以hide方式提交到服务器的action
  8. if($action!="modify"){
  9. $action = "view";
  10. }
  11. else if($authed_pass!=$input_oldpass){
  12. $action = "oldpasswrong";
  13. }
  14. else if(empty($newpass)){
  15. $action = "passempty";
  16. }
  17. else if($newpass!=$repeatpass){
  18. $action = "passnotsame";
  19. }
  20. else{
  21. $action = "modify";
  22. }
  23. ?>
  24. <html>
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=GBK">
  27. <title>Subversion 在线自助密码修改</title>
  28. </head>
  29. <body>
  30. <?php
  31. //action=view 显示普通的输入信息
  32. if ($action == "view"){
  33. ?>
  34. <script language = "javaScript">
  35. <!--
  36. function loginIn(myform)
  37. {
  38. var newpass=myform.newpass.value;
  39. var repeatpass=myform.repeatpass.value;
  40. if(newpass==""){
  41. alert("请输入密码!");
  42. return false;
  43. }
  44. if(repeatpass==""){
  45. alert("请重复输入密码!");
  46. return false;
  47. }
  48. if(newpass!=repeatpass){
  49. alert("两次输入密码不一致,请重新输入!");
  50. return false;
  51. }
  52. return true;
  53. }
  54. //-->
  55. </script>
  56. <style type="text/css">
  57. <!--
  58. table {
  59. border: 1px solid #CCCCCC;
  60. background-color: #f9f9f9;
  61. text-align: center;
  62. vertical-align: middle;
  63. font-size: 9pt;
  64. line-height: 15px;
  65. }
  66. th {
  67. font-weight: bold;
  68. line-height: 20px;
  69. border-top-width: 1px;
  70. border-right-width: 1px;
  71. border-bottom-width: 1px;
  72. border-left-width: 1px;
  73. border-bottom-style: solid;
  74. color: #333333;
  75. background-color: f6f6f6;
  76. }
  77. input{
  78. height: 18px;
  79. }
  80. .button {
  81. height: 20px;
  82. }
  83. -->
  84. </style>
  85. <br><br><br>
  86. <form method="post">
  87. <input type="hidden" name="action" value="modify"/>
  88. <table width="220" cellpadding="3" cellspacing="8" align="center">
  89. <tr>
  90. <th colspan=2>Subversion 密码修改</th>
  91. </tr>
  92. <tr>
  93. <td>用户名:</td>
  94. <td align="left"> <?=$username?></td>
  95. </tr>
  96. <tr>
  97. <td>原密码:</td>
  98. <td><input type=password size=12 name=oldpass></td>
  99. </tr>
  100. <tr>
  101. <td>用户密码:</td>
  102. <td><input type=password size=12 name=newpass></td>
  103. </tr>
  104. <tr>
  105. <td>确认密码:</td>
  106. <td><input type=password size=12 name=repeatpass></td>
  107. </tr>
  108. <tr>
  109. <td colspan=2>
  110. <input οnclick="return loginIn(this.form)" class="button" type=submit value="修 改">
  111. <input name="reset" type=reset class="button" value="取 消">
  112. </td>
  113. </tr>
  114. </table>
  115. </form>
  116. <?php
  117. }
  118. else if($action == "oldpasswrong"){
  119. $msg="原密码错误!";
  120. }
  121. else if($action == "passempty"){
  122. $msg="请输入新密码!";
  123. }
  124. else if($action == "passnotsame"){
  125. $msg="两次输入密码不一致,请重新输入!";
  126. }
  127. else{
  128. $passwdfile="/var/repository/htpasswd";
  129. $command='"/usr/bin/htpasswd" -b '.$passwdfile." ".$username." ".$newpass;
  130. system($command, $result);
  131. if($result==0){
  132. $msg="用户[".$username."]密码修改成功,请用新密码登陆.";
  133. }
  134. else{
  135. $msg="用户[".$username."]密码修改失败,返回值为".$result.",请和管理员联系!";
  136. }
  137. }
  138. if (isset($msg)){
  139. ?>
  140. <script language="javaScript">
  141. //<!--
  142. alert("<?=$msg?>");
  143. window.location.href="<?=$_SERVER["PHP_SELF"]?>"
  144. //-->
  145. </script>
  146. <?php
  147. }
  148. ?>
  149. </body>
  150. </html>

第三步,修改用户密码文件权限

chown www-data:www-data  /var/repository/htpasswd

第四步,访问http://hostname/svntools/index.php

PS:网上提供的修改用户密码基本都是类似这个脚本,但是注意,php的页面需要在“<?”标签后面加上“php”字符串,否则都无法正常运行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多