--- qmail-showctl.c.orig  1998-06-15
+++ qmail-showctl.c       2007-03-21
--- .././qmail-1.03/qmail-showctl.c	Mon Jun 15 12:53:16 1998
+++ ../qmail-1.03.2418/qmail-showctl.c	Tue Jan 24 22:12:51 2006
@@ -16,6 +16,9 @@
 #include "auto_spawn.h"
 #include "auto_split.h"
 
+#define RELAYMAILFROM
+#define MOREIPME
+
 stralloc me = {0};
 int meok;
 
@@ -214,9 +217,45 @@
     _exit(111);
   }
 
+  do_lst("authsenders","No authenticated SMTP senders.","Authenicated SMTP senders: ","");
+  do_lst("badhelo","Any HELO/EHLO greeting is allowed.",""," not accepted in HELO/EHLO.");
   do_lst("badmailfrom","Any MAIL FROM is allowed.",""," not accepted in MAIL FROM.");
+  do_lst("badloadertypes","Any loader types are accepted.",""," not accepted as loader type.");
+  /* XXX: check badloadertypes.cdb contents */
+   substdio_puts(subfdout,"\nbadloadertypes.cdb: ");
+  if (stat("badloadertypes",&stmrh) == -1)
+    if (stat("badloadertypes.cdb",&stmrhcdb) == -1)
+      substdio_puts(subfdout,"(Default.) No effect.\n");
+    else
+      substdio_puts(subfdout,"Oops! badloadertypes.cdb exists but badloadertypes doesn't.\n");
+  else
+    if (stat("badloadertypes.cdb",&stmrhcdb) == -1)
+      substdio_puts(subfdout,"Oops! badloadertypes exists but badloadertypes.cdb doesn't.\n");
+    else
+      if (stmrh.st_mtime > stmrhcdb.st_mtime)
+        substdio_puts(subfdout,"Oops! badloadertypes.cdb is older than badloadertypes.\n");
+      else
+        substdio_puts(subfdout,"Modified recently enough; hopefully up to date.\n");
+  do_lst("badmimetypes","Any MIME types are accepted.",""," not accepted as MIME type.");
+  /* XXX: check badmimetypes.cdb contents */
+   substdio_puts(subfdout,"\nbadmimetypes.cdb: ");
+  if (stat("badmimetypes",&stmrh) == -1)
+    if (stat("badmimetypes.cdb",&stmrhcdb) == -1)
+      substdio_puts(subfdout,"(Default.) No effect.\n");
+    else
+      substdio_puts(subfdout,"Oops! badmimetypes.cdb exists but badmimetypes doesn't.\n");
+  else
+    if (stat("badmimetypes.cdb",&stmrhcdb) == -1)
+      substdio_puts(subfdout,"Oops! badmimetypes exists but badmimetypes.cdb doesn't.\n");
+    else
+      if (stmrh.st_mtime > stmrhcdb.st_mtime)
+        substdio_puts(subfdout,"Oops! badmimetypes.cdb is older than badmimetypes.\n");
+      else
+        substdio_puts(subfdout,"Modified recently enough; hopefully up to date.\n");
+  do_lst("badrcptto","Any RCPT TO is allowed.",""," not accepted in RCPT TO.");
   do_str("bouncefrom",0,"MAILER-DAEMON","Bounce user name is ");
   do_str("bouncehost",1,"bouncehost","Bounce host name is ");
+  do_int("bouncemaxbytes","0","Bounce size limit is "," bytes");
   do_int("concurrencylocal","10","Local concurrency is ","");
   do_int("concurrencyremote","20","Remote concurrency is ","");
   do_int("databytes","0","SMTP DATA limit is "," bytes");
@@ -230,6 +269,28 @@
   do_str("localiphost",1,"localiphost","Local IP address becomes ");
   do_lst("locals","Messages for me are delivered locally.","Messages for "," are delivered locally.");
   do_str("me",0,"undefined! Uh-oh","My name is ");
+
+  do_lst("mailfromrules","Any envelope sender are are accepted.",""," (MAV rule).");
+  /* XXX: check mailfromrules.cdb contents */
+  substdio_puts(subfdout,"\nmailfromrules.cdb: ");
+  if (stat("mailfromrules",&stmrh) == -1)
+    if (stat("mailfromrules.cdb",&stmrhcdb) == -1)
+      substdio_puts(subfdout,"(Default.) No effect.\n");
+    else
+      substdio_puts(subfdout,"Oops! mailfromrules.cdb exists but mailfromrules doesn't.\n");
+  else
+    if (stat("mailfromrules.cdb",&stmrhcdb) == -1)
+      substdio_puts(subfdout,"Oops! mailfromrules exists but mailfromrules.cdb doesn't.\n");
+    else
+      if (stmrh.st_mtime > stmrhcdb.st_mtime)
+        substdio_puts(subfdout,"Oops! mailfromrules.cdb is older than mailfromrules.\n");
+      else
+        substdio_puts(subfdout,"Modified recently enough; hopefully up to date.\n");
+
+#ifdef MOREIPME
+  do_lst("moreipme","No additional IP addresses are me.","IP address "," is me.");
+  do_lst("notipme","All of my IP addresses are me.","IP address "," is not me.");
+#endif
   do_lst("percenthack","The percent hack is not allowed.","The percent hack is allowed for user%host@",".");
   do_str("plusdomain",1,"plusdomain","Plus domain name is ");
   do_lst("qmqpservers","No QMQP servers.","QMQP server: ",".");
@@ -254,22 +315,33 @@
         substdio_puts(subfdout,"Oops! morercpthosts.cdb is older than morercpthosts.\n");
       else
         substdio_puts(subfdout,"Modified recently enough; hopefully up to date.\n");
-
+  do_lst("recipients","SMTP clients may send messages to any recipient.","SMTP clients may send messages to local recipients listed in ",".");
   do_str("smtpgreeting",1,"smtpgreeting","SMTP greeting: 220 ");
   do_lst("smtproutes","No artificial SMTP routes.","SMTP route: ","");
   do_int("timeoutconnect","60","SMTP client connection timeout is "," seconds");
   do_int("timeoutremote","1200","SMTP client data timeout is "," seconds");
   do_int("timeoutsmtpd","1200","SMTP server data timeout is "," seconds");
   do_lst("virtualdomains","No virtual domains.","Virtual domain: ","");
+#ifdef RELAYMAILFROM
+  do_lst("relaymailfrom","No Relaymailfrom defined.","Allowed <Relayaddress>: ","");
+#endif
+  do_int("tarpitcount","No Tarpitcount defined.","Actual Tarpitcount: ","");
+  do_int("tarpitdelay","No Tarpitdelay defined.","Actual Tarpitdelay: ","");
 
   while (d = readdir(dir)) {
     if (str_equal(d->d_name,".")) continue;
     if (str_equal(d->d_name,"..")) continue;
-    if (str_equal(d->d_name,"bouncefrom")) continue;
-    if (str_equal(d->d_name,"bouncehost")) continue;
+    if (str_equal(d->d_name,"authsenders")) continue;
+    if (str_equal(d->d_name,"badhelo")) continue;
+    if (str_equal(d->d_name,"badrcptto")) continue;
     if (str_equal(d->d_name,"badmailfrom")) continue;
+    if (str_equal(d->d_name,"badloadertypes")) continue;
+    if (str_equal(d->d_name,"badloadertypes.cdb")) continue;
+    if (str_equal(d->d_name,"badmimetypes")) continue;
+    if (str_equal(d->d_name,"badmimetypes.cdb")) continue;
     if (str_equal(d->d_name,"bouncefrom")) continue;
     if (str_equal(d->d_name,"bouncehost")) continue;
+    if (str_equal(d->d_name,"bouncemaxbytes")) continue;
     if (str_equal(d->d_name,"concurrencylocal")) continue;
     if (str_equal(d->d_name,"concurrencyremote")) continue;
     if (str_equal(d->d_name,"databytes")) continue;
@@ -283,6 +355,12 @@
     if (str_equal(d->d_name,"localiphost")) continue;
     if (str_equal(d->d_name,"locals")) continue;
     if (str_equal(d->d_name,"me")) continue;
+    if (str_equal(d->d_name,"mailfromrules")) continue;
+    if (str_equal(d->d_name,"mailfromrules.cdb")) continue;
+#ifdef MOREIPME
+    if (str_equal(d->d_name,"moreipme")) continue;
+    if (str_equal(d->d_name,"notipme")) continue;
+#endif
     if (str_equal(d->d_name,"morercpthosts")) continue;
     if (str_equal(d->d_name,"morercpthosts.cdb")) continue;
     if (str_equal(d->d_name,"percenthack")) continue;
@@ -290,12 +368,18 @@
     if (str_equal(d->d_name,"qmqpservers")) continue;
     if (str_equal(d->d_name,"queuelifetime")) continue;
     if (str_equal(d->d_name,"rcpthosts")) continue;
+    if (str_equal(d->d_name,"recipients")) continue;
+#ifdef RELAYMAILFROM
+    if (str_equal(d->d_name,"relaymailfrom")) continue;
+#endif
     if (str_equal(d->d_name,"smtpgreeting")) continue;
     if (str_equal(d->d_name,"smtproutes")) continue;
     if (str_equal(d->d_name,"timeoutconnect")) continue;
     if (str_equal(d->d_name,"timeoutremote")) continue;
     if (str_equal(d->d_name,"timeoutsmtpd")) continue;
     if (str_equal(d->d_name,"virtualdomains")) continue;
+    if (str_equal(d->d_name,"tarpitcount")) continue;
+    if (str_equal(d->d_name,"tarpitdelay")) continue;
     substdio_puts(subfdout,"\n");
     substdio_puts(subfdout,d->d_name);
     substdio_puts(subfdout,": I have no idea what this file does.\n");


syntax highlighted by Code2HTML, v. 0.9.1