changeset 2203:a402f9e802a6 draft

Fix multiple arping options
author Roy Marples <roy@marples.name>
date Fri, 13 Dec 2013 09:35:35 +0000
parents 2a43815d2098
children cc598e8e72b0
files if-options.c
diffstat 1 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/if-options.c	Fri Dec 13 09:11:42 2013 +0000
+++ b/if-options.c	Fri Dec 13 09:35:35 2013 +0000
@@ -1039,16 +1039,25 @@
 		break;
 #ifdef INET
 	case O_ARPING:
-		if (parse_addr(&addr, NULL, arg) != 0)
-			return -1;
-		naddr = realloc(ifo->arping,
-		    sizeof(in_addr_t) * (ifo->arping_len + 1));
-		if (naddr == NULL) {
-			syslog(LOG_ERR, "%s: %m", __func__);
-			return -1;
+		while (arg && *arg != '\0') {
+			fp = strwhite(arg);
+			if (fp)
+				*fp++ = '\0';
+			if (parse_addr(&addr, NULL, arg) != 0)
+				return -1;
+			naddr = realloc(ifo->arping,
+			    sizeof(in_addr_t) * (ifo->arping_len + 1));
+			if (naddr == NULL) {
+				syslog(LOG_ERR, "%s: %m", __func__);
+				return -1;
+			}
+			ifo->arping = naddr;
+			ifo->arping[ifo->arping_len++] = addr.s_addr;
+			if (fp)
+				arg = strskipwhite(fp);
+			else
+				arg = NULL;
 		}
-		ifo->arping = naddr;
-		ifo->arping[ifo->arping_len++] = addr.s_addr;
 		break;
 	case O_DESTINATION:
 		if (make_option_mask(dhcp_opts, dhcp_opts_len,