*** empty log message ***
authorMatthew Mondor <mmondor@pulsar-zone.net>
Thu, 10 Jan 2008 21:57:40 +0000 (21:57 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Thu, 10 Jan 2008 21:57:40 +0000 (21:57 +0000)
mmsoftware/mmmail/src/mmpop3d/mmpop3d.h
mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.c
mmsoftware/mmmail/src/mmsmtpd/mmsmtpd.h

index e697843..2be56a2 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmpop3d.h,v 1.25 2007/12/05 23:47:56 mmondor Exp $ */
+/* $Id: mmpop3d.h,v 1.26 2008/01/10 21:57:37 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2007, Matthew Mondor
@@ -66,7 +66,7 @@
 /* DEFINITIONS */
 
 #define DAEMON_NAME    "mmpop3d"
-#define DAEMON_VERSION "mmmail-0.2.4/mmondor"
+#define DAEMON_VERSION "mmmail-0.3.0/mmondor"
 
 /* Negative states are used by the state swapper, others are real states */
 #define STATE_ERROR    -3
index 712b145..9b7bcfc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmsmtpd.c,v 1.93 2008/01/10 18:38:53 mmondor Exp $ */
+/* $Id: mmsmtpd.c,v 1.94 2008/01/10 21:57:40 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2007, Matthew Mondor
@@ -84,7 +84,7 @@
 
 MMCOPYRIGHT("@(#) Copyright (c) 2001-2007\n\
 \tMatthew Mondor. All rights reserved.\n");
-MMRCSID("$Id: mmsmtpd.c,v 1.93 2008/01/10 18:38:53 mmondor Exp $");
+MMRCSID("$Id: mmsmtpd.c,v 1.94 2008/01/10 21:57:40 mmondor Exp $");
 
 
 
@@ -1525,7 +1525,7 @@ static bool
 valid_host(clientenv *clenv, char *host, int res, bool addr, bool sanity)
 {
 
-    if (addr && res != HOST_RES_MX && valid_ipaddress(host))
+    if (addr && res != HOST_RES_MX && valid_ipaddress(clenv, host))
        return TRUE;
 
     if (sanity) {
@@ -1560,7 +1560,7 @@ valid_host(clientenv *clenv, char *host, int res, bool addr, bool sanity)
      * resolving
      */
     if (res != HOST_NORES) {
-       char answer[64];
+       char answer[128];
 
        if (res == HOST_RES_MX) {
            /* Check for an MX DNS IP address entry for it */
@@ -1568,9 +1568,11 @@ valid_host(clientenv *clenv, char *host, int res, bool addr, bool sanity)
                            sizeof(answer) - 1)) == -1)
                return FALSE;
        } else if (res == HOST_RES) {
-           /* Check if hostname resolves to normal A record */
-           if ((a_res_query(clenv, host, C_IN, T_A, answer,
-                           sizeof(answer) - 1)) == -1)
+           /* Check if hostname resolves to normal A/AAAA record */
+           if (a_res_query(clenv, host, C_IN, T_A, answer,
+                       sizeof(answer) - 1) == -1 &&
+                   a_res_query(clenv, host, C_IN, T_AAAA, answer,
+                       sizeof(answer) - 1) == -1)
                return FALSE;
        }
     }
@@ -1579,36 +1581,17 @@ valid_host(clientenv *clenv, char *host, int res, bool addr, bool sanity)
 }
 
 
-/* Some more parsing magic for IP address sanity checking */
+/* IP address sanity checking */
 static bool
-valid_ipaddress(const char *addr)
+valid_ipaddress(clientenv *clenv, const char *addr)
 {
-    char unit[5], *uptr, *utptr;
-    int units;
-
-    for (units = 0, uptr = unit, utptr = unit + 4; uptr < utptr; addr++) {
-       if (*addr == '\0' || *addr == '.') {
-           if (uptr > unit && units < 4) {
-               register int n;
+    struct server_sockaddr saddr;
 
-               *uptr = '\0';
-               n = atoi(unit);
-               if (n < 0 || n > 255)
-                   break;
-               uptr = unit;
-               units++;
-           } else return (FALSE);
-           if (*addr == '\0')
-               break;
-       } else if (isdigit((int)*addr))
-           *uptr++ = *addr;
-       else
-           return (FALSE);
-    }   
-    if (!(units == 4 && *addr == '\0'))
-       return (FALSE);
+    if (inet_pton(*(SERVER_SOCKADDR_FAMILY(&clenv->iface->address)), addr,
+                   SERVER_SOCKADDR(&saddr)) == 1)
+       return TRUE;
 
-    return (TRUE);
+    return FALSE;
 }
 
 
index 69c8cf7..4da4bea 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmsmtpd.h,v 1.44 2007/12/05 23:47:56 mmondor Exp $ */
+/* $Id: mmsmtpd.h,v 1.45 2008/01/10 21:57:40 mmondor Exp $ */
 
 /*
  * Copyright (C) 2001-2007, Matthew Mondor
@@ -66,7 +66,7 @@
 
 /* DEFINITIONS */
 #define DAEMON_NAME    "mmsmtpd"
-#define DAEMON_VERSION "mmmail-0.2.4/mmondor"
+#define DAEMON_VERSION "mmmail-0.3.0/mmondor"
 
 /* Negative states are used by the state swapper, others are real states */
 #define STATE_ERROR    -3
@@ -298,7 +298,7 @@ static bool box_filter_allow(clientenv *, const char *, const char *, bool);
 static void rfc_time(char *);
 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 *);
+static bool valid_ipaddress(clientenv *, const char *);
 
 static int validate_msg_line(char *, ssize_t *, int *, void *);
 static bool do_data(clientenv *);