aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>1997-01-24 00:37:30 +0000
committerEric S. Raymond <esr@thyrsus.com>1997-01-24 00:37:30 +0000
commit5a1dd0c605715b4324fdd08b8e1989aed8a94eb8 (patch)
tree2ca5fbbae5ba23bf0be25d6796875e0c56329a2f
parentc5c26b53354e99ec1cbb324e4ab6cec6aaff9e02 (diff)
downloadfetchmail-5a1dd0c605715b4324fdd08b8e1989aed8a94eb8.tar.gz
fetchmail-5a1dd0c605715b4324fdd08b8e1989aed8a94eb8.tar.bz2
fetchmail-5a1dd0c605715b4324fdd08b8e1989aed8a94eb8.zip
Correct the interface parsing.
svn path=/trunk/; revision=818
-rw-r--r--fetchmail.c5
-rw-r--r--fetchmail.h2
-rw-r--r--interface.c9
-rw-r--r--rcfile_y.y4
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, '/')))
diff --git a/rcfile_y.y b/rcfile_y.y
index 8e6d0cd5..dfc3dbdd 100644
--- a/rcfile_y.y
+++ b/rcfile_y.y
@@ -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, &current.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);