<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gbk

    Subversion的自助密碼修改(windows、linux均通過)

    Subversion的自助密碼修改(windows、linux均通過)

    99lingbo 發(fā)表于: 2007-9-19 15:38 來源: 我用Subversion

    Subversion是一個很好的版本管理軟件,相比CVS,它可以依托于Apache運行,從而巧妙的繞開非80端口的防火墻的限制。同時,它還具有很 多優(yōu)秀的功能,如支持文件移動等。因此,作為后起之秀,其已經(jīng)在市場上占據(jù)了一席之地,如:apache、gcc等開源軟件已經(jīng)開始使用 Subversion作為其版本管理軟件。
    這里我們要解決的問題就是如何讓用戶自助修改用戶密碼的問題。
    典型的Subversion配置如下:

    <Location /svn>
    DAV svn
    SVNParentPath e:/svn

    # our access control policy
    AuthzSVNAccessFile e:/svn/config/svnaccess.conf

    # only authenticated users may access the repository
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Location>

    這里,使用了SVNParentPath以便能夠支持多個庫,其版本庫位于e:/svn下,認證文件為e:/svn/config/htpasswd.conf,授權(quán)文件為e:/svn/config/svnaccess.conf
    針對這個配置,我們?nèi)绻枰薷挠脩裘艽a,典型的操作就是執(zhí)行htpasswd.exe,如:htpasswd -b username password
    我們要做的也就是如何將這個在web上來實現(xiàn)。

    介紹完基本支持,下面直接說明我的實現(xiàn)方式。
    1、在Apache中增加一個別名,如:svntools,設(shè)置該路徑訪問需要認證,認證文件為Subversion的認證文件。
    Alias /svntools "E:/svn/svntools/"
    <Directory "E:/svn/">
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion Tools"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Directory>

    2、編寫index.php文件,內(nèi)容如下:
    <?
    /*
    Alias /svnmodify "E:/svn/"
    <Directory "E:/svn/">
    Require valid-user

    AuthType Basic
    AuthName "Subversion Tools"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Directory>
    */
    ?>
    <?
    $username = $_SERVER["PHP_AUTH_USER"]; //經(jīng)過 AuthType Basic 認證的用戶名
    $authed_pass = $_SERVER["PHP_AUTH_PW"]; //經(jīng)過 AuthType Basic 認證的密碼
    $input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : ""); //從界面上輸入的原密碼
    $newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : ""); //界面上輸入的新密碼
    $repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : ""); //界面上輸入的重復(fù)密碼
    $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 在線自助密碼修改</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("請重復(fù)輸入密碼!");
    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 onclick="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="E:"svn"config"htpasswd.conf";
    $command='"D:"Program Files"Apache Group"Apache2"bin"htpasswd.exe" -b '.$passwdfile." ".$username." ".$newpass;
    system($command, $result);
    if($result==0){
    $msg="用戶[".$username."]密碼修改成功,請用新密碼登陸.";
    }
    else{
    $msg="用戶[".$username."]密碼修改失敗,返回值為".$result.",請和管理員聯(lián)系!";
    }
    }

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

    OK,只要你的apache支持Php,那么使用這個上面這段腳本就能很好的實現(xiàn)自助修改的功能了。
    核心思想是:
    1、利用Subversion的認證文件對上述腳本進行認證,因此能夠確保只有經(jīng)過認證的用戶才能訪問此腳本
    2、當(dāng)Apache認證用戶通過后,會將認證信息保存到$_SERVER數(shù)組中,用戶名為:$_SERVER["PHP_AUTH_USER"],密碼 為:$_SERVER["PHP_AUTH_PW"]。如此使得我們能夠知道是哪一個用戶要修改自己的密碼以及用戶的原密碼。
    3、利用php能夠執(zhí)行系統(tǒng)命令的功能,根據(jù)上述信息和用戶輸入拼出要執(zhí)行的命令字符串,使用System()函數(shù)進行執(zhí)行htpasswd.exe,從而達到修改密碼的作用。



    最新回復(fù)

    99lingbo at 2007-9-19 15:41:26
    大家在linux 上測試一下
    windows上已經(jīng)通過,
    只需要有Apache ,php5就可以了
    謝謝,因為我這里沒有l(wèi)inux環(huán)境
    99lingbo at 2007-9-26 17:40:14
    在linux 下測試成功,   配置很簡單。
    只要你的服務(wù)器支持PHP,就可以了,把上面的PHP腳本拷貝到指定目錄,修改兩處地方:
    (1)  $passwdfile="E:"svn"config"htpasswd.conf";
        你自己的密碼目錄: 例如:/home/svn/passwd

    (2)  $command='"D:"Program Files"Apache Group"Apache2"bin"htpasswd.exe" -       b '.$passwdfile." ".$username." ".$newpass;
        htpasswd 的路徑:例如:/usr/bin/htpasswd

    OK。頁面同windows下的ApachePasswd一樣,,詳細我文檔盡快整理出來。

    [ 本帖最后由 99lingbo 于 2007-11-15 10:43 編輯 ]
    Admin at 2007-9-26 17:46:54
    很好,多謝分享
    huixiang at 2007-10-16 10:24:32
    期待linux下的完全編碼及其實現(xiàn)形式詳解啊
    caowei99 at 2007-10-16 18:06:40
    謝謝分享,明天回來測試……
    shiyufang at 2007-11-12 13:45:11
    好厲害呀,我一定要在兩個環(huán)境中都實現(xiàn)一下
    piggyxxi at 2007-11-22 14:42:57
    真不錯這正是我需要的東西,找了很久了。
    huangling at 2007-11-27 15:54:26
    能貼出linux版的么
    99lingbo at 2007-11-28 08:48:49
    $passwdfile="E:"svn"config"htpasswd.conf";
    $command='"D:"Program Files"Apache Group"Apache2"bin"htpasswd.exe" -b '.$passwdfile." ".$username." ".$newpass;

    linux版本只需要修改上面兩句:
    我的修改:
    $passwdfile="/home/svn/passwd";
    $command='"/usr/bin/htpasswd" -b '.$passwdfile." ".$username." ".$newpass;
    huangling at 2007-11-28 09:43:37
    Alias /svntools "E:/svn/svntools/"
    <Directory "E:/svn/">
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion Tools"
    AuthUserFile e:/svn/config/htpasswd.conf
    </Directory>

    這個不需要修改么?這幾句話是放在哪里的呢?是不是apache2/conf/httpd.conf下面的呢?里面的svntool是不是應(yīng)該和下面的svnmodfy一個名字呢?是筆誤還是就是應(yīng)該這樣些呢?

    不好意思,我不太懂php,我看你前面起了一個別名svnmodify,但是后面只搜到modify,這兩個是一回事么。你的index.php是放在路徑、home/svn下面么?
    99lingbo at 2007-11-28 10:30:45
    在httpd.conf下加上:

    Alias /passwd  "/home/svn/passwd.php"
    <Directory "/home/svn/svntools/">
    AuthName "Subversion PasswdChanged"
    AuthType Basic
    AuthUserFile /home/svn/passwd
    Require valid-user
    </Directory>

    其中Alias /passwd  "/home/svn/passwd.php"是自定義的。到時就可以輸入http://localhost/passwd 就可以了
    "/home/svn/passwd.php"是你的PHP腳本位置
    /home/svn/passwd是要修改的密碼
    huangling at 2007-11-29 10:42:27
    報[client 192.168.0.124] client denied by server configuration: /home/svnroot/conf/passwd.php,確認passwd.php用戶是apache的用戶svnroot:svnroot,權(quán)限 已經(jīng)開到777
    huangling at 2007-11-29 10:55:53
    我的apache,svn等都是源代碼安裝的,安裝目錄是/usr/local,我的php是apt-get安裝的。所以LoadModule php5_module  module/libphp5.so改成了LoadModule php5_module  /usr/lib/apache2/modules/libphp5.so,這樣是不是不行呢?
    huangling at 2007-11-29 11:01:56
    [Thu Nov 29 11:03:02 2007] [notice] Apache/2.2.6 (Unix) DAV/2 SVN/1.4.5 PHP/5.2.0-8+etch5~pu1 configured -- resuming normal operations
    [Thu Nov 29 11:03:18 2007] [error] [client 192.168.0.124] client denied by server configuration: /home/svnroot/conf/passwd.php
    99lingbo at 2007-11-29 13:20:02
    http://rapidshare.com/files/7302 ... 1___26426_.doc.html
    點擊最下放free按扭  下載祥解
    huangling at 2007-11-29 14:16:59
    我已經(jīng)收到郵件了,就是按照你的郵件配的!呵呵!我再手動安裝php試試吧
    huangling at 2007-11-29 14:59:20
    我一直找不到原因,就把passwd.php放到apache/htdocs下面了,然后輸入http://192.168.0.62/passwd.php,顯示是亂碼。是不是我的編碼選擇不對?我的現(xiàn)在選的是 西方(ISO-8859-1),應(yīng)該選什么呢?
    huangling at 2007-11-29 16:06:51
    用戶名不是自己填而是自動生成的么?
    99lingbo at 2007-11-30 11:15:32
    是要自己填寫的,就好象利用IE 登陸SVN一樣,填寫用戶名與密碼后,出現(xiàn)密碼修改界面,用戶才默認了
    99lingbo at 2007-11-30 11:20:57
    編碼出現(xiàn)了問題
    用UTF-8 GB1312
    還有http://192.168.0.62/passwd.php要輸入正確
    如果httpd.conf配置
    Alias /passwd  "/home/passwdtool/passwd.php/"
    <Directory "E:/svn/">
    Require valid-user
    AuthType Basic
    AuthName "Subversion Tools"
    AuthUserFile /home/passwd
    </Directory>
    URL應(yīng)該是http://localhost/passwd才對

    posted on 2008-01-02 11:15 百科 閱讀(637) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级一级一片免费高清| 思思久久99热免费精品6| 亚洲免费二区三区| 亚洲酒色1314狠狠做| 久久久久久夜精品精品免费啦| 国产精品亚洲玖玖玖在线观看| 色老头综合免费视频| 国产午夜亚洲不卡| 三年片免费高清版| 亚洲av不卡一区二区三区| 未满十八18禁止免费无码网站 | 美女黄色免费网站| 亚洲精品无码日韩国产不卡?V| 久久久久国色AV免费观看| 亚洲色精品vr一区二区三区| 久久国产乱子伦精品免费强| 久久亚洲AV成人无码软件| 99精品国产免费久久久久久下载| 亚洲欧洲AV无码专区| 亚洲AV无码一区二区三区国产 | 在线中文高清资源免费观看| 真人无码作爱免费视频| 国产亚洲欧洲Aⅴ综合一区 | 亚洲综合一区二区国产精品| 青青青免费国产在线视频小草| 亚洲熟伦熟女专区hd高清| www.亚洲一区| 日韩精品免费在线视频| 狠狠色伊人亚洲综合网站色| 亚洲av午夜成人片精品电影 | 久久亚洲AV成人无码| 日本不卡高清中文字幕免费| 美女网站在线观看视频免费的| 亚洲AV日韩AV高潮无码专区| 啦啦啦中文在线观看电视剧免费版 | 最近2019中文免费字幕在线观看| 亚洲人成电影在线天堂| 成人超污免费网站在线看| 九九免费观看全部免费视频| 久久精品国产精品亚洲毛片| 国产高清在线免费|