diff options
-rw-r--r-- | fetchmail.c | 5 | ||||
-rw-r--r-- | fetchmail.h | 2 | ||||
-rw-r--r-- | interface.c | 9 | ||||
-rw-r--r-- | rcfile_y.y | 4 |
4 files changed, 7 insertions, 13 deletions
diff --git a/fetchmail.c b/fetchmail.c index ea973152..46c77799 100644 --- a/fetchmail.c +++ b/fetchmail.c @@ -634,11 +634,6 @@ static int load_params(int argc, char **argv, int optind) if (ctl->server.envelope == (char *)NULL) ctl->server.envelope = "X-Envelope-To:"; -#ifdef linux - /* interface_parse() does its own error logging */ - interface_parse(&ctl->server); -#endif /* linux */ - /* sanity checks */ if (ctl->server.port < 0) { diff --git a/fetchmail.h b/fetchmail.h index e18a7b52..18bfbe1f 100644 --- a/fetchmail.h +++ b/fetchmail.h @@ -224,7 +224,7 @@ int daemonize(const char *, void (*)(int)); int prc_parse_file(const char *); int prc_filecheck(const char *); -void interface_parse(struct hostdata *); +void interface_parse(char *, struct hostdata *); void interface_note_activity(struct hostdata *); int interface_approve(struct hostdata *); diff --git a/interface.c b/interface.c index 19bbd820..6342df7c 100644 --- a/interface.c +++ b/interface.c @@ -98,19 +98,16 @@ static int get_ifinfo(const char *ifname, ifinfo_t *ifinfo) return(result); } -void interface_parse(struct hostdata *hp) +void interface_parse(char *buf, struct hostdata *hp) /* parse 'interface' specification */ { char *cp1, *cp2; - /* if no interface specification present, all done */ - if (!hp->interface) - return; - /* find and isolate just the IP address */ - if (!(cp1 = strchr(hp->interface, '/'))) + if (!(cp1 = strchr(buf, '/'))) (void) error(PS_SYNTAX, 0, "missing IP interface address"); *cp1++ = '\000'; + hp->interface = xstrdup(buf); /* find and isolate just the netmask */ if (!(cp2 = strchr(cp1, '/'))) @@ -116,7 +116,7 @@ serv_option : AKA alias_list | ENVELOPE STRING {current.server.envelope = xstrdup($2);} | INTERFACE STRING { #ifdef linux - current.server.interface = xstrdup($2); + interface_parse($2, ¤t.server); #else fprintf(stderr, "fetchmail: interface option is only supported under Linux\n"); #endif /* linux */ @@ -337,6 +337,7 @@ static void prc_register(void) #ifdef linux FLAG_FORCE(server.interface); FLAG_FORCE(server.monitor); + FLAG_FORCE(server.interface_pair); #endif /* linux */ FLAG_FORCE(remotename); @@ -377,6 +378,7 @@ void optmerge(struct query *h2, struct query *h1) #ifdef linux FLAG_MERGE(server.interface); FLAG_MERGE(server.monitor); + FLAG_MERGE(server.interface_pair); #endif /* linux */ FLAG_MERGE(remotename); |