We get a lot of our users replying to the quota warning message. The
following patch adds a control file to qmail-ldap that allows the local site
to specify a From address for the warning message so that replies can go to
an address where they've got a better chance of getting help. This should
patch cleanly against 20011101a.
john
diff -urN qmail-1.03.stock/QLDAPINSTALL qmail-1.03/QLDAPINSTALL
--- qmail-1.03.stock/QLDAPINSTALL Sun Nov 11 17:31:48 2001
+++ qmail-1.03/QLDAPINSTALL Mon Nov 19 19:22:01 2001
@@ -339,6 +339,12 @@
Example: You can contact us at (555) 555 5555
Note: Multiline
+~control/quotawarningfrom
+
+ Custom From address for quota warning messages.
+ Default: Qmail-QUOTAGUARD <MAILER-DAEMON@hostname>
+ Example: Internet Support <[EMAIL PROTECTED]>
+
~control/quotawarning
Custom text in quota warning message, e.g. for providing contact information
diff -urN qmail-1.03.stock/checkpassword.c qmail-1.03/checkpassword.c
--- qmail-1.03.stock/checkpassword.c Sun Nov 11 17:31:48 2001
+++ qmail-1.03/checkpassword.c Sun Nov 11 17:26:43 2001
@@ -103,7 +103,7 @@
auth_fail(argc, argv, login.s);
}
- if ( init_ldap(&locald, &cluster, &rebind, &homemaker, 0, 0, 0) == -1 ) {
+ if ( init_ldap(&locald, &cluster, &rebind, &homemaker, 0, 0, 0, 0) == -1 ) {
log(1, "alert: init_ldap failed.\n");
_exit(1);
}
diff -urN qmail-1.03.stock/qldap-ldaplib.c qmail-1.03/qldap-ldaplib.c
--- qmail-1.03.stock/qldap-ldaplib.c Sun Nov 11 17:31:48 2001
+++ qmail-1.03/qldap-ldaplib.c Sun Nov 11 17:28:54 2001
@@ -68,7 +68,8 @@
}
int init_ldap(int *localdelivery, int *cluster, int *bind, stralloc *hm,
- stralloc *dotmode, stralloc *quota, stralloc *quotawarning)
+ stralloc *dotmode, stralloc *quota, stralloc *quotawarning,
+ stralloc *quotawarningfrom)
/* reads all necesary control files and makes everything ready for a ldap lookup
* Returns 0 if successful else -1 is returned and errno is set.
* Localdelivery is set to 0 or 1 as in ~control/ldaplocaldelivery specified.
@@ -202,6 +203,7 @@
t += fmt_strn(cf, "control/ldapdefaultdotmode", 64); *t=0;
if (control_rldef(dotmode, ctrl_file, 0, "ldaponly") == -1) return -1;
if (!stralloc_0(dotmode)) return -1;
+ log(64, "init_ldap: control/ldapdefaultdotmode: %s\n", dotmode->s);
}
if ( quota != 0 ) {
@@ -210,6 +212,17 @@
if (control_rldef(quota, ctrl_file, 0, "") == -1)
return -1;
if (!stralloc_0(quota)) return -1;
+ log(64, "init_ldap: control/ldapdefaultquota: %s\n", quota->s);
+ }
+
+ if ( quotawarningfrom != 0 ) {
+ t = cf;
+ t += fmt_strn(cf, "control/quotawarningfrom", 64); *t=0;
+ if (control_rldef(quotawarningfrom, ctrl_file, 0, "") == 1) {
+ if (!stralloc_0(quotawarningfrom)) return -1;
+ log(64, "init_ldap: control/quotawarningfrom: %s\n",
+quotawarningfrom->s);
+ }
+ /* Else, leave it. qmail-quotawarn will fill in a default From addr. */
}
if ( quotawarning != 0 ) {
@@ -221,6 +234,7 @@
} else {
if (!stralloc_copys(quotawarning, "") ) return -1;
}
+ log(64, "init_ldap: control/quotawarning: %s\n", quotawarning->s);
}
alloc_free(ctrl_file);
diff -urN qmail-1.03.stock/qldap-ldaplib.h qmail-1.03/qldap-ldaplib.h
--- qmail-1.03.stock/qldap-ldaplib.h Sun Nov 11 17:31:48 2001
+++ qmail-1.03/qldap-ldaplib.h Sun Nov 11 17:26:43 2001
@@ -27,7 +27,8 @@
} searchinfo;
int init_ldap(int *localdelivery, int *cluster, int *bind, stralloc *hm,
- stralloc *dotmode, stralloc *quota, stralloc *quotawarning);
+ stralloc *dotmode, stralloc *quota, stralloc *quotawarning,
+ stralloc *quotawarningfrom);
/* reads all necesary control files and makes everything ready for a ldap lookup
* Returns 0 if successful else -1 is returned and errno is set.
* Localdelivery is set to 0 or 1 as in ~control/ldaplocaldelivery specified.
diff -urN qmail-1.03.stock/qmail-ldap.h qmail-1.03/qmail-ldap.h
--- qmail-1.03.stock/qmail-ldap.h Sun Nov 11 17:31:48 2001
+++ qmail-1.03/qmail-ldap.h Sun Nov 11 17:26:43 2001
@@ -91,8 +91,9 @@
*/
#define ENV_HOMEDIRMAKE "QLDAPAUTOHOMEDIRMAKE"
-#define ENV_QUOTA "QMAILQUOTA"
-#define ENV_QUOTAWARNING "QMAILQUOTAWARNING"
+#define ENV_QUOTA "QMAILQUOTA"
+#define ENV_QUOTAWARNINGFROM "QMAILQUOTAWARNINGFROM"
+#define ENV_QUOTAWARNING "QMAILQUOTAWARNING"
#define ENV_DOTMODE "QMAILDOTMODE"
#define ENV_MODE "QMAILMODE"
diff -urN qmail-1.03.stock/qmail-ldaplookup.c qmail-1.03/qmail-ldaplookup.c
--- qmail-1.03.stock/qmail-ldaplookup.c Sun Nov 11 17:31:48 2001
+++ qmail-1.03/qmail-ldaplookup.c Sun Nov 11 17:27:36 2001
@@ -58,6 +58,7 @@
stralloc homemaker = {0};
stralloc defdot = {0};
stralloc defquota = {0};
+stralloc quotawarningfrom = {0};
stralloc quotawarning = {0};
stralloc filter = {0};
stralloc value = {0};
@@ -140,8 +141,8 @@
log_init(STDERR, -1, 0);
- if ( init_ldap( &locald, &cluster, &rebind, &homemaker, &defdot, &defquota,
- "awarning) == -1 ) {
+ if ( init_ldap( &locald, &cluster, &rebind, &homemaker, &defdot,
+ &defquota, "awarning, "awarningfrom) == -1 ) {
strerr_die2x(1, "ERROR: init_ldap failed: ",
qldap_err_str(qldap_errno));
}
@@ -153,6 +154,7 @@
output(&ssout, "\t\thomedirmaker:\t %s\n",
homemaker.len?homemaker.s:"undefined");
output(&ssout, "\t\tdefaultDotMode:\t %s\n", defdot.s);
output(&ssout, "\t\tdefaultQuota:\t %s\n",
defquota.len?defquota.s:"undedined");
+ output(&ssout, "\t\tQuotaWarningFrom:\t %s\n",
+quotawarningfrom.len?quotawarningfrom.s:"undefined");
output(&ssout, "\t\tQuotaWarning:\n------\n%s\n------\n",
quotawarning.len?quotawarning.s:"undefined");
diff -urN qmail-1.03.stock/qmail-lspawn.c qmail-1.03/qmail-lspawn.c
--- qmail-1.03.stock/qmail-lspawn.c Sun Nov 11 17:31:48 2001
+++ qmail-1.03/qmail-lspawn.c Sun Nov 11 17:26:43 2001
@@ -45,6 +45,7 @@
extern stralloc qldap_objectclass;
stralloc qldap_defdotmode = {0};
stralloc qldap_defaultquota = {0};
+stralloc qldap_quotawarningfrom = {0};
stralloc qldap_quotawarning = {0};
stralloc qldap_dirmaker = {0};
int qldap_localdelivery;
@@ -65,13 +66,20 @@
void get_qldap_controls()
{
if ( init_ldap( &qldap_localdelivery, &qldap_cluster, 0, &qldap_dirmaker,
- &qldap_defdotmode, &qldap_defaultquota, &qldap_quotawarning ) ==
-1 )
+ &qldap_defdotmode, &qldap_defaultquota, &qldap_quotawarning,
+ &qldap_quotawarningfrom ) == -1 )
_exit(1);
if ( qldap_dirmaker.len != 0 ) {
if ( !env_put2(ENV_HOMEDIRMAKE, qldap_dirmaker.s )) _exit(QLX_NOMEM);
} else {
if ( !env_unset(ENV_HOMEDIRMAKE) ) _exit(QLX_NOMEM);
+ }
+
+ if ( qldap_quotawarningfrom.len != 0 ) {
+ if ( !env_put2(ENV_QUOTAWARNINGFROM, qldap_quotawarningfrom.s ))
+_exit(QLX_NOMEM);
+ } else {
+ if ( !env_unset(ENV_QUOTAWARNINGFROM) ) _exit(QLX_NOMEM);
}
if ( qldap_quotawarning.len != 0 ) {
diff -urN qmail-1.03.stock/qmail-quotawarn.c qmail-1.03/qmail-quotawarn.c
--- qmail-1.03.stock/qmail-quotawarn.c Sun Nov 11 17:31:48 2001
+++ qmail-1.03/qmail-quotawarn.c Sun Nov 11 17:26:43 2001
@@ -25,6 +25,7 @@
#include "qmail-ldap.h"
/* global vars */
+stralloc warningfrom={0};
stralloc warning={0};
stralloc to={0};
stralloc from={0};
@@ -59,15 +60,23 @@
strerr_die3x(111,"Usage: ", argv[0], " mailbox (LDAP-ERR #5.0.1)");
fn = argv[1];
-
- if (! (s = env_get(ENV_QUOTAWARNING) ) )
- strerr_die2x(111,ENV_QUOTAWARNING, " not present (LDAP-ERR #5.1.1)");
- if (!stralloc_copys(&warning,s)) temp_nomem();
-
+
if (! (s = env_get("HOST") ) )
strerr_die1x(111,"ARRG: HOST not present (LDAP-ERR #5.1.3)");
if (!stralloc_copys(&host,s)) temp_nomem();
-
+
+ if ( (s = env_get(ENV_QUOTAWARNINGFROM) ) ) {
+ if (!stralloc_copys(&warningfrom,s)) temp_nomem();
+ } else {
+ if (!stralloc_copys(&warningfrom, "Qmail-QUOTAGUARD <MAILER-DAEMON@"))
+temp_nomem();
+ if (!stralloc_cat(&warningfrom, &host)) temp_nomem();
+ if (!stralloc_cats(&warningfrom, ">")) temp_nomem();
+ }
+
+ if (! (s = env_get(ENV_QUOTAWARNING) ) )
+ strerr_die2x(111,ENV_QUOTAWARNING, " not present (LDAP-ERR #5.1.1)");
+ if (!stralloc_copys(&warning,s)) temp_nomem();
+
if ( fn[str_len(fn)-1] == '/' ) {
write_maildir(fn);
} else {
@@ -148,9 +157,9 @@
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 (!stralloc_copys(&from,"From: ")) temp_nomem();
+ if (!stralloc_cat(&from,&warningfrom)) 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)");
@@ -266,9 +275,9 @@
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 (!stralloc_copys(&from,"From: ")) temp_nomem();
+ if (!stralloc_cat(&from,&warningfrom)) 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)");
--
John Morrissey _o /\ ---- __o
[EMAIL PROTECTED] _-< \_ / \ ---- < \,
www.horde.net/ __(_)/_(_)________/ \_______(_) /_(_)__