压缩中根下的functions.php serv-u.php是已经修改好的文件,可以直接替换。
**************************Serv-U用户验证插件 FOR Discuz! 1.0x *******************************************
第一部分:服务端安装步骤
1. MySQL数据库部分
a. 在mysql的discuz所用的数据库中建立如下的表结构:
CREATE TABLE ftpdauth (
ftpname varchar(50) NOT NULL default '',
password varchar(32) NOT NULL default '',
ownkey varchar(50) NOT NULL default '',
encryption varchar(16) NOT NULL default '',
address varchar(255) NOT NULL default '',
port varchar(10) NOT NULL default '21',
useext tinyint(1) unsigned NOT NULL default '1',
extpartition char(1) NOT NULL default '@',
usergroups varchar(40) NOT NULL default '6,7,8',
blacklist text NULL,
whitelist text NULL,
usernamepre varchar(20) NOT NULL default 'CCF_',
PRIMARY KEY (ftpname),
KEY encryption (encryption),
KEY address (address),
KEY ownkey (ownkey),
KEY password (password)
) TYPE=MyISAM PACK_KEYS=1 CHECKSUM=1;
b. 在数据库增加论坛的PrivateKEY
ftpname=PrivateKEY
password 在数据库保存为md5形式,如果使用phpmyadmin管理mysql的话,插入新纪录时值填明文,功能选择MD5
ownkey 随意,这个控制全部使用验证的ftp登陆密码
encryption=PrivateKEY
address=localhost,127.0.0.1
c. 为使用验证的FTP添加验证账号,也就是添加到 ftpdauth 这个表里面
ftpname=你自己填
password 在数据库保存为md5形式,如果使用phpmyadmin管理mysql的话,插入新纪录时值填明文,功能选择MD5
ownkey 随意,控制该ftp对ftp登陆密码的加密
encryption=Serv-U
address= 这个ftp的域名或者ip
port= 这个FTP的端口,对应于下面的authd.ini中的[General]部分的 端口=虚拟域名 中的端口
useext: 如果选择1,则表示使用扩展命名。0为不使用
extpartition: 扩展命名的分隔符
(解释一下什么是扩展命名:如果使用,登陆FTP的用户名是类似 CCFxxxx@ftpname ,其中 @ftpname 是扩展命名,@为分隔符号)
usergroups:什么组别的的论坛用户能够生成的列表,也就是控制了 用户.ini 里面的用户组
usernamepre:动态产生的用户名的前缀,与下面的authd.ini中的UserPattern=PUB*@test部分的PUB一致
2. 建立plugins/Serv-U.php
代表码如下:
/////////////////////////////////////////////////////////////////////////////////////////
<?
$u=isset($_POST['u'])?$_POST['u']:(isset($_GET['u'])?$_GET['u']:'forbidden');
$p=isset($_POST['p'])?$_POST['p']:(isset($_GET['p'])?$_GET['p']:'forbidden');
if ($u=='forbidden' || $p=='forbidden') exit;
class DB {
function connect($server,$user,$pass) {
$this->server=$server;
$this->user=$user;
$this->pass=$pass;
$this->link=mysql_connect($this->server,$this->user,$this->pass) or die(mysql_error());
return $this->link;
}
function select($db,$link) {
$this->link=$link;
mysql_select_db($db,$this->link);
}
function query($query,$link) {
$this->link=$link;
$this->id=mysql_query($query,$this->link) or die(mysql_error());
return $this->id;
}
function free($id) {
$this->id=$id;
mysql_free_result($this->id);
}
function fetch($id) {
$this->id=$id;
$row=mysql_fetch_array($this->id, MYSQL_BOTH);
return $row;
}
function num_rows($id) {
$this->id=$id;
$num=mysql_num_rows($this->id);
return $num;
}
function disconnect($link) {
$this->link=$link;
mysql_close($this->link);
}
}
require '../config.php';
$db = new DB;
$p=md5($p);
$link=$db->connect($dbhost, $dbuser, $dbpw);
$db->select($dbname,$link);
$table_members=$tablepre.'members';
$table_usergroups=$tablepre.'usergroups';
$q=$db->query("SELECT ftpname,ownkey,address,useext,extpartition,usergroups,usernamepre,blacklist,whitelist,count(ftpname) AS count FROM `ftpdauth` WHERE ftpname='$u' and password='$p' and encryption='Serv-U' GROUP BY ftpname",$link); //query the ftp owner's info
$r=$db->fetch($q);
$db->free($q);
if ($r['count']==1) {
$ip=split(',',$r['address']);
for ($i=0;$i<count($ip);$i++) {
$ip[$i]=gethostbyname($ip[$i]);
}
if (!in_array($_SERVER['REMOTE_ADDR'],$ip)) exit;
$q=$db->query("SELECT ownkey FROM ftpdauth WHERE ftpname='PrivateKEY' and encryption='PrivateKEY'",$link); //query the Private KEY
$rr=$db->fetch($q);
$db->free($q);
if ($r['useext']=='1') $ext=$r['extpartition'].$r['ftpname']; // check if need ext for ftp username
else $ext='';
$grp=str_replace(",", " or u.groupid=", $r['usergroups']); // gen the groups list
$grp='u.groupid='.$grp;
$queryext='';
if ($r['blacklist']!='') {
$temp=str_replace(",", " AND m.uid!=", $r['blacklist']); // gen the blacklist
$queryext=' AND ( '.'m.uid!='.$temp.' )';
}
if ($r['whitelist']!='') {
$temp=str_replace(",", " OR m.uid=", $r['whitelist']); // gen the blacklist
$queryext=$queryext.' OR ( '.'m.uid='.$temp.' )';
}
$mainsql='SELECT m.uid as userid, u.groupid as usergroupid,m.username,m.password FROM '.$table_members.' m LEFT JOIN '.$table_usergroups.' u ON u.specifiedusers LIKE \'%\tm.username\t%\' OR (u.status=m.status AND ((u.creditshigher=0 AND u.creditslower=0 AND u.specifiedusers=\'\') OR (m.credit>=u.creditshigher AND m.credit<u.creditslower)))';
if ($queryext!='') $sql=$mainsql.' WHERE ( '.$grp.' ) '.$queryext;
else $sql=$mainsql.' WHERE '.$grp;
$uq=$db->query($sql,$link);
echo "[users]\n";
while ($ur=$db->fetch($uq)) {
$user=$r['usernamepre'].$ur['userid'].$ext;
$pass=md5(md5($ur['password'].$ur['userid'].$rr['ownkey'].$r['ownkey'].$r['ftpname']));
echo $user.'='.$pass."\n";
}
echo "[end]\n";
$db->free($uq);
} else {
exit;
}
$db->disconnect($link);
?>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3. 修改functions.php (这里与2.0版的不同)
在文件最后增加如下代码:
//////////////////////////////////////////////////////////////////////////////////////////
function ftpdauthinfo($ftpname) {
global $table_usergroups,$table_members,$cdbuser;
if ($ftpname=='') {
return "<div class=qc2><b><font size=3 color=red>无此帐号信息</font></b></div>";
} elseif (!mysql_query("SELECT ftpname FROM ftpdauth WHERE ftpname='$ftpname'")) {
return "<div class=qc2><b><font size=3 color=red>无此帐号信息</font></b></div>";
} else {
$ftpq=mysql_query("SELECT ownkey,encryption,useext,extpartition,address,port,usergroups,usernamepre,blacklist,whitelist FROM ftpdauth WHERE ftpname='$ftpname'");
$ftpr=mysql_fetch_array($ftpq);
$grp=split(',',$ftpr['usergroups']);
$blk=split(',',$ftpr['blacklist']);
$whl=split(',',$ftpr['whitelist']);
$address=$ftpr['address'];
$port=$ftpr['port'];
$mainsql='SELECT m.uid as userid, u.groupid as usergroupid,m.username,m.password FROM '.$table_members.' m LEFT JOIN '.$table_usergroups.' u ON u.specifiedusers LIKE \'%\tm.username\t%\' OR (u.status=m.status AND ((u.creditshigher=0 AND u.creditslower=0 AND u.specifiedusers=\'\') OR (m.credit>=u.creditshigher AND m.credit<u.creditslower)))';
$sql=$mainsql.' where username=\''.$cdbuser.'\'';
$userinfo=mysql_query($sql);
$bbuserinfo=mysql_fetch_array($userinfo);
if ( (!in_array($bbuserinfo['usergroupid'],$grp)||in_array($bbuserinfo['userid'],$blk) )&&(!in_array($bbuserinfo['userid'],$whl)) ) {
return "<div class=qc2><b><font size=3 color=red>您无权查看该信息</font></b></div>";
} else {
$ftpp=mysql_query("SELECT ownkey FROM ftpdauth WHERE ftpname='PrivateKEY' and encryption='PrivateKEY'");
$ftprr=mysql_fetch_array($ftpp);
if ($ftpr['useext']=='1') $ext=$ftpr['extpartition'].$ftpname; // check if need ext for ftp username
else $ext='';
$ftpuser=$ftpr['usernamepre'].$bbuserinfo['userid'].$ext;
if ($ftpr['encryption']=='plaintext') {
$ftppass=md5(md5($bbuserinfo['password'].$bbuserinfo['userid'].$ftprr['ownkey'].$ftpr['ownkey'].$ftpname));
} else {
$ftppass=md5($bbuserinfo['password'].$bbuserinfo['userid'].$ftprr['ownkey'].$ftpr['ownkey'].$ftpname);
}
return "<div class=qc2><br><br><b><font size=3>地 址:</font></b> <b><font size=3 color=blue>$addre
没有合适的资源?快使用搜索试试~ 我知道了~
Serv-U用户验证插件 FOR Discuz! v1.0x
共6个文件
php:2个
rtf:1个
dll:1个
需积分: 50 76 下载量 153 浏览量
2004-08-19
18:37:31
上传
评论
收藏 82KB RAR 举报
温馨提示
Serv-U用户验证插件 FOR Discuz! v1.0x,内含详细的安装方法
资源推荐
资源详情
资源评论
收起资源包目录
20040819064154.rar (6个子文件)
Authd.FOR.Discuz!1.0x_Chztv
Authd.FOR.Discuz!1.0x_Chztv
functions.php 40KB
使用说明.txt 15KB
serv-u.php 3KB
authd
ServU用户验证插件使用说明.rtf 1.98MB
servu_ext.dll 36KB
authd.ini 861B
共 6 条
- 1
资源评论
xintc110
- 粉丝: 0
- 资源: 1953
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功