针对一些虚拟主机管理软件 的确应该去深入了解 :)
下面是以Serv-U 6.0和Sql Server 2000相结合的演示。
建表Sql 语句:
CREATE TABLE [groupaccounts] (
[id] int IDENTITY (1,1) PRIMARY KEY,
[Index] int Default 0,
[Name] nVarChar(50) default '''''''',
[Notes] nVarChar(255) default ''''''''
)
CREATE INDEX [Name] on [groupaccounts]([Name] )
CREATE TABLE [groupdiraccess] (
[id] int IDENTITY PRIMARY KEY,
[Access] nVarChar(255) default '''''''',
[Index] int Default 0,
[Name] nVarChar(50) default ''''''''
)
CREATE INDEX [Name] on [groupdiraccess]([Name] )
CREATE TABLE [groupipaccess] (
[id] int IDENTITY PRIMARY KEY,
[Access] nVarChar(255) default '''''''',
[Index] int Default 0,
[Name] nVarChar(50) default ''''''''
)
CREATE INDEX [Name] on [groupipaccess]([Name] )
CREATE TABLE [useraccounts] (
[id] int IDENTITY PRIMARY KEY,
[Access] nVarChar(255) default '''''''',
[AlwaysLogin] int Default 0,
[ChangePass] int Default 0,
[Disable] int Default 0,
[Expirationtype] int Default 0,
[Expiration] datetime Default ''''1980-1-1'''',
[Groups] nVarChar(50) default '''''''',
[HideHidden] int Default 0,
[HomeDir] nVarChar(100) default '''''''',
[idleTimeOut] int Default 0,
[LogMesfile] nVarChar(100) default '''''''',
[MaxIp] int Default -1,
[MaxSpeedDown] decimal Default 0,
[MaxSpeedUp] decimal Default 0,
[MaxUsers] int Default -1,
[Name] nVarChar(50) default '''''''',
[Needsecure] int Default 0,
[Notes] nVarChar(255) default '''''''',
[PassType] int Default 0,
[Password] nVarChar(50) default '''''''',
[Privilege] int Default 0,
[QuotaCurrent] decimal Default 0,
[QuotaEnable] int Default 0,
[QuotaMax] decimal Default 0,
[RatioCredit] decimal Default 0,
[RatioDown] int Default 0,
[RatioType] int Default 0,
[RatioUP] int Default 0,
[RelPaths] int Default 0,
[SessionTimeOut] int Default 0,
[SkeyValues] nVarChar(50) default ''''''''
)
CREATE INDEX [Name] on [useraccounts]([Name] )
CREATE TABLE [userdiraccess] (
[id] int IDENTITY PRIMARY KEY,
[Access] nVarChar(255) default '''''''',
[Index] int Default 0,
[Name] nVarChar(50) default ''''''''
)
CREATE INDEX [Name] on [userdiraccess]([Name] )
CREATE TABLE [useripaccess] (
[id] int IDENTITY PRIMARY KEY,
[Access] nVarChar(255) default '''''''',
[Index] int Default 0,
[Name] nVarChar(50) default ''''''''
)
CREATE INDEX [Name] on [useripaccess]([Name] )
ServUDaemon.ini中的ODBC信息:
ODBCSource=Serv-U
ODBCTables=useraccounts groupaccounts userdiraccess groupdiraccess useripaccess groupipaccess
ODBCColumns=Name Password SkeyValues HomeDir LogMesfile Access Disable Needsecure RelPaths HideHidden AlwaysLogin ChangePass QuotaEnable MaxIp MaxSpeedUp MaxSpeedDown MaxUsers idleTimeOut SessionTimeOut RatioUP RatioDown RatioCredit QuotaCurrent QuotaMax Expiration Privilege PassType RatioType Groups Notes Index
加密算法为随机码与MD5 32 位加密, 例如:
两个随机字母:ab
用户输入密码:123456
生成的密码为:ab + MD5(ab123456)
提示:代码仅实现更改密码的功能, 并不一定完全符合或达到您的需求。
<!--#include file=''''conn.asp''''-->
<!--#include file=''''include/md5.asp''''-->
<%
dim act,UserName,OldPassword,NewPassword,reNewPassword
act = Request.form("act")
if act = "update" then
UserName = Request.form("UserName")
OldPassword = Request.form("OldPassword")
NewPassword = Request.form("NewPassword")
reNewPassword = Request.form("reNewPassword")
UserName = Replace(UserName,"''''","''''")
if len(UserName)<1 or len(OldPassword)<1 or len(NewPassword)<1 or len(reNewPassword)<1 then
alert("表单没有填写完整")
end if
if trim(NewPassword)<>trim(reNewPassword) then
alert("密码与确认密码不一样")
end if
Sql0 = "select top 1 name,[password] from [useraccounts] where name = ''''"& UserName &"''''"
set rs0 = conn.execute(Sql0)
if rs0.eof and rs0.bof then
alert("用户名不存在")
else
dbname = rs0("name")
dbpassword = rs0("password")
end if
cdbpassword = left(dbpassword,2) & md5(left(dbpassword,2) & OldPassword)
if trim(cdbpassword) <> trim(dbpassword) then
alert("密码错误")
else
rndstr = MyRandc(2) ''''两位随机字母
newdbpassword = rndstr & md5(rndstr & NewPassword)
sql2 = "update [useraccounts] set [password] = ''''"& newdbpassword &"'''' where name=''''"& UserName &"''''"
conn.execute(sql2)
alert("密码已经更改, 可能要几钟后才能生效")
end if
end if
function alert(x)
response.write "<script language=''''JavaScript''''>alert(''''"& replace(x,"""","\""") &"'''');history.go(-1);</script>"
conn.close
set conn = nothing
response.end
end function
function MyRandc(n)''''生成随机字符, n为字符的个数
thechr = ""
for i=1 to n
Randomize timer
zNum = cint(25*Rnd)
if zNum mod 2 = 0 then
zNum = zNum + 97
else
zNum = zNum + 65
end if
thechr = thechr & chr(zNum)
next
MyRandc = thechr
end function
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META NAME="Author" CONTENT="海娃(51windows)">
<META NAME="Keywords" CONTENT="windows.net/" target=_blank>http://www.51windows.Net">
<title>更改FTP (Serv-U) 密码 - 51windows.net</title>
</head>
<body>
<form method="POST" action="" name="form" autocomplete="off">
<input type="hidden" name="act" value="update">
<div align="center">
<center>
<table border="0" width="480" cellpadding="2" cellspacing="1" class="table" style="border: 1 solid #336699;font-size:14px;">
<tr>
<td width="100%" align="center" colspan="2" class="title" style="background:#336699;color:#FFFFFF;">更改FTP (Serv-U) 密码</td>
</tr>
<tr>
<td width="30%" align="left"> 用户名[√]:
u无垠育I\h网D供i5d[I
e8A^qO]6`_vH
</td>
<td width="70%"><input class="input" type="text" maxlength=20 name="UserName" size="25" value="" /> (FTP登陆用户名)</td>
</tr>
<tr>
<td width="30%" align="left"> 旧密码[√]:
MSu)A#wEigy\@zK
</td>
<td width="70%"><input class="input" type="password" maxlength=20 name="OldPassword" size="25" value="" /> (必须输入旧密码)</td>
</tr>
<tr>
<td width="30%" align="left"> 新密码[√]:
业2网z?中t]业s网:
</td>
<td width="70%"><input class="input" type="password" name="NewPassword" size="25" value="" /> (输入新密码)</td>
</tr>
<tr>
<td width="30%" align="left"> 确 认[√]:</td>
<td width="70%"><input class="input" type="password" name="reNewPassword" size="25" value="" /> (再次输入新密码)</td>
</tr>
<tr>
<td width="100%" height="30" align="center" colspan="2"><input style="font-size:14px;" type="submit" size="10" value="确 定" class=button></td>
</tr>
</table>
</center>
</div>
</html>
<%
set rs = nothing
conn.close
set conn = nothing
%>
……