From a4da92fc058c9d1b97fcbd584fd658b4cdfd268a Mon Sep 17 00:00:00 2001 From: Matthew Mondor Date: Sat, 26 Mar 2005 11:45:48 +0000 Subject: [PATCH] *** empty log message *** --- mmsoftware/mmmail/scripts/tables.sql | 4 +-- mmsoftware/mmmail/scripts/upgrade-0.0.24.sql | 4 +-- mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c | 45 ++++++++++++++++++++-------- mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h | 6 ++-- 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/mmsoftware/mmmail/scripts/tables.sql b/mmsoftware/mmmail/scripts/tables.sql index 26b69c4..79faf56 100644 --- a/mmsoftware/mmmail/scripts/tables.sql +++ b/mmsoftware/mmmail/scripts/tables.sql @@ -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) diff --git a/mmsoftware/mmmail/scripts/upgrade-0.0.24.sql b/mmsoftware/mmmail/scripts/upgrade-0.0.24.sql index c0e6dc3..0281b7c 100644 --- a/mmsoftware/mmmail/scripts/upgrade-0.0.24.sql +++ b/mmsoftware/mmmail/scripts/upgrade-0.0.24.sql @@ -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) diff --git a/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c b/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c index 5164b01..313fd35 100644 --- a/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c +++ b/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c @@ -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. - * can only be NULL if HOST_NORES is used for . + * parsed address in the supplied string. String should be at least + * bytes. can only be NULL if HOST_NORES is used for . */ 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; /* diff --git a/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h b/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h index e483258..9cb9a01 100644 --- a/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h +++ b/mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h @@ -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 *); -- 2.9.0