summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-12-10 08:53:41 +0000
committermav <mav@FreeBSD.org>2014-12-10 08:53:41 +0000
commit43c3b12592af48efcbeb4e0b341a29cddc8a9a09 (patch)
tree499de59814062fb9ca5ff8c50da6f926f6f270b9
parent4875c0a2054728926c5384b2812d593178eeabfd (diff)
downloadFreeBSD-src-43c3b12592af48efcbeb4e0b341a29cddc8a9a09.zip
FreeBSD-src-43c3b12592af48efcbeb4e0b341a29cddc8a9a09.tar.gz
MFC r275452: Do not corrupt the listen string when parsing it.
This fixes problem with ctld reload when it is configured to listen on two portals with same IP, but different ports.
-rw-r--r--usr.sbin/ctld/ctld.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/usr.sbin/ctld/ctld.c b/usr.sbin/ctld/ctld.c
index bbf8e7d..0565339 100644
--- a/usr.sbin/ctld/ctld.c
+++ b/usr.sbin/ctld/ctld.c
@@ -643,10 +643,11 @@ static int
parse_addr_port(char *arg, const char *def_port, struct addrinfo **ai)
{
struct addrinfo hints;
- char *addr, *ch;
+ char *str, *addr, *ch;
const char *port;
int error, colons = 0;
+ str = arg = strdup(arg);
if (arg[0] == '[') {
/*
* IPv6 address in square brackets, perhaps with port.
@@ -659,8 +660,10 @@ parse_addr_port(char *arg, const char *def_port, struct addrinfo **ai)
port = def_port;
} else if (arg[0] == ':') {
port = arg + 1;
- } else
+ } else {
+ free(str);
return (1);
+ }
} else {
/*
* Either IPv6 address without brackets - and without
@@ -687,9 +690,8 @@ parse_addr_port(char *arg, const char *def_port, struct addrinfo **ai)
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
error = getaddrinfo(addr, port, &hints, ai);
- if (error != 0)
- return (1);
- return (0);
+ free(str);
+ return ((error != 0) ? 1 : 0);
}
int
OpenPOWER on IntegriCloud