免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: nsinit
打印 上一主题 下一主题

[Mail] 关于vpopmail的domain disk quota限制 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-09-10 14:20 |只看该作者

关于vpopmail的domain disk quota限制

原帖由 "jtzhao" 发表:
我的邮件系统可以防止用户超过QUOTA ,一旦超过,用户就无法收到邮件,但在用户邮箱大小达90%却不提示?
如何实现提示,请大家指正。


我的环境如下:
REDHAT   AS3
vpopMAIL  5.4.5
QMAILAdmin 1.2.1


我看了下vpopmail5.4.4的代码, 做了一下实验, 这个功能是OK的。


自test@qmailcn.org给ylei@qmailcn.org发送邮件时如果该用户当前邮箱已使用的比率大于90%, 则调用
deliver_quota_warning(), 其中参数address格式为"/home/vpopmail/domains/qmailcn.org/ylei/Maildir/",
quota格式为"1048576S", S表示以字节计数.
            
deliver_quota_warning:
        1) 检查/home/vpopmail/domains/qmailcn.org/目录下是否存在.quotawarn.msg文件
        2) 检查/home/vpopmail/domains/下是否存在.quotawarn.msg文件
       
        如果都不存在则直接退出.
       
        否则继续如下操作:
        1) 如果文件/home/vpopmail/domains/qmailcn.org/ylei/Maildir/quotawarn存在, 且上次mtime是在
           24小时之内, 直接退出(警告邮件只在24小时之后才构造并发送给ylei@qmailcn.org); 不存在则生
           成该文件. 该文件的作用是作为一个计时器.
        2) 生成文件/home/vpopmail/domains/qmailcn.org/ylei/Maildir/tmp/1094794204.6861.localhost.localdomain,S=24
           在目录new生成一个同名的soft linkage
        3) 调用add_warningsize_to_quota(dir,q).
       
        警告邮件内容如下:
Return-Path: <test@qmailcn.org>;
Delivered-To: ylei@qmailcn.org
Date: Fri, 10 Sep 2004 05:38:42 +0000      --->; vpopmail构造的内容
quota warnning message.        --->; .quotawarn.msg的内容


小心构造.quotawarn.msg文件内容, 避免quota warnning邮件被做为垃圾.  chengzhiqiang给出的例子IS OK。

to xiaohua: 应该不是个BUG吧?还请明示。

论坛徽章:
0
12 [报告]
发表于 2004-09-10 14:37 |只看该作者

关于vpopmail的domain disk quota限制

nsinit, 你研究的很深入了。

论坛徽章:
0
13 [报告]
发表于 2004-09-10 15:56 |只看该作者

关于vpopmail的domain disk quota限制

to:nsinit  

你这个版本我没用过,现在不敢说。不过5.4.3以下的都好象有这个问题。这个问题我实在 是表达不清。如果在电话里说可能会好些

论坛徽章:
0
14 [报告]
发表于 2004-09-10 17:47 |只看该作者

关于vpopmail的domain disk quota限制

原帖由 "思一克" 发表:
nsinit,  我知道CHKUSER是做那个的。但他做的不好(我自己觉得),他调VPOPMAIL库,将QMAIL-STMPD从40K搞到了100K。因此我自己实现了一个。

我指的是有个PATCH (bundle), CHKUSER为主,里面有quota patch. 如果找..........


你特定的系统当然可以自己写程序实现检查RCPT用户是否合法了,但是VPOPMAIL要兼顾多个后台数据库,当然会复杂一些。
我以前也用MYSQL API写过一个包含类似功能的SO。

你提的这个qmail-toaster-0.6-1.patch.bz2, 我下载看了一下,
里面不包含CHKUSER PATCH。

下载地址: http://shupp.org/patches/qmail-toaster-0.6-1.patch.bz2

qmail-toaster-0.6-1.patch.bz2中包含的http://shupp.org/patches/qmail-maildir++-universal.patch
        使qmail-pop3d和qmail-local支持Maildir++协议, 以实现maildirquota.


VPOPMAIL中maildirquota的实现估计就使COPY的这个MAILDIR++ PATCH的代码,没仔细比较过。

论坛徽章:
0
15 [报告]
发表于 2004-09-10 22:36 |只看该作者

关于vpopmail的domain disk quota限制

to: nsinit, 哈哈, 你我所见略同呀.

不过.我用一个小TRICK,无论VPOPMAIL用什么STORE信息(CDB, MYSQL.... 所有)均可checkuser.

论坛徽章:
0
16 [报告]
发表于 2004-09-13 09:32 |只看该作者

关于vpopmail的domain disk quota限制

原帖由 "思一克" 发表:
to: nsinit, 哈哈, 你我所见略同呀.

不过.我用一个小TRICK,无论VPOPMAIL用什么STORE信息(CDB, MYSQL.... 所有)均可checkuser.


什么小技巧?我认为你如果想做到对BACKEND DATABASE完全透明,
不使用VPOPMAIL提供的库是不可能的,除非你自己把VPOPMAIL的
DB操作部分剥离出来写成一个自己的DB API,可以支持多种BACKEND
DATABASE。

论坛徽章:
0
17 [报告]
发表于 2004-09-13 09:37 |只看该作者

关于vpopmail的domain disk quota限制

你说的对。这样的,QMAIL-SMTP对每个RCPTTO 调用vchkpw (假验证),就可以得到用户是否存在。

对vchkpw要加3行代码改动。

论坛徽章:
0
18 [报告]
发表于 2004-11-26 00:45 |只看该作者

关于vpopmail的domain disk quota限制

原帖由 "nsinit" 发表:
'\0';
>;           totalquota += atoi(newquota);
>;           free(newquota);
>;       }
>;
>;       // 配置文件中domain disk quota以Mbytes计数
>;       if ((totalquota + curquota)/..........


不好意思,问一个很菜的问题。
diff 两个文件显示的结果的代码(如:481a486,521 )是什么意思?能不能详细点?不胜感激 !


diff vpopmail.h vpopmail.h.mod
diff vpopmail.c vpopmail.c.mod

对vpopmail.h的修改:
109c109
< int vadduser( char *, char *, char *, char *, int);
---
>; int vadduser( char *, char *, char *, char *, int, char*);


对vpopmail.c的修改:
437c437
< int apop )
---
>; int apop , char* userquota)
445a446,449
>; char* newquota = NULL;
>; struct vqpasswd* mypw = NULL;
>; int curquota = 0, totalquota = 0;
>; int first = 1, len = 0;
481a486,521
>; // 如果该域指定了domain disk quota, 才对增加用户时的用户quota做限制.
>; if (limits.diskquota != 0)
>; {
>; if (userquota != NULL)
>; { // 即使是postmaster也不能NOQUOTA
>; if (strcmp(userquota, "NOQUOTA" == 0)
>; {
>; printf("can't set NOQUOTA, domain disk quota: %dM\n", limits.diskquota);
>; return(VA_NULL_POINTER);
>; } else {
>; curquota = atoi(userquota);
>; }
>; }
>; // 获取域的当前所有用户的quota之和(以字节计数)
>; while ((mypw = vauth_getall(domain, first, 1)) != NULL)
>; {
>; first = 0;
>; len = strlen(mypw->;pw_shell);
>; newquota = (char *)malloc(len+1);
>; if (!newquota)
>; return(VA_NULL_POINTER);
>; memcpy(newquota, mypw->;pw_shell, len);
>; newquota[len-1] = '\0';
>; totalquota += atoi(newquota);
>; free(newquota);
>; }
>;
>; // 配置文件中domain disk quota以Mbytes计数
>; if ((totalquota + curquota)/1024/1024 >; limits.diskquota)
>; {
>; printf("over domain disk quota: %dM\n", limits.diskquota);
>; return(VA_NULL_POINTER);
>; }
>; }
>;
>;
1562a1603
>; printf("quota: %s; formattedquota: %s\n", quota, formattedquota);

论坛徽章:
0
19 [报告]
发表于 2004-11-26 11:59 |只看该作者

关于vpopmail的domain disk quota限制

UP UP ,怎么没人回我??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP