Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/gnu/dist/postfix/src/master fix bug in original postfix rega...



details:   https://anonhg.NetBSD.org/src/rev/33f9ce7d4c82
branches:  trunk
changeset: 507936:33f9ce7d4c82
user:      itojun <itojun%NetBSD.org@localhost>
date:      Tue Apr 03 11:59:04 2001 +0000

description:
fix bug in original postfix regarding to "host:port" syntax in master.cf.

diffstat:

 gnu/dist/postfix/src/master/master.h     |   3 +++
 gnu/dist/postfix/src/master/master_ent.c |  17 ++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletions(-)

diffs (75 lines):

diff -r dfc57f5106d0 -r 33f9ce7d4c82 gnu/dist/postfix/src/master/master.h
--- a/gnu/dist/postfix/src/master/master.h      Tue Apr 03 11:51:33 2001 +0000
+++ b/gnu/dist/postfix/src/master/master.h      Tue Apr 03 11:59:04 2001 +0000
@@ -26,6 +26,9 @@
     union {
        struct INET_ADDR_LIST *inet;
     } addr_list;
+    union {
+       struct INET_ADDR_LIST *inet;
+    } addr_list_buf;
     int     max_proc;                  /* upper bound on # processes */
     char   *path;                      /* command pathname */
     struct ARGV *args;                 /* argument vector */
diff -r dfc57f5106d0 -r 33f9ce7d4c82 gnu/dist/postfix/src/master/master_ent.c
--- a/gnu/dist/postfix/src/master/master_ent.c  Tue Apr 03 11:51:33 2001 +0000
+++ b/gnu/dist/postfix/src/master/master_ent.c  Tue Apr 03 11:59:04 2001 +0000
@@ -91,6 +91,7 @@
 #include <mail_params.h>
 #include <own_inet_addr.h>
 #include <wildcard_inet_addr.h>
+#include <inet_util.h>
 
 /* Local stuff. */
 
@@ -223,6 +224,7 @@
     MASTER_SERV *serv;
     char   *cp;
     char   *name;
+    char   *addr, *port;
     char   *transport;
     int     private;
     int     unprivileged;              /* passed on to child */
@@ -230,6 +232,7 @@
     char   *command;
     int     n;
     char   *bufp;
+    char   *atmp;
 
     if (master_fp == 0)
        msg_panic("get_master_ent: config file not open");
@@ -271,7 +274,16 @@
     transport = get_str_ent(&bufp, "transport type", (char *) 0);
     if (STR_SAME(transport, MASTER_XPORT_NAME_INET)) {
        serv->type = MASTER_SERV_TYPE_INET;
-       if (strcasecmp(var_inet_interfaces, DEF_INET_INTERFACES) == 0) {
+       atmp = inet_parse(name, &addr, &port);
+       if (addr && *addr) {
+           serv->addr_list.inet = serv->addr_list_buf.inet =
+               (INET_ADDR_LIST *) mymalloc(sizeof(*serv->addr_list_buf.inet));
+           inet_addr_list_init(serv->addr_list.inet);
+           inet_addr_host(serv->addr_list.inet, addr);
+           serv->listen_fd_count = serv->addr_list.inet->used;
+           /* avoid issue with free, assume strlen(name) > strlen(port) */
+           strcpy(name, port);
+       } else if (strcasecmp(var_inet_interfaces, DEF_INET_INTERFACES) == 0) {
 #ifdef INET6
            serv->addr_list.inet = wildcard_inet_addr_list();
            serv->listen_fd_count = serv->addr_list.inet->used;
@@ -283,6 +295,7 @@
            serv->addr_list.inet = own_inet_addr_list();        /* virtual */
            serv->listen_fd_count = serv->addr_list.inet->used;
        }
+       myfree(atmp);
     } else if (STR_SAME(transport, MASTER_XPORT_NAME_UNIX)) {
        serv->type = MASTER_SERV_TYPE_UNIX;
        serv->listen_fd_count = 1;
@@ -455,6 +468,8 @@
     /*
      * Undo what get_master_ent() created.
      */
+    if (serv->type == MASTER_SERV_TYPE_INET && serv->addr_list_buf.inet)
+       myfree((char *)serv->addr_list_buf.inet);
     myfree(serv->name);
     myfree(serv->path);
     argv_free(serv->args);



Home | Main Index | Thread Index | Old Index