Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 May 2016 05:44:12 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r299156 - stable/10/sbin/dhclient
Message-ID:  <201605060544.u465iCNk025940@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Fri May  6 05:44:12 2016
New Revision: 299156
URL: https://svnweb.freebsd.org/changeset/base/299156

Log:
  MFC r298385
  
  dhclient: Log a warning instead of bailing upon "illegal" options
  
  In Azure, the DHCP servers add private option (id 0xf5), which contains
  binary form of an IPv4 address. Once this option is converted to string
  form, it could contain '$', e.g.
  
  IPv4 address: 100.72.36.54
  binary form: 0x64 0x48 0x24 0x36
  string form: "dH$6"
  
  dhclient bails upon "illegal" options like the above example, thus the
  VM bring-up will fail.
  
  Also as a side note, this "illegal" option detection was added in
  OpenBSD ~11years ago:
  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/dhclient.c?rev=1.50&content-type=text/x-cvsweb-markup
  
  And it was removed along with the removal of script support in OpenBSD
  ~3years ago:
  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/dhclient.c?rev=1.159&content-type=text/x-cvsweb-markup
  
  Reported by:	Hongxiong Xian <v-hoxian microsoft com>
  Reviewed by:	jhb, Dexuan Cui <decui microsoft com>
  Tested by:	Hongxiong Xian <v-hoxian microsoft com>
  Analyzed by:	Dong Liu <doliu microsoft com>
  Sponsored by:	Microsoft OSTC
  Differential Revision:	https://reviews.freebsd.org/D5853

Modified:
  stable/10/sbin/dhclient/dhclient.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sbin/dhclient/dhclient.c
==============================================================================
--- stable/10/sbin/dhclient/dhclient.c	Fri May  6 05:24:10 2016	(r299155)
+++ stable/10/sbin/dhclient/dhclient.c	Fri May  6 05:44:12 2016	(r299156)
@@ -2277,6 +2277,17 @@ script_set_env(struct client_state *clie
 {
 	int i, j, namelen;
 
+	/* No `` or $() command substitution allowed in environment values! */
+	for (j=0; j < strlen(value); j++)
+		switch (value[j]) {
+		case '`':
+		case '$':
+			warning("illegal character (%c) in value '%s'",
+			    value[j], value);
+			/* Ignore this option */
+			return;
+		}
+
 	namelen = strlen(name);
 
 	for (i = 0; client->scriptEnv[i]; i++)
@@ -2313,16 +2324,6 @@ script_set_env(struct client_state *clie
 	    strlen(value) + 1);
 	if (client->scriptEnv[i] == NULL)
 		error("script_set_env: no memory for variable assignment");
-
-	/* No `` or $() command substitution allowed in environment values! */
-	for (j=0; j < strlen(value); j++)
-		switch (value[j]) {
-		case '`':
-		case '$':
-			error("illegal character (%c) in value '%s'", value[j],
-			    value);
-			/* not reached */
-		}
 	snprintf(client->scriptEnv[i], strlen(prefix) + strlen(name) +
 	    1 + strlen(value) + 1, "%s%s=%s", prefix, name, value);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605060544.u465iCNk025940>