ORF反垃圾邮件系统

邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 9412|回复: 0
打印 上一主题 下一主题

[转帖]如何列出vpopmail一个虚拟域下的所有用户

[复制链接]
跳转到指定楼层
顶楼
发表于 2004-7-17 13:32:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/* <br>
* vpopmail2txt jieer xjb@bjsing.net <br>
* URL: <a target=_blank href=http://bycd.bjsing.net/vpopmail2txt.c>http://bycd.bjsing.net/vpopmail2txt.c</a> <br>
*/ <br>
#include <stdio.h> <br>
#include <stdlib.h> <br>
#include <unistd.h> <br>
#include <string.h> <br>
#include <time.h> <br>
#include <pwd.h> <br>
#include <sys/types.h> <br>
#include <dirent.h> <br>
#include <sys/stat.h> <br>
#include "config.h" <br>
#include "vpopmail.h" <br>
#include "vauth.h" <br>
<br>
struct vqpasswd *vpwd = NULL; <br>
int conv_domain(char *); <br>
int main(int n, char *cmd[]) <br>
{ <br>
if (n < 2 || n > 2) { <br>
printf("vpopmail2txt [domainname|all]\n"); <br>
return 0; <br>
} <br>
if (strcasecmp(cmd[1], "all") == 0) { <br>
DIR *mydir; <br>
char domain[100]; <br>
struct dirent *mydirent; <br>
<br>
if (chdir(VPOPMAILDIR) != 0) { <br>
perror("vpopmail2txt: change dir to vpopmail home"); <br>
return (-1); <br>
} <br>
if (chdir(DOMAINS_DIR) != 0) { <br>
perror("vpopmail2txt: change dir to vpopmail home"); <br>
return (-1); <br>
} <br>
<br>
mydir = opendir("."); <br>
if (mydir == NULL) { <br>
perror("vpopmail2txt: opendir failed"); <br>
return (-1); <br>
} <br>
<br>
while ((mydirent = readdir(mydir)) != NULL) { <br>
if (strncmp(mydirent->d_name, ".", 1) == 0) <br>
continue; <br>
strncpy(domain, mydirent->d_name, 99); <br>
printf("converting %s \t\t---->", domain); <br>
if (conv_domain(domain) != 0) { <br>
printf("failed\n"); <br>
} else { <br>
printf("done\n"); <br>
} <br>
} <br>
closedir(mydir); <br>
<br>
} else <br>
conv_domain(cmd[1]); <br>
<br>
return 0; <br>
} <br>
int conv_domain(char *domain) <br>
{ <br>
FILE *fp; <br>
char buf[256]; <br>
<br>
vpwd = vauth_getall(domain, 1, 0); <br>
if (NULL == vpwd) { <br>
printf("empty", domain); <br>
return -1; <br>
} <br>
snprintf(buf, 255, "%s.txt%c", domain, 0); <br>
if ((fp = fopen(buf, "w")) == NULL) { <br>
printf("can not open %s\n", buf); <br>
return -2; <br>
} <br>
while (vpwd != NULL) { <br>
fprintf(fp,"%s@%s:%s%s:%s\n", vpwd->pw_name, domain, <br>
#ifdef CLEAR_PASS <br>
"", vpwd->pw_clear_passwd, <br>
#else <br>
"{crypt}", vpwd->pw_passwd, <br>
#endif <br>
vpwd->pw_gecos); <br>
vpwd = vauth_getall(domain, 0, 0); <br>
} <br>
fclose(fp); <br>
return 0; <br>
} <br>
<br>
<br>
gcc -O2 -I/home/vpopmail/include vpopmail2txt.c -o vpopmail2txt -L/home/vpopmail/lib -lvpopmail <br>
<br>
可能根据你的实际情况需要一些库,具体情况根据~vpopmail/etc下的inc_deps,lib_deps确定<br>
<br>
如果你用db来存储用户数据,就不用这个程序了~vpopmail/domains/mydomain/下边有这样的列表。
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2024-11-24 23:23

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表