Attached is a patch that allows you to customize the quota-warning from and subject by adding two aditional control files:
quotafrom quotasub -- Jose Celestino <[EMAIL PROTECTED]> SysAdmin::SAPO.pt http://www.sapo.pt ----------------------------------------------------- "Lately, the only thing keeping me from becoming a serial killer is my distaste for manual labor." -- Dilbert
diff -N -c -r qmail-1.03/Makefile qmail-1.03.japc/Makefile *** qmail-1.03/Makefile 2002-10-19 17:27:20.000000000 +0100 --- qmail-1.03.japc/Makefile 2002-10-19 17:37:45.000000000 +0100 *************** *** 1712,1718 **** ./load qmail-quotawarn newfield.o now.o date822fmt.o case.a \ fd.a wait.a open.a myctime.o case.a getln.a sig.a open.a seek.a \ lock.a datetime.a env.a stralloc.a alloc.a strerr.a substdio.a \ ! error.a str.a fs.a qmail-quotawarn.o: \ compile qmail-quotawarn.c readwrite.h sig.h byte.h case.h datetime.h \ --- 1712,1718 ---- ./load qmail-quotawarn newfield.o now.o date822fmt.o case.a \ fd.a wait.a open.a myctime.o case.a getln.a sig.a open.a seek.a \ lock.a datetime.a env.a stralloc.a alloc.a strerr.a substdio.a \ ! error.a str.a fs.a auto_qmail.o control.o scan_ulong.o qmail-quotawarn.o: \ compile qmail-quotawarn.c readwrite.h sig.h byte.h case.h datetime.h \ diff -N -c -r qmail-1.03/qmail-quotawarn.c qmail-1.03.japc/qmail-quotawarn.c *** qmail-1.03/qmail-quotawarn.c 2002-10-19 17:27:20.000000000 +0100 --- qmail-1.03.japc/qmail-quotawarn.c 2002-10-19 17:36:04.000000000 +0100 *************** *** 24,29 **** --- 24,31 ---- #include "myctime.h" #include "qmail-ldap.h" #include "date822fmt.h" + #include "control.h" + #include "auto_qmail.h" /* global vars */ stralloc warning={0}; *************** *** 140,145 **** --- 142,150 ---- struct datetime dt; struct stat st; substdio ssout; + stralloc quotafrom = {0}; + stralloc quotasub = {0}; + stralloc controls = {0}; sig_alarmcatch(sigalrm); if (chdir(fn) == -1) { *************** *** 149,155 **** } check_maildir(); ! /* set To: From: Delivered-to: Return-Path: UFLINE Date: Message-ID: */ if (! (t = env_get("RECIPIENT") ) ) strerr_die1x(111,"ARRG: RECIPIENT not present (LDAP-ERR #5.1.2)"); --- 154,177 ---- } check_maildir(); ! ! if (!stralloc_copys(&controls,auto_qmail)) temp_nomem(); ! if (!stralloc_cats(&controls,"/control/quotafrom")) temp_nomem(); ! if (!stralloc_0(&controls)) temp_nomem(); ! ! if (control_readline("afrom,controls.s) != 1) { ! if (!stralloc_copys("afrom,"Qmail-QUOTAGUARD <MAILER-DAEMON@")) temp_nomem(); ! if (!stralloc_cat("afrom,&host)) temp_nomem(); ! if (!stralloc_cats("afrom,">\n")) temp_nomem(); ! } ! ! if (!stralloc_copys(&controls,auto_qmail)) temp_nomem(); ! if (!stralloc_cats(&controls,"/control/quotasub")) temp_nomem(); ! if (!stralloc_0(&controls)) temp_nomem(); ! ! if (control_readline("asub,controls.s) != 1) ! if (!stralloc_copys("asub,"QUOTA-WARNING!")) temp_nomem(); ! /* set To: From: Delivered-to: Return-Path: UFLINE Date: Message-ID: */ if (! (t = env_get("RECIPIENT") ) ) strerr_die1x(111,"ARRG: RECIPIENT not present (LDAP-ERR #5.1.2)"); *************** *** 157,165 **** if (!stralloc_cats(&to,t)) temp_nomem(); if (!stralloc_cats(&to,"\n")) temp_nomem(); ! if (!stralloc_copys(&from,"From: Qmail-QUOTAGUARD <MAILER-DAEMON@")) temp_nomem(); ! if (!stralloc_cat(&from,&host)) temp_nomem(); ! if (!stralloc_cats(&from,">\n")) temp_nomem(); if (! (t = env_get("DTLINE") ) ) strerr_die1x(111,"ARRG: DTLINE not present (LDAP-ERR #5.1.4)"); --- 179,187 ---- if (!stralloc_cats(&to,t)) temp_nomem(); if (!stralloc_cats(&to,"\n")) temp_nomem(); ! if (!stralloc_copys(&from,"From: ")) temp_nomem(); ! if (!stralloc_cat(&from,"afrom)) temp_nomem(); ! if (!stralloc_cats(&from,"\n")) temp_nomem(); if (! (t = env_get("DTLINE") ) ) strerr_die1x(111,"ARRG: DTLINE not present (LDAP-ERR #5.1.4)"); *************** *** 211,217 **** /* To: From: and Subject: */ if (substdio_put(&ssout,to.s,to.len)) goto fail; if (substdio_put(&ssout,from.s,from.len)) goto fail; ! if (substdio_puts(&ssout,"Subject: QUOTA-WARNING!\n")) goto fail; /* don't forget the single \n */ if (substdio_puts(&ssout,"\n")) goto fail; /* the Warning */ --- 233,241 ---- /* To: From: and Subject: */ if (substdio_put(&ssout,to.s,to.len)) goto fail; if (substdio_put(&ssout,from.s,from.len)) goto fail; ! if (substdio_puts(&ssout,"Subject: ")) goto fail; ! if (substdio_put(&ssout,quotasub.s,quotasub.len)) goto fail; ! if (substdio_puts(&ssout,"\n")) goto fail; /* don't forget the single \n */ if (substdio_puts(&ssout,"\n")) goto fail; /* the Warning */ *************** *** 281,286 **** --- 305,330 ---- char *t; datetime_sec starttime; struct datetime dt; + stralloc quotafrom = {0}; + stralloc quotasub = {0}; + stralloc controls = {0}; + + if (!stralloc_copys(&controls,auto_qmail)) temp_nomem(); + if (!stralloc_cats(&controls,"/control/quotafrom")) temp_nomem(); + if (!stralloc_0(&controls)) temp_nomem(); + + if (control_readline("afrom,controls.s) != 1) { + if (!stralloc_copys("afrom,"Qmail-QUOTAGUARD <MAILER-DAEMON@")) +temp_nomem(); + if (!stralloc_cat("afrom,&host)) temp_nomem(); + if (!stralloc_cats("afrom,">\n")) temp_nomem(); + } + + if (!stralloc_copys(&controls,auto_qmail)) temp_nomem(); + if (!stralloc_cats(&controls,"/control/quotasub")) temp_nomem(); + if (!stralloc_0(&controls)) temp_nomem(); + + if (control_readline("asub,controls.s) != 1) + if (!stralloc_copys("asub,"QUOTA-WARNING!")) temp_nomem(); /* set To: From: Delivered-to: Return-Path: UFLINE Date: Message-ID: */ if (! (t = env_get("RECIPIENT") ) ) *************** *** 289,297 **** if (!stralloc_cats(&to,t)) temp_nomem(); if (!stralloc_cats(&to,"\n")) temp_nomem(); ! if (!stralloc_copys(&from,"From: Qmail-QUOTAGUARD <MAILER-DAEMON@")) temp_nomem(); ! if (!stralloc_cat(&from,&host)) temp_nomem(); ! if (!stralloc_cats(&from,">\n")) temp_nomem(); if (! (t = env_get("DTLINE") ) ) strerr_die1x(111,"ARRG: DTLINE not present (LDAP-ERR #5.1.4)"); --- 333,341 ---- if (!stralloc_cats(&to,t)) temp_nomem(); if (!stralloc_cats(&to,"\n")) temp_nomem(); ! if (!stralloc_copys(&from,"From: ")) temp_nomem(); ! if (!stralloc_cat(&from,"afrom)) temp_nomem(); ! if (!stralloc_cats(&from,"\n")) temp_nomem(); if (! (t = env_get("DTLINE") ) ) strerr_die1x(111,"ARRG: DTLINE not present (LDAP-ERR #5.1.4)"); *************** *** 300,306 **** if (!stralloc_copys(&rpline,"Return-Path: <>\n")) temp_nomem(); if (!stralloc_copys(&ufline,"From ")) temp_nomem(); ! if (!stralloc_cats(&ufline,"MAILER-DAEMON")) temp_nomem(); if (!stralloc_cats(&ufline," ")) temp_nomem(); starttime = now(); datetime_tai(&dt,starttime); --- 344,350 ---- if (!stralloc_copys(&rpline,"Return-Path: <>\n")) temp_nomem(); if (!stralloc_copys(&ufline,"From ")) temp_nomem(); ! if (!stralloc_copy(&ufline,"afrom)) temp_nomem(); if (!stralloc_cats(&ufline," ")) temp_nomem(); starttime = now(); datetime_tai(&dt,starttime); *************** *** 340,346 **** /* To: From: and Subject: */ if (substdio_put(&ssout,to.s,to.len)) goto writeerrs; if (substdio_put(&ssout,from.s,from.len)) goto writeerrs; ! if (substdio_puts(&ssout,"Subject: QUOTA-WARNING!\n")) goto writeerrs; /* don't forget the single \n */ if (substdio_puts(&ssout,"\n")) goto writeerrs; /* the Warning */ --- 384,392 ---- /* To: From: and Subject: */ if (substdio_put(&ssout,to.s,to.len)) goto writeerrs; if (substdio_put(&ssout,from.s,from.len)) goto writeerrs; ! if (substdio_puts(&ssout,"Subject: ")) goto writeerrs; ! if (substdio_put(&ssout,quotasub.s,quotasub.len)) goto writeerrs; ! if (substdio_puts(&ssout,"\n")) goto writeerrs; /* don't forget the single \n */ if (substdio_puts(&ssout,"\n")) goto writeerrs; /* the Warning */ diff -N -c -r qmail-1.03/qmail-showctl.c qmail-1.03.japc/qmail-showctl.c *** qmail-1.03/qmail-showctl.c 2002-10-19 17:27:20.000000000 +0100 --- qmail-1.03.japc/qmail-showctl.c 2002-10-19 17:30:03.000000000 +0100 *************** *** 294,299 **** --- 294,302 ---- do_lst("ldapclusterhosts","No alternate MailHosts for clustering listed.", "Alternate MailHosts for clustering: ", ""); do_lst("quotawarning","No quotawarning.","",""); + do_str("quotafrom",0,"'Qmail-QUOTAGUARD <MAILER-DAEMON@HOST'","From when sending +quota warnings is "); + do_str("quotasub",0,"'QUOTA-WARNING!'","Subject when sending quota warnings is "); + do_lst("custombouncetext","No custombouncetext.","",""); do_int("maxrcptcount","0",""," RCPT TOs are accepted before sending 553 (0 = off)"); do_int("tarpitcount","0",""," RCPT TOs are accepted before tarpitting (0 = off)"); *************** *** 353,358 **** --- 356,363 ---- if (str_equal(d->d_name,"ldapgid")) continue; if (str_equal(d->d_name,"custombouncetext")) continue; if (str_equal(d->d_name,"quotawarning")) continue; + if (str_equal(d->d_name,"quotafrom")) continue; + if (str_equal(d->d_name,"quotasub")) continue; if (str_equal(d->d_name,"tarpitcount")) continue; if (str_equal(d->d_name,"tarpitdelay")) continue; if (str_equal(d->d_name,"badrcptto")) continue;