about summary refs log tree commit diff
path: root/src/core/dhcp
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2021-08-25 15:24:42 +0200
committerSebastien Bacher <seb128@ubuntu.com>2021-08-25 15:24:42 +0200
commitdbb91282fa488964fb20595f9494a9f0e4f36a58 (patch)
tree142bc942e5320b35514cdf03a5f9f47a9b89df0e /src/core/dhcp
parent5f2ede3a2813b0e9204befdcfc67509d34be71c6 (diff)
parentcfb80376641fa49137b9996130352697e7f8b436 (diff)
Update upstream source from tag 'upstream/1.32.10'
Update to upstream version '1.32.10'
with Debian dir fcf2778b50b013ede3e7375bc1d829e984175658
Diffstat (limited to 'src/core/dhcp')
-rw-r--r--src/core/dhcp/nm-dhcp-nettools.c30
-rw-r--r--src/core/dhcp/nm-dhcp-options.c8
-rw-r--r--src/core/dhcp/nm-dhcp-options.h3
3 files changed, 37 insertions, 4 deletions
diff --git a/src/core/dhcp/nm-dhcp-nettools.c b/src/core/dhcp/nm-dhcp-nettools.c
index fe71f587..4bb6c833 100644
--- a/src/core/dhcp/nm-dhcp-nettools.c
+++ b/src/core/dhcp/nm-dhcp-nettools.c
@@ -694,12 +694,40 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx,
 
         /* https://tools.ietf.org/html/rfc2132#section-8.1 */
 
-        v_str = nm_utils_buf_utf8safe_escape((char *) l_data, l_data_len, 0, &to_free);
+        v_str = nm_utils_buf_utf8safe_escape((char *) l_data,
+                                             l_data_len,
+                                             NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL,
+                                             &to_free);
 
         nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, v_str ?: "");
         nm_ip4_config_set_nis_domain(ip4_config, v_str ?: "");
     }
 
+    r = n_dhcp4_client_lease_get_file(lease, &v_str);
+    if (r == 0) {
+        gs_free char *to_free = NULL;
+
+        v_str = nm_utils_buf_utf8safe_escape(v_str,
+                                             -1,
+                                             NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL,
+                                             &to_free);
+        nm_dhcp_option_add_option(options, AF_INET, NM_DHCP_OPTION_DHCP4_NM_FILENAME, v_str ?: "");
+    }
+
+    r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_BOOTFILE_NAME, &l_data, &l_data_len);
+    if (r == 0 && nm_dhcp_lease_data_parse_cstr(l_data, l_data_len, &l_data_len)) {
+        gs_free char *to_free = NULL;
+
+        v_str = nm_utils_buf_utf8safe_escape((char *) l_data,
+                                             l_data_len,
+                                             NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL,
+                                             &to_free);
+        nm_dhcp_option_add_option(options,
+                                  AF_INET,
+                                  NM_DHCP_OPTION_DHCP4_BOOTFILE_NAME,
+                                  v_str ?: "");
+    }
+
     lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_NIS_SERVERS, options, &sbuf);
 
     lease_parse_address_list(lease,
diff --git a/src/core/dhcp/nm-dhcp-options.c b/src/core/dhcp/nm-dhcp-options.c
index 8f0d7408..011f23e4 100644
--- a/src/core/dhcp/nm-dhcp-options.c
+++ b/src/core/dhcp/nm-dhcp-options.c
@@ -169,6 +169,7 @@ const NMDhcpOption _nm_dhcp_option_dhcp4_options[] = {
     REQ(NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS, "ip_address", FALSE),
     REQ(NM_DHCP_OPTION_DHCP4_NM_EXPIRY, "expiry", FALSE),
     REQ(NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER, "next_server", FALSE),
+    REQ(NM_DHCP_OPTION_DHCP4_NM_FILENAME, "filename", FALSE),
 };
 
 static const NMDhcpOption *const _sorted_options_4[G_N_ELEMENTS(_nm_dhcp_option_dhcp4_options)] = {
@@ -184,7 +185,7 @@ static const NMDhcpOption *const _sorted_options_4[G_N_ELEMENTS(_nm_dhcp_option_
     A(98),  A(99),  A(100), A(101), A(102), A(103), A(104), A(105), A(106), A(107), A(108), A(109),
     A(110), A(111), A(112), A(113), A(114), A(115), A(116), A(117), A(118), A(119), A(120), A(121),
     A(122), A(123), A(124), A(125), A(126), A(127), A(128), A(129), A(130), A(131), A(132), A(133),
-    A(134), A(15),  A(135), A(136), A(16),  A(137), A(138), A(139), A(140), A(141),
+    A(134), A(15),  A(135), A(136), A(16),  A(137), A(138), A(139), A(140), A(141), A(142),
 #undef A
 };
 
@@ -404,7 +405,10 @@ nm_dhcp_option_add_option_utf8safe_escape(GHashTable *  options,
     gs_free char *to_free = NULL;
     const char *  escaped;
 
-    escaped = nm_utils_buf_utf8safe_escape((char *) data, n_data, 0, &to_free);
+    escaped = nm_utils_buf_utf8safe_escape((char *) data,
+                                           n_data,
+                                           NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL,
+                                           &to_free);
     nm_dhcp_option_add_option(options, addr_family, option, escaped ?: "");
 }
 
diff --git a/src/core/dhcp/nm-dhcp-options.h b/src/core/dhcp/nm-dhcp-options.h
index 585f1187..8ed2039d 100644
--- a/src/core/dhcp/nm-dhcp-options.h
+++ b/src/core/dhcp/nm-dhcp-options.h
@@ -153,6 +153,7 @@ typedef enum {
     NM_DHCP_OPTION_DHCP4_NM_IP_ADDRESS  = 1024,
     NM_DHCP_OPTION_DHCP4_NM_EXPIRY      = 1025,
     NM_DHCP_OPTION_DHCP4_NM_NEXT_SERVER = 1026,
+    NM_DHCP_OPTION_DHCP4_NM_FILENAME    = 1027, /* 'file' DHCP header */
 } NMDhcpOptionDhcp4Options;
 
 typedef enum {
@@ -185,7 +186,7 @@ typedef struct {
     bool        include;
 } NMDhcpOption;
 
-extern const NMDhcpOption _nm_dhcp_option_dhcp4_options[142];
+extern const NMDhcpOption _nm_dhcp_option_dhcp4_options[143];
 extern const NMDhcpOption _nm_dhcp_option_dhcp6_options[16];
 
 static inline const char *