- Fix copyright
authorMatthew Mondor <mmondor@pulsar-zone.net>
Sat, 24 Aug 2013 07:23:04 +0000 (07:23 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Sat, 24 Aug 2013 07:23:04 +0000 (07:23 +0000)
- Quote "user" for SQL in OPTIMIZE clause
- Remove extraneous remaining boxdelete from OPTIMIZE clauses which was
  obsolete

mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c

index 71339d4..49eb494 100644 (file)
@@ -1,7 +1,7 @@
-/* $Id: mmsmtpd.c,v 1.112 2012/07/10 05:07:50 mmondor Exp $ */
+/* $Id: mmsmtpd.c,v 1.113 2013/08/24 07:23:04 mmondor Exp $ */
 
 /*
- * Copyright (C) 2001-2008, Matthew Mondor
+ * Copyright (C) 2001-2013, Matthew Mondor
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -84,9 +84,9 @@
 
 
 
-MMCOPYRIGHT("@(#) Copyright (c) 2001-2007\n\
+MMCOPYRIGHT("@(#) Copyright (c) 2001-2013\n\
 \tMatthew Mondor. All rights reserved.\n");
-MMRCSID("$Id: mmsmtpd.c,v 1.112 2012/07/10 05:07:50 mmondor Exp $");
+MMRCSID("$Id: mmsmtpd.c,v 1.113 2013/08/24 07:23:04 mmondor Exp $");
 
 
 
@@ -1576,6 +1576,12 @@ valid_host(clientenv *clenv, char *host, int res, bool addr, bool sanity)
     if (res != HOST_NORES) {
        char answer[128];
 
+       /* XXX Should ideally use the database for such exceptions, but we
+        * needed this quick fix for now
+        */
+       if (best_match(host, "*dreamhost*") != -1)
+               return true;
+
        if (res == HOST_RES_MX) {
            /* Check for an MX DNS IP address entry for it */
            if ((a_res_query(clenv, host, C_IN, T_MX, answer,
@@ -1670,6 +1676,18 @@ validate_msg_line(char *line, ssize_t *len, int *res, void *udata)
            mm_strupper(header);
        }
 
+       /* Block some ad software which have identifyable Message-ID */
+       if (mm_strcmp(header, "MESSAGE-ID") == 0) {
+           if (best_match(data, "*adehost*") != -1) {
+               *res = CFDBRB_HEADER;
+               return FDBRB_STOP;
+           }
+           if (best_match(data, "*agenceweb*") != -1) {
+               *res = CFDBRB_HEADER;
+               return FDBRB_STOP;
+           }
+       }
+
        /* XXX
         * Permit admin-supplied table to filter unwanted headers here.
         */
@@ -1697,6 +1715,11 @@ validate_msg_line(char *line, ssize_t *len, int *res, void *udata)
                *res = CFDBRB_HEADER;
                return FDBRB_STOP;
            }
+           /* Drop a local mailing lists spammer */
+           if (best_match(data, "*bathge*") != -1) {
+               *res = CFDBRB_HEADER;
+               return FDBRB_STOP;
+           }
 
            ud->hops++;
            if (ud->hops > CONF.MAX_HOPS) {
@@ -1757,8 +1780,15 @@ endheader:
 
     /* Drop if we require at least one hop but got none */
     if (CONF.REQUIRE_HOP && ud->hops == 0) {
-       *res = CFDBRB_NOHOP;
-       return FDBRB_STOP;
+       /*
+        * XXX Apple's ITunes password recovery provides no Received: line,
+        * like spam...
+        */
+       if (best_match(ud->clenv->from, "*@itunes.com") == -1 &&
+           best_match(ud->clenv->from, "*@*apple.com") == -1) {
+           *res = CFDBRB_NOHOP;
+           return FDBRB_STOP;
+       }
     }
 
     {
@@ -2729,7 +2759,7 @@ a_res_query(clientenv *clenv, const char *dname, int class, int type,
  * frequent lookups which can be done with hashtable_lookup() in another
  * thread. We wouln't want those to need to iterate through all the nodes
  * everytime. We also call a function which ensures to delete any mailbox
- * files for which an entry exists in the boxdelete database table.
+ * files for which an entry exists in the file_gc_queue database table.
  */
 /* ARGSUSED */
 static void *
@@ -2786,12 +2816,12 @@ hosts_expire_thread_iterator(hashnode_t *hnod, void *udata)
 
 
 /*
- * This thread performs a verification for entries in the boxdelete table, and
- * deletes the dangling directories for boxes which have been deleted. This
- * way we do not need the frontend process to be able to delete arbitrary
+ * This thread performs a verification for entries in the file_gc_queue table,
+ * and deletes the dangling directories and files for boxes and posts which
+ * have been deleted.
+ * This way we do not need the frontend process to be able to delete arbitrary
  * files, while being able to provide an administration frontend to delete
- * mailboxes as needed. We also perform table optimization at regular
- * intervals.
+ * as needed. We also perform table optimization at regular intervals.
  */
 /* ARGSUSED */
 static void *
@@ -2895,16 +2925,16 @@ skip:
 
            OPTIMIZE("alias");
            OPTIMIZE("box");
-           OPTIMIZE("boxdelete");
            OPTIMIZE("file_gc_queue");
            OPTIMIZE("filter");
+           OPTIMIZE("folder");
            OPTIMIZE("mail");
            OPTIMIZE("nofrom");
            OPTIMIZE("relayfrom");
            OPTIMIZE("relaylocal");
            OPTIMIZE("relayqueue");
            OPTIMIZE("session");
-           OPTIMIZE("user");
+           OPTIMIZE("\"user\"");
 
 #undef OPTIMIZE
        }