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,
-                               &quotawarning) == -1 ) {
+       if ( init_ldap( &locald, &cluster, &rebind, &homemaker, &defdot,
+                               &defquota, &quotawarning, &quotawarningfrom) == -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/    __(_)/_(_)________/    \_______(_) /_(_)__

Reply via email to