summaryrefslogtreecommitdiffstats
path: root/usr.sbin/tftp-proxy/tftp-proxy.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/tftp-proxy/tftp-proxy.c')
-rw-r--r--usr.sbin/tftp-proxy/tftp-proxy.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/usr.sbin/tftp-proxy/tftp-proxy.c b/usr.sbin/tftp-proxy/tftp-proxy.c
index 3ff19b208ff..4c6d36364cd 100644
--- a/usr.sbin/tftp-proxy/tftp-proxy.c
+++ b/usr.sbin/tftp-proxy/tftp-proxy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tftp-proxy.c,v 1.8 2013/12/23 13:06:53 florian Exp $
+/* $OpenBSD: tftp-proxy.c,v 1.9 2013/12/23 13:07:47 florian Exp $
*
* Copyright (c) 2005 DLS Internet Services
* Copyright (c) 2004, 2005 Camiel Dobbelaar, <cd@sentia.nl>
@@ -196,10 +196,10 @@ main(int argc, char *argv[])
int c;
const char *errstr;
+ struct src_addr *saddr, *saddr2;
struct passwd *pw;
char *addr = "localhost";
- char *saddr = NULL;
char *port = "6969";
int family = AF_UNSPEC;
@@ -216,7 +216,7 @@ main(int argc, char *argv[])
family = AF_INET6;
break;
case 'a':
- saddr = optarg;
+ source_addresses(optarg, family);
break;
case 'd':
verbose = debug = 1;
@@ -254,8 +254,13 @@ main(int argc, char *argv[])
if (pw == NULL)
lerrx(1, "no %s user", NOPRIV_USER);
- if (saddr != NULL)
- source_addresses(saddr, family);
+ /* Family option may have been specified late. */
+ if (family != AF_UNSPEC)
+ TAILQ_FOREACH_SAFE(saddr, &src_addrs, entry, saddr2)
+ if (saddr->addr.ss_family != family) {
+ TAILQ_REMOVE(&src_addrs, saddr, entry);
+ free(saddr);
+ }
switch (fork()) {
case -1: