- 浏览: 271047 次
- 来自: 广州
最新评论
-
cloudmail:
http://blog.csdn.net/zhang_red/ ...
awk合并行、linux shell 字符串操作、sed字符替换 -
cloudmail:
逐行读取文件时支持读取以空格开头的内容:IFS="& ...
awk合并行、linux shell 字符串操作、sed字符替换 -
cloudmail:
sina返回的结果:[{"url_short&quo ...
PHP调用t.cn新浪短网址服务API(JSON版) -
cloudmail:
http://www.dwz.cn/http://help.b ...
PHP调用t.cn新浪短网址服务API(JSON版) -
cloudmail:
for i in {1..2000}; do wget -O ...
PHP调用t.cn新浪短网址服务API(JSON版)
前阵儿公司内部配置好了subverion来做版代码管理,为了便于个人修改密码,所以网上找了很多关于自助修改密码的资料,结果发现很多都是针对windows版的,即使有针对linux版的,但还是有一些问题,不能直接拿来用,说明文字也比少。
下面是我自己用的配置文件,99%来源于网络,只有很少一点点是我根据自己的实际情况修改的。希望对大家有用。
需要俩个文件:
svnpass.ini
svnpass.cgi
svnpass.ini中的内容如下:
[path]
authuserfile=/opt/svn/svnuser
logfile=/opt/svn/changepwd.log
[setup]
pwdminlen=2
[html]
title=SVN用户密码自助修改
description=SVN用户密码自助修改
yourname=用户名
oldpwd=旧密码
newpwd1=新密码
newpwd2=确认新密码
btn_change=修 改
btn_reset=重 置
changepwdok=成功修改密码
changepwdfailed=修改密码失败
servererror=服务器错误
passmustgreater=新密码位数必须大于
twopassnotmatched=两密码不一致
entername=请输入用户名
enterpwd=密码未输入
errorpwd=你的密码不正确
back=返回
说明:
关键是红颜色是三行内容:
authuserfile=/opt/svn/svnuser :subversion用户与密码文件存放位置
logfile=/opt/svn/changepwd.log :修改密码的日志文件存放位置
pwdminlen=2 :密码的最小长度
以上三项,根据实际情况修改即可。
其他内容保持不变即可。
svnpass.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())
{#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("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 = "/var/www/cgi-bin/svnpass.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=utf-8" />
</head>
<body>
<center>
<HR>
<p>我的 SVN</P>
<P>主页:https://192.168.1.5/svn</p>
<font color="#FF0000">注意:新密码位数必需大于$pwdminlen,且为字母与数字组合</font>
<P></p>
</center>
<center><h1>$description</h1>
</center>
<form method="POST" enctype="multipart/form-data" action="/cgi-bin/svnpass.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>
<center>
<HR>
<p>如有问题请与管理员联系E-MAil:<A HREF="mailto:$admin_email">$admin_email</A>.</P>
</center>
</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=utf-8">
<title>$_[0]</title>
</head>
<body>
<p align="center"><font size="5">$_[1]</font></p>
<p align="center"><a href="/cgi-bin/svnpass.cgi"><font size="4">$_[2]</font></a></p>
<HR>
<P>如有问题请与管理员联系E-Mail: <A HREF="mailto:$admin_email">$admin_email</A>.</P>
</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;
}
}
说明:
同样需要注意三个红颜色的地方:
system("htpasswd -b $authuserfile $User $UserNewPwd"); :注意其中的命令htpasswd,与windows下的不同
/var/www/cgi-bin/svnpass.ini"; :配置文件的位置,就是上面的svnpass.ini位置
<a href="/cgi-bin/svnpass.cgi"> :cgi脚本的相对位置,很重要,一般就放在apache的cgi-bin目录即可
这样就可以通过url:https://192.168.1.5/cgi-bin/svnpass.cgi
这样的方式来修改密码了。当然,如果你的apache没有配置加密http的话,可以不需要https,而直接用http即可
转自: http://www.linuxidc.com/Linux/2011-01/31664.htm
发表评论
文章已被作者锁定,不允许评论。
-
使用dig查询dns解析
2017-03-06 17:22 0dig命令使用大全(linux上域名查询) Dig HOWT ... -
awk用法小结
2016-09-20 14:23 3522原文网址: http://www.cnblogs.com/ ... -
nginx内置预定义变量
2015-01-25 21:25 1019nginx的配置文件中可以使用的内置变量以美元符$开始,也有 ... -
awk合并行、linux shell 字符串操作、sed字符替换
2015-01-18 16:13 4250四行合一行 cat filename 111111 ... -
PHP调用t.cn新浪短网址服务API(JSON版)
2014-11-08 14:25 7911没什么好讲了,重要的地方我都在代码中注释了,主要是APP_ ... -
【转】How To Use Dropbox As An SVN Repository
2014-01-18 18:53 860How To Use Dropbox As An SVN R ... -
【转】时区简写及时间格式解析
2013-11-11 15:33 19744今天在解析CST时区时发现时间不对,原来使用的代码将CS ... -
C 语言执行 whois 查询
2013-06-28 11:09 1122http://www.binarytides.com/c-c ... -
在Redhat Linux上安装和使用subversion
2012-10-17 18:28 24081,安装: wget http://m ... -
【转】 使用 Bash 编写的 TCP 端口扫描器
2012-09-03 12:50 1346我突然有一个用 Bash 来编写 TCP 端口扫描器的想 ... -
Linux Shell实现"多进程"编程
2012-09-02 20:14 2395单进程模式代码: #!/bin/sh pl ... -
Perl使用Net::SMTP_auth认证发送邮件
2012-08-29 17:33 3167#!/usr/bin/perl -w # http:/ ... -
Perl使用Net::SMTP_auth认证发邮件
2012-08-29 17:28 1#!/usr/bin/perl -w # http: ... -
通过awk在Linux下打乱文件内容的顺序
2012-06-26 18:17 4930假设一个文件是已经排好序的,现随机抽取里面的部分。为了达到随机 ... -
EDM邮箱数据库设计
2012-06-13 18:06 29一,业务需求: 1) 分页获取某企业下的邮箱列表,按最 ... -
一步一步学PHP(1): Windows下配置Nginx + PHP开发环境
2012-05-21 23:22 26961,下载并安装nginx 1.1 下载地址:http://n ... -
MySQL导出指定表中的数据
2012-05-21 12:44 0MySQL导出指定表中的数据 要求: 1. ... -
用shell脚本实现递归创建目录
2012-05-09 17:19 6017用shell脚本实现递归创建目录,相当于mkdir -p /t ... -
ALPHA、BETA、RC、GA版本的区别
2012-05-08 13:04 1113Alpha:是内部测试版, ... -
在RHEL5 源码编译安装MySQL 5.5.23
2012-05-04 14:43 15191.安装前装备 1.1已经安装gcc(gcc-c++) ...
相关推荐
总之,搭建Linux下的Subversion服务器需要对Apache服务器的配置和Subversion的工作原理有深入理解。完成上述步骤后,团队成员即可通过网络方便地进行代码的版本控制和协作开发。在实际应用中,还需要考虑安全设置、...
### Linux 下 Subversion 快速配置指南 #### 一、简介 Subversion(SVN)是一种广泛使用的版本控制系统,主要用于代码或文档等项目的版本管理。本文将详细介绍如何在 Linux 环境下快速配置 SVN,并提供一套实用的...
本篇文章将详细讲解如何在VisualSVN Server 3.9.1版本中实现用户自助修改密码的功能,从而提高用户权限管理的效率。 首先,我们要理解VisualSVN Server的默认行为。在默认设置下,用户密码由管理员统一管理,用户...
Linux 下安装 Subversion Subversion 是一个版本控制系统,广泛应用于软件开发、文档管理等领域。为了在 Linux 环境下安装 Subversion,需要安装相关依赖包,包括 OpenSSL、zlib 和 Apache。 一、安装依赖包 1. ...
### Linux 下 Subversion Edge 的安装与配置 #### 一、安装前准备 1. **下载 CollabNet Subversion Edge** - 访问官方网站下载 Subversion Edge 的安装包。 - 官网链接:[http://www.collab.net/cn]...
在Linux环境下安装Subversion,需要准备以下组件: 1. **Subversion**:版本控制软件。 2. **BerkeleyDB**:用于存储版本库数据的数据库。 3. **Apache**:Web服务器,用于提供对版本库的HTTP访问。 #### 三、安装...
### Linux 下编译安装 Subversion 的详细步骤及配置 #### 一、编译安装 Subversion **背景介绍:** Subversion(简称SVN)是一种分布式版本控制系统,主要用于软件开发过程中的代码版本管理。在Linux环境下,如...
本文档主要介绍了如何在Linux系统中安装和配置Subversion服务器,以及如何使用Subversion客户端TortoiseSVN。Subversion是一个开源的版本控制系统,常用于替代存在诸多限制的CVS系统,以解决文件名修改、目录管理、...
linux下安装subversion所有依赖文件可离线(无网状态下)安装subversion依赖包包含apr apr-util scons python openssl zlib-devel sqlite subversion 安装方法参见:...
### Subversion在Linux下的安装与配置详解 #### 引言 Subversion,简称SVN,是一种免费开源的版本控制系统,广泛应用于软件开发项目中,用于管理代码版本、追踪更改历史和协同开发工作。本文旨在详细介绍如何在...
总结来说,"Linux + Apache + Subversion"的组合为开发团队提供了一个强大的版本控制系统,它允许团队成员安全地协作、追踪代码更改,并管理多个版本的项目。通过本文的步骤,你已经学会了如何在Linux环境中安装和...
在Linux环境下,Subversion(简称SVN)是一个强大的版本控制系统,常用于管理软件开发过程中的源代码和其他文件。本文档将详细介绍如何在Linux系统中安装、配置Subversion,并结合HTTPD服务实现HTTPS方式访问SVN仓库...
这款3.X版本的更新带来了更稳定和高效的服务,而"VisualSVN Server3.X自助修改密码补丁"则解决了用户在使用过程中遇到的一个关键问题——如何方便地更改用户密码。 在传统的SVN服务器管理中,如果用户忘记或需要...
【Subversion 在 Linux 下的安装与配置】 Subversion(简称 SVN)是一款强大的开源版本控制系统,它跟踪文件和目录的变化,管理文件的历史版本,允许用户在时间轴上回溯到任何特定版本。Subversion 可以作为Apache...
本篇文章将深入讲解如何在Linux环境中安装和配置Subversion 1.4.5版本。 首先,我们需要了解Subversion的基本概念。Subversion是一个集中式的版本控制系统,它维护着项目文件的历史版本,使得团队成员可以同时工作...
基于SUSE Linux Enterprise Server 11.3整理好的Linux版SVN工具subversion,版本1.8.11。安装后可以将虚拟机映射到win上直接使用。
- **分支和合并**:Subversion支持创建分支,允许团队成员独立工作,然后将更改合并回主分支。 - **标签**:用于标记项目的重要状态,如发布版本。 - **修订版本**:每个提交都会创建一个新的修订版本,记录文件和...
在SVN3.9.4版本中,引入了用户自助修改密码的功能,这为团队协作提供了更多的便利,尤其对于大型项目,减少了管理员的工作负担,提高了用户的安全性和自主性。 在之前的版本中,如果SVN用户忘记或需要更改密码,...
本篇文章将详细讲解如何在Windows 10系统上利用VisualSVN实现用户自助修改密码的功能。 首先,我们需要理解的是VisualSVN本身并不直接提供用户修改密码的Web接口。通常,SVN服务器的用户认证是通过Apache ...