changeset 5390:3c3341010852 draft

options: use DHCPCD_MASTER to guard global options As ifname generally always set.
author Roy Marples <roy@marples.name>
date Sat, 27 Jun 2020 13:46:25 +0100
parents 188a969d672e
children e9cc33189abd
files src/if-options.c
diffstat 1 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-options.c	Wed Jun 24 20:53:20 2020 +0100
+++ b/src/if-options.c	Sat Jun 27 13:46:25 2020 +0100
@@ -674,7 +674,7 @@
 		break;
 	case 'c':
 		ARG_REQUIRED;
-		if (ifname != NULL) {
+		if (!(ifo->options & DHCPCD_MASTER)) {
 			logerrx("%s: per interface scripts"
 			    " are no longer supported",
 			    ifname);
@@ -744,7 +744,7 @@
 		ARG_REQUIRED;
 		/* per interface logging is not supported
 		 * don't want to overide the commandline */
-		if (ifname == NULL && ctx->logfile == NULL) {
+		if (ifo->options & DHCPCD_MASTER && ctx->logfile == NULL) {
 			logclose();
 			ctx->logfile = strdup(arg);
 			logopen(ctx->logfile);
@@ -947,7 +947,7 @@
 		break;
 	case 'z':
 		ARG_REQUIRED;
-		if (ifname == NULL)
+		if (ifo->options & DHCPCD_MASTER)
 			ctx->ifav = splitv(&ctx->ifac, ctx->ifav, arg);
 		break;
 	case 'A':
@@ -1193,7 +1193,7 @@
 		break;
 	case 'Z':
 		ARG_REQUIRED;
-		if (ifname == NULL)
+		if (ifo->options & DHCPCD_MASTER)
 			ctx->ifdv = splitv(&ctx->ifdc, ctx->ifdv, arg);
 		break;
 	case '1':
@@ -1297,7 +1297,7 @@
 #endif
 	case O_IAID:
 		ARG_REQUIRED;
-		if (ifname == NULL) {
+		if (ifo->options & DHCPCD_MASTER) {
 			logerrx("IAID must belong in an interface block");
 			return -1;
 		}
@@ -1339,7 +1339,7 @@
 			logwarnx("%s: IA_PD not compiled in", ifname);
 			return -1;
 #else
-			if (ifname == NULL) {
+			if (ifo->options & DHCPCD_MASTER) {
 				logerrx("IA PD must belong in an "
 				    "interface block");
 				return -1;
@@ -1347,7 +1347,7 @@
 			i = D6_OPTION_IA_PD;
 #endif
 		}
-		if (ifname == NULL && arg) {
+		if (ifo->options & DHCPCD_MASTER && arg) {
 			logerrx("IA with IAID must belong in an "
 			    "interface block");
 			return -1;
@@ -2335,6 +2335,9 @@
 	ifo->options |= DHCPCD_DHCP6;
 #endif
 
+	/* Set master to indicate global options */
+	ifo->options |= DHCPCD_MASTER;
+
 	vlen = strlcpy((char *)ifo->vendorclassid + 1, ctx->vendor,
 	    sizeof(ifo->vendorclassid) - 1);
 	ifo->vendorclassid[0] = (uint8_t)(vlen > 255 ? 0 : vlen);
@@ -2487,7 +2490,11 @@
 			had_block = 1;
 			new_block = 0;
 			ifo->options &= ~DHCPCD_WAITOPTS;
+
+			/* Unset master to indicate non-global options */
+			ifo->options &= ~DHCPCD_MASTER;
 		}
+
 		/* Start of an interface block, skip if not ours */
 		if (strcmp(option, "interface") == 0) {
 			char **n;