Linux下SVN远程web密码修改

Linux下SVN远程web密码修改(修改篇)

Linux远程修改用户密码工具

使用方法:1、将文件ChangePasswd.cgi和ChangePasswd.ini 放到apche安装目录下的cgi-bin下2、确认ChangePasswd.cgi 程序第1行 ,prel工具的位置 (我的:#!/usr/bin/perl -w)/usr/bin/perl3、修改ChangePasswd.cgi 第84行 改成htpasswd所在的路径 (我的:/project/apache/bin/htpasswd)4、修改ChangePasswd.cgi 128行 ini文件改成完整路径 (我的:/project/apache/cgi-bin/ChangePasswd.ini)5、配置文件 ChangePasswd.ini 第2行authuserfile= 密码存放路径 (我的:/svndata/svn-auth-file/passwd)6、配置文件 ChangePasswd.ini 第3行logfile= 操作日志存放路径 (我的:/project/apache/cgi-bin/ChangPasswd.log)

(前6为网上所得,但使用后仍然不成功,经自己查证,此处要注意)

7.chmod -R 755 cgi-bin目录(我的: /var/www/cgi-bin)

注意细节:1、用htpasswd时 切勿用-m参数 如果以前用的话,可重新输入一次进行更新2、ChangPasswd.log 必须有“w”写入权限

把以下内容复制下来保存为ini后缀的文件ChangePasswd.ini

[path]authuserfile=/repository/auth/authfilelogfile=/repository/auth/ChangPasswd.log[setup]pwdminlen=6[html]title=SVN用户密码自助修改description=SVN用户密码自助修改yourname=用户名oldpwd=旧密码newpwd1=新密码newpwd2=确认新密码btn_change=修 改btn_reset=重 置

changepwdok=成功修改密码changepwdfailed=修改密码失败servererror=服务器错误passmustgreater=新密码位数必须大于twopassnotmatched=两密码不一致entername=请输入用户名enterpwd=密码未输入errorpwd=你的密码不正确back=返回

把以下内容复制下来保存为cgi后缀的文件ChangePasswd.cgi

#!/usr/bin/perl -w

use strict;use CGI;my $time = localtime;my $remote_id = $ENV{REMOTE_HOST} || $ENV{REMOTE_ADDR};my $admin_email = $ENV{SERVER_ADMIN};

my $cgi = new CGI;my $pwd_not_alldiginal = "密码不能全为数字";my $pwd_not_allchar = "密码不能全为字符";my $user_not_exists ="该用户不存在";my $file_not_found ="文件不存在,请联系管理员";

my $authuserfile;my $logfile;my $pwdminlen;my $title;my $description;my $yourname;my $oldpwd;my $newpwd1;my $newpwd2;my $btn_change;my $btn_reset;

my $changepwdok;my $changepwdfailed;my $oldpwderror;my $passmustgreater;my $twopassnotmatched;my $entername;my $enterpwd;my $errorpwd;my $back;

&IniInfo;

if ($cgi -> param()){#8my $User = $cgi->param(‘UserName’);my $UserPwd = $cgi->param(‘OldPwd’);my $UserNewPwd = $cgi->param(‘NewPwd1’);my $MatchNewPwd = $cgi->param(‘NewPwd2’);

if (!$User) {&Writer_Log("Enter no user name"); &otherhtml($title,$entername,$back);}elsif (!$UserPwd ) {&Writer_Log("Enter no OldPasswd"); &otherhtml($title,$enterpwd,$back); }elsif (length($UserNewPwd)<$pwdminlen) {&Writer_Log("Password’s length must greater than".$pwdminlen); &otherhtml($title,$passmustgreater.$pwdminlen,$back);}elsif ($UserNewPwd =~/^\d+$/) {&Writer_Log("New Passwd isn’t all diginal"); &otherhtml($title,$pwd_not_alldiginal,$back);}elsif ($UserNewPwd =~/^[A-Za-z]+$/) {&Writer_Log("New Passwd isn’t all char"); &otherhtml($title,$pwd_not_allchar,$back);}elsif ($UserNewPwd ne $MatchNewPwd) {&Writer_Log("Two new passwords are not matched"); &otherhtml($title,$twopassnotmatched,$back);}else{if($authuserfile){#6open UserFile, "<$authuserfile" or die "打开文件失败:$!";while (<UserFile>) {#5 my $varstr=$_;

if($varstr =~/($User)/) {#3 my $eqpos =index($varstr, ":"); my $UserName = substr($varstr,0,$eqpos); my $cryptpwd = substr($varstr,$eqpos + 1,13); next if($UserName ne $User); if(crypt($UserPwd,$cryptpwd) eq $cryptpwd) {#a my $rc = system("/usr/bin/htpasswd -b $authuserfile $User $UserNewPwd"); if ($rc == 0) {#1 &Writer_Log( $User.":Change Passwd"); &otherhtml($title,$changepwdok,$back); }#1 else {#2 &Writer_Log( $User.":Change Passwd Failed"); &otherhtml($title,$changepwdfailed,$back); }#2 exit; }#a else {#b &Writer_Log("Old Passwd is Incorrect "); &otherhtml($title,$errorpwd,$back); }#b exit; }#3 else {#4 if(eof) { &Writer_Log($User.":no this user"); &otherhtml($title,$user_not_exists,$back); exit; } else {next;} }#4 }#5 close UserFile;}#6else{#7 &Writer_Log($authuserfile.":no found"); &otherhtml($title,$file_not_found,$back);}#7}}#8else{&Index_Html;}

sub IniInfo{my $inifile = "/var/www/cgi-bin/ChangePasswd.ini";open CGI_INI_FILE, "<$inifile" or die "打开文件失败:$!";;while (<CGI_INI_FILE>){my $eqpos =index($_,’=’);my $len = length($_);

if ($_ =~/authuserfile/){$authuserfile= substr($_, $eqpos + 1, $len – $eqpos -2);}elsif ($_ =~/logfile/){$logfile= substr($_, $eqpos + 1);}elsif ($_ =~/pwdminlen/){$pwdminlen= substr($_, $eqpos + 1);}elsif ($_ =~/title/){$title = substr($_, $eqpos + 1);}elsif ($_ =~/description/){$description = substr($_, $eqpos + 1);}elsif ($_ =~/yourname/){$yourname = substr($_, $eqpos + 1);}elsif ($_ =~/oldpwd/){$oldpwd= substr($_, $eqpos + 1);}elsif ($_ =~/newpwd1/){$newpwd1= substr($_, $eqpos + 1);}elsif ($_ =~/newpwd2/){$newpwd2= substr($_, $eqpos + 1);}elsif ($_ =~/btn_change/){$btn_change = substr($_, $eqpos + 1);}elsif ($_ =~/btn_reset/){$btn_reset = substr($_, $eqpos + 1);}elsif ($_ =~/changepwdok/){$changepwdok = substr($_, $eqpos + 1);}elsif ($_ =~/changepwdfailed/){$changepwdfailed = substr($_, $eqpos + 1);}elsif ($_ =~/oldpwderror/){$oldpwderror = substr($_, $eqpos + 1);}elsif ($_ =~/passmustgreater/){$passmustgreater = substr($_, $eqpos + 1);}elsif ($_ =~/twopassnotmatched/){$twopassnotmatched = substr($_, $eqpos + 1);}elsif ($_ =~/entername/){$entername = substr($_, $eqpos + 1);}elsif ($_ =~/enterpwd/){$enterpwd= substr($_, $eqpos + 1);}elsif ($_ =~/errorpwd/){$errorpwd= substr($_, $eqpos + 1);}elsif ($_ =~/back/){$back = substr($_, $eqpos + 1);}}close CGI_INI_FILE;}

sub Index_Html{print "Content-type: text/html\n\n";print <<END_OF_PAGE;<html ><head><title>$title</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body>

<HR><center><h1>$description</h1></center><form method="POST" enctype="multipart/form-data" action="/cgi-bin/ChangePasswd.cgi"><br><TABLE align="center"><TR><TD class="t_text">$yourname</TD><TD><input type="text" name="UserName" /></TD></TR><TR><TD class="t_text">$oldpwd</TD><TD><input type="password" name="OldPwd" /></TD></TR><TR><TD class="t_text">$newpwd1</TD><TD><input type="password" name="NewPwd1" /></TD></TR><TR><TD class="t_text">$newpwd2</TD><TD><input type="password" name="NewPwd2" /></TD></TR></TABLE><br><TABLE align="center"><TR><TD><input type="submit" name="chgpasswd" value="$btn_change"> <input type="reset" value="$btn_reset"></TD></TR></TABLE></form><HR><font color="#FF0000">注意:新密码位数必需大于$pwdminlen,且为字母与数字组合</font><P>如有问题请与DreamLee联系</P>

<P>北京安高科技网站:</P><P>公司主页:<a href=http://www.magnus.cn>http://www.magnus.cn</a></P>

</body></html>END_OF_PAGE}

sub otherhtml{print "Content-type: text/html\n\n";

print <<END_OF_PAGE;<html><head><meta http-equiv="Content-Language" content="zh-cn"><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>$_[0]</title></head>

<body><p align="center"><font size="5">$_[1]</font></p><p align="center"><a href="/cgi-bin/ChangePasswd.cgi"><font size="4">$_[2]</font></a></p>

<HR><P>如有问题请与DreamLee联系E-Mail: <A HREF="></body>

</html>END_OF_PAGE}

sub Writer_Log{if($logfile){my $loginfo ="[".$time."] "." [".$remote_id."] "." || ".$_[0];open LOGFILE,">>$logfile" or die "Couldn’t open LOG FILE for writing: $!";print LOGFILE ("$loginfo\n");close LOGFILE;}}

按以上的1-7步骤修改完成后即可通过远程web修改用户的密码了

测试登录:http://ip/cgi-bin/ChangePasswd.cgi

于是夜莺会在黎明到来之前勇敢的将胸膛顶住蔷薇的刺,

Linux下SVN远程web密码修改

相关文章:

你感兴趣的文章:

标签云: