[安恒原创] 转载请注明出处
vpopmail有*个密码自学习功能,就是在建立信箱时,密码设为空,就会从客户端学习密码,也就是第*个pop3连上来的密码,会被纪录并在以后的认证中使用。
可以通过察看vpasswd文件来看到这个过程。
在编译vpopmail时通过 --enable-learn-passwords=y 来打开这个功能。
遗憾的是这个功能只能在新建邮件账号时使用,在修改密码时不能用。
http://www.anheng.com.cn/news/15/378.html
我修改了*下源代码,是vpopmail在修改密码时也可以开启密码学习功能,大大方便了网管员.需要修改2个文件,给vpasswd命令增加了1个命令行参数 -n 空密码
下面是patch,在vpopmail源代码目录下执行patch <nulpasswd.patch
=====================nulpasswd.patch
diff -u ../vpopmail-5.4.5/vpasswd.c ./vpasswd.c
--- ../vpopmail-5.4.5/vpasswd.c 2003-10-08 05:16:40.000000 +0800
+++ ./vpasswd.c 2004-09-09 08:58:01.000000000 +0800
@@ -39,6 +39,8 @@
char Passwd[MAX_BUFF];
int apop;
int RandomPw;
+int NoPassword=0;
+
void usage();
void get_options(int argc,char **argv);
@@ -54,7 +56,8 @@
vexit(i);
}
- if ( strlen(Passwd) <= 0 ) {
+ if (( strlen(Passwd)) <= 0 && (NoPassword==0)) {
+
snprintf(Passwd, sizeof(Passwd), "%s", vgetpasswd(Email));
}
@@ -72,6 +75,7 @@
printf("vpasswd: usage: [options] email_address [password]\n");
printf("options: -v (print version number)\n");
printf(" -r generate a random password\n");
+ printf(" -n no_password\n");
}
void get_options(int argc,char **argv)
@@ -87,7 +91,7 @@
RandomPw = 0;
errflag = 0;
- while( !errflag && (c=getopt(argc,argv,"vr")) != -1 ) {
+ while( !errflag && (c=getopt(argc,argv,"vrn")) != -1 ) {
switch(c) {
case 'v':
printf("version: %s\n", VERSION);
@@ -96,6 +100,11 @@
RandomPw = 1;
vrandom_pass (Passwd, 8);
break;
+ case 'n':
+ memset(Passwd, 0, sizeof(Passwd));
+ NoPassword = 1;
+ break;
;==========================over