- 论坛徽章:
- 1
|
qmailadmin+vpopmail+sqwebmail+mysql的filter的配置方法
今天又试了试deluser的脚本,不起作用。
又研究了一把,呵呵,原来qmailadmin有bug.
在源码包的qmailadmin*/user.c的函数call_hooks的这行
error = execl(cmd, Newu, Domain, Password1, Gecos, NULL);
这里明显有问题,execl的第二个参数是arg0,实际上不起作用。而Gecos是用户的真实
用户名,只有在新建的时候才有值,不填就是Newu,所以我以为用户名是$3.
但是moduser和deluser的时候,操作的用户名都不在Newu里面,而是在ActionUser里面。
所以hook中定义的deluser和moduser脚本取不到用户名.
所以需要将这行改为
if (Newu && *Newu) {
error = execl(cmd, cmd, Newu, Domain, Password1, Gecos, NULL);
} else {
error = execl(cmd, cmd, ActionUser, Domain, Password1, Gecos, NULL);
}
而且,如果要方便扩展的话,可以将op也放在execl的参数中,这样,hook中定义的
脚本就可以用一个。根据op类型来操作。就不像我这样分成好多脚本了。
所以user.c最终该过后,如下,call_hooks函数的fork附近:
setuid(0);
setgid(VPOPMAILGID);
setuid(VPOPMAILUID);
pid = fork();
#ifdef DEBUG
fprintf(actout,"Where the parameters are: %s, \"%s\", %s, %s, %s, %s, NULL);\n",
cmd, hooks[hook_type], Newu, Domain, Password1, Gecos);
#endif
if (pid == 0) {
// error = execl(cmd, Newu, Domain, Password1, Gecos, NULL);
if (Newu && *Newu) {
error = execl(cmd, cmd, Newu, Domain, Password1, Gecos, NULL);
} else {
error = execl(cmd, cmd, ActionUser, Domain, Password1, Gecos, NULL);
}
而inituser.sh和deluser也需要相应的改参数位置,我只贴上修改的头几行如下:
#!/bin/sh
User=$1
Domain=$2
Passwd=$3
RealName=$4
呵呵,看来unlease是有道理的亚 |
|