summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2018-03-06 14:13:40 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2018-03-14 11:29:52 +0100
commited1f4a1dba86d7176eb67ff95b965a38a3692b20 (patch)
tree3b86a290b908ce4c14ce92e7f8a63bf8832c6b08
parenta63a0eca1a436168409c49a7377f7ce50c70a12a (diff)
downloadNetworkManager-bg/dhcp-client-id-bgo793957.tar.gz
dhclient: write client-id with backslash and quotes as hexbg/dhcp-client-id-bgo793957
-rw-r--r--src/dhcp/nm-dhcp-dhclient-utils.c2
-rw-r--r--src/dhcp/tests/test-dhcp-dhclient.c32
2 files changed, 32 insertions, 2 deletions
diff --git a/src/dhcp/nm-dhcp-dhclient-utils.c b/src/dhcp/nm-dhcp-dhclient-utils.c
index 35f383a342..70d70fd60a 100644
--- a/src/dhcp/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp/nm-dhcp-dhclient-utils.c
@@ -125,7 +125,7 @@ add_ip4_config (GString *str, GBytes *client_id, const char *hostname, gboolean
* as long as all the characters are printable.
*/
for (i = 1; (p[0] == 0) && i < l; i++) {
- if (!g_ascii_isprint (p[i]))
+ if (!g_ascii_isprint (p[i]) || p[i] == '\\' || p[i] == '"')
break;
}
diff --git a/src/dhcp/tests/test-dhcp-dhclient.c b/src/dhcp/tests/test-dhcp-dhclient.c
index 17159f0410..f1b0a1a1b1 100644
--- a/src/dhcp/tests/test-dhcp-dhclient.c
+++ b/src/dhcp/tests/test-dhcp-dhclient.c
@@ -180,6 +180,35 @@ test_quote_client_id (void)
/*****************************************************************************/
+static const char *quote_client_id_expected_2 = \
+ "# Created by NetworkManager\n"
+ "\n"
+ "send dhcp-client-identifier 00:61:5c:62:63; # added by NetworkManager\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_quote_client_id_2 (void)
+{
+ test_config (NULL, quote_client_id_expected_2,
+ AF_INET, NULL, 0, FALSE,
+ "a\\bc",
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*****************************************************************************/
+
static const char *hex_zero_client_id_expected = \
"# Created by NetworkManager\n"
"\n"
@@ -1100,7 +1129,8 @@ main (int argc, char **argv)
g_test_add_func ("/dhcp/dhclient/orig_missing", test_orig_missing);
g_test_add_func ("/dhcp/dhclient/override_client_id", test_override_client_id);
- g_test_add_func ("/dhcp/dhclient/quote_client_id", test_quote_client_id);
+ g_test_add_func ("/dhcp/dhclient/quote_client_id/1", test_quote_client_id);
+ g_test_add_func ("/dhcp/dhclient/quote_client_id/2", test_quote_client_id_2);
g_test_add_func ("/dhcp/dhclient/hex_zero_client_id", test_hex_zero_client_id);
g_test_add_func ("/dhcp/dhclient/ascii_client_id", test_ascii_client_id);
g_test_add_func ("/dhcp/dhclient/hex_single_client_id", test_hex_single_client_id);