- 论坛徽章:
- 0
|
本帖最后由 东北胖子 于 2015-01-05 16:29 编辑
我们搭建了一个SVN服务器,想让员工自己修改SVN密码,于是使用了apache2.2与subversion 1.7.13集成。采用了如下脚本 来修改密码
每次修改密码都不成功,提示旧密码错误
我想是因为 apache2.2中的htpasswd生成的加密密码与perl crypt函数生成的密码不一样吧,不知道我判断的对不对。请大家帮忙
怎么样修改可以使 crypt函数生成的加密密码与 htpasswd生成的密码一样?
代码在 70行至93行之间
- #!/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())
- {#8
- my $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)
- {#6
- open 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/local/apache2/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;
- }#6
- else
- {#7
- &Writer_Log($authuserfile.":no found");
- &otherhtml($title,$file_not_found,$back);
- }#7
- }
- }#8
- else
- {&Index_Html;}
- sub IniInfo{
- my $inifile = "/usr/local/apache2/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>
- <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>如有問題請與唐風聯繫</P>
- <P>XXXXXX網站:</P>
- <P>公司主頁:<A href="http://www.XXXXX.com/</p">http://www.XXXXX.com/</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>如有問題請與windone聯繫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;
- }
- }
复制代码 |
|