*** empty log message ***
authorMatthew Mondor <mmondor@pulsar-zone.net>
Sat, 26 Mar 2005 11:45:48 +0000 (11:45 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Sat, 26 Mar 2005 11:45:48 +0000 (11:45 +0000)
mmsoftware/mmmail/scripts/tables.sql
mmsoftware/mmmail/scripts/upgrade-0.0.24.sql
mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c
mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h

index 26b69c4..79faf56 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: tables.sql,v 1.19 2004/12/03 17:29:54 mmondor Exp $
+# $Id: tables.sql,v 1.20 2005/03/26 11:45:44 mmondor Exp $
 #
 # MySQL dump 8.13
 #
@@ -43,7 +43,7 @@ CREATE TABLE box (
 
 CREATE TABLE filter (
   filter_address varchar(64) NOT NULL default '',
-  filter_allow varchar(64) NOT NULL default '',
+  filter_pattern varchar(128) NOT NULL default '',
   filter_created datetime NOT NULL default '0000-00-00 00:00:00',
   filter_description varchar(64) NOT NULL default '',
   PRIMARY KEY  (filter_address,filter_allow)
index c0e6dc3..0281b7c 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: upgrade-0.0.24.sql,v 1.14 2005/02/15 22:30:22 mmondor Exp $
+# $Id: upgrade-0.0.24.sql,v 1.15 2005/03/26 11:45:44 mmondor Exp $
 #
 # You should execute this script if you are upgrading mmmail from 0.0.21 or
 # later to 0.0.24 or later. This adds the new mail_file field for those using
@@ -22,7 +22,7 @@ ALTER TABLE alias ADD PRIMARY KEY (alias_domain,alias_pattern,alias_box);
 
 CREATE TABLE filter (
   filter_address varchar(64) NOT NULL default '',
-  filter_allow varchar(64) NOT NULL default '',
+  filter_pattern varchar(128) NOT NULL default '',
   filter_created datetime NOT NULL default '0000-00-00 00:00:00',
   filter_description varchar(64) NOT NULL default '',
   PRIMARY KEY  (filter_address,filter_allow)
index 5164b01..313fd35 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmsmtpd.c,v 1.71 2005/03/26 10:50:49 mmondor Exp $ */
+/* $Id: mmsmtpd.c,v 1.72 2005/03/26 11:45:48 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2004, Matthew Mondor
@@ -82,7 +82,7 @@
 
 MMCOPYRIGHT("@(#) Copyright (c) 2001-2004\n\
 \tMatthew Mondor. All rights reserved.\n");
-MMRCSID("$Id: mmsmtpd.c,v 1.71 2005/03/26 10:50:49 mmondor Exp $");
+MMRCSID("$Id: mmsmtpd.c,v 1.72 2005/03/26 11:45:48 mmondor Exp $");
 
 
 
@@ -215,6 +215,27 @@ static const unsigned char valid_addr_char_table[256] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 
 };
+/* 
+ * And for VALID_HOST_CHAR()
+ */
+static const unsigned char valid_addr_host_table[256] = {
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 
+};
 
 /*
  * Connection to mmrelayd(8) establishment
@@ -713,7 +734,7 @@ all_mail(clientenv *clenv)
 {
     int nextstate = STATE_CURRENT;
     fdbuf *fdb = clenv->fdb;
-    char addr[64];
+    char addr[128];
     bool valid;
 
     if (!CONF.REQUIRE_HELO || clenv->helo != NULL) {
@@ -729,7 +750,7 @@ all_mail(clientenv *clenv)
                if (valid)
                    *addr = '\0';
            } else
-               valid = valid_address(clenv, addr, clenv->buffer,
+               valid = valid_address(clenv, addr, 128, clenv->buffer,
                        (CONF.RESOLVE_MX_MAIL) ? HOST_RES_MX : HOST_NORES);
 
            if (valid) {
@@ -790,7 +811,7 @@ all_rcpt(clientenv *clenv)
     }
 
     /* Only continue if address seems valid */
-    if (!valid_address(clenv, addr, line, HOST_NORES)) {
+    if (!valid_address(clenv, addr, 64, line, HOST_NORES)) {
        reason = RCPT_INVALID;
        goto end;
     }
@@ -1443,7 +1464,7 @@ box_filter_allow(const char *toaddr, const char *fromaddr, char filter_type)
     res = (filter_type == 'A' ? TRUE : FALSE);
 
     snprintf(query, 1023,
-           "SELECT filter_allow FROM filter WHERE filter_address='%s'",
+           "SELECT filter_pattern FROM filter WHERE filter_address='%s'",
            toaddr);
     if ((mysqlres = mmsql_query(query, mm_strlen(query))) != NULL) {
        if ((mysql_num_rows(mysqlres)) > 0) {
@@ -1504,11 +1525,11 @@ rfc_time(char *str)
 
 
 /* Returns whether or not supplied address is valid, and if it is return the
- * parsed address in the supplied string. String should be at least 64 bytes.
- * <clenv> can only be NULL if HOST_NORES is used for <res>.
+ * parsed address in the supplied string. String should be at least <len>
+ * bytes. <clenv> can only be NULL if HOST_NORES is used for <res>.
  */
 static bool
-valid_address(clientenv *clenv, char *to, char *addr, int res)
+valid_address(clientenv *clenv, char *to, size_t len, char *addr, int res)
 {
     char *ptr, *a, *h;
 
@@ -1531,7 +1552,7 @@ valid_address(clientenv *clenv, char *to, char *addr, int res)
     *ptr = '\0';
     /* Now validate hostname part */
     if (valid_host(clenv, h, res, FALSE, TRUE)) {
-       mm_strncpy(to, a, 63);
+       mm_strncpy(to, a, len - 1);
        return (TRUE);
     }
 
@@ -1553,7 +1574,7 @@ valid_host(clientenv *clenv, char *host, int res, bool addr, bool sanity)
 
        /* First make sure all characters are valid */
        for (ptr = host; *ptr != '\0'; ptr++)
-           if (!VALID_ADDR_CHAR(*ptr))
+           if (!VALID_HOST_CHAR(*ptr))
                return FALSE;
 
        /* Now verify that all parts of the hostname are starting with
@@ -2879,7 +2900,7 @@ db_gc_thread(void *args)
                     * using files for message storage.
                     */
 #if defined(MMMAIL_FILE)
-                   if (valid_address(NULL, deladdr, addr, HOST_NORES)) {
+                   if (valid_address(NULL, deladdr, 64, addr, HOST_NORES)) {
                        MYSQL_RES       *mysqlres2;
 
                        /*
index e483258..9cb9a01 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmsmtpd.h,v 1.32 2005/03/26 10:50:49 mmondor Exp $ */
+/* $Id: mmsmtpd.h,v 1.33 2005/03/26 11:45:48 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2004, Matthew Mondor
@@ -116,6 +116,8 @@ enum data_reason {
 /* Evaluates if a character is valid for addresses and hostnames */
 #define VALID_ADDR_CHAR(c)     \
    (valid_addr_char_table[(int)((unsigned char)(c))] != 0)
+#define VALID_HOST_CHAR(c)     \
+   (valid_addr_host_table[(int)((unsigned char)(c))] != 0)
 
 
 
@@ -284,7 +286,7 @@ static int best_match(const char *, const char *);
 static bool local_address(struct box_info *, const char *);
 static bool box_filter_allow(const char *, const char *, char);
 static void rfc_time(char *);
-static bool valid_address(clientenv *, char *, char *, int);
+static bool valid_address(clientenv *, char *, size_t, char *, int);
 static bool valid_host(clientenv *, char *, int, bool, bool);
 static bool valid_ipaddress(const char *);