diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2020-07-28 17:30:45 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2020-08-24 16:51:53 +0200 |
commit | 01a1eaf02f66b6de74f531b55433500ec8b0f4b8 (patch) | |
tree | b063f4d57c8d4ddcf1bc04c9a306ff4edf8a7782 | |
parent | 5fbc967fb8c00dedb7d70d0b4c0b5d582e7577e3 (diff) | |
download | NetworkManager-bg/nettools-options.tar.gz |
dhcp: nettools: parse some missing optionbg/nettools-options
Add support for the following options to the nettool client:
- Network Information Service Domain (40)
- Network Information Servers (41)
- NetBIOS over TCP/IP Name Server (44)
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/592
-rw-r--r-- | src/dhcp/nm-dhcp-nettools.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/dhcp/nm-dhcp-nettools.c b/src/dhcp/nm-dhcp-nettools.c index 7906759f30..2ceed09537 100644 --- a/src/dhcp/nm-dhcp-nettools.c +++ b/src/dhcp/nm-dhcp-nettools.c @@ -501,6 +501,12 @@ lease_parse_address_list (NDhcp4ClientLease *lease, } nm_ip4_config_add_nameserver (ip4_config, addr.s_addr); break; + case NM_DHCP_OPTION_DHCP4_NIS_SERVERS: + nm_ip4_config_add_nis_server (ip4_config, addr.s_addr); + break; + case NM_DHCP_OPTION_DHCP4_NETBIOS_NAMESERVER: + nm_ip4_config_add_wins (ip4_config, addr.s_addr); + break; default: nm_assert_not_reached (); } @@ -898,6 +904,35 @@ lease_parse_wpad (NDhcp4ClientLease *lease, } static void +lease_parse_nis_domain (NDhcp4ClientLease *lease, + NMIP4Config *ip4_config, + GHashTable *options) +{ + gs_free char *str_free = NULL; + const char *str; + uint8_t *data; + size_t n_data; + guint i; + int r; + + r = n_dhcp4_client_lease_query (lease, NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, &data, &n_data); + if (r) + return; + + for (i = 0; i < n_data; i++) { + if (!nm_is_ascii ((char) data[i])) + return; + } + + str = nm_strndup_a (300, (const char *) data, n_data, &str_free); + nm_dhcp_option_add_option (options, + _nm_dhcp_option_dhcp4_options, + NM_DHCP_OPTION_DHCP4_NIS_DOMAIN, + str); + nm_ip4_config_set_nis_domain (ip4_config, str); +} + +static void lease_parse_private_options (NDhcp4ClientLease *lease, GHashTable *options) { @@ -959,6 +994,9 @@ lease_to_ip4_config (NMDedupMultiIndex *multi_idx, lease_parse_ntps (lease, options); lease_parse_root_path (lease, options); lease_parse_wpad (lease, options); + lease_parse_nis_domain (lease, ip4_config, options); + lease_parse_address_list (lease, ip4_config, NM_DHCP_OPTION_DHCP4_NIS_SERVERS, options); + lease_parse_address_list (lease, ip4_config, NM_DHCP_OPTION_DHCP4_NETBIOS_NAMESERVER, options); lease_parse_private_options (lease, options); NM_SET_OUT (out_options, g_steal_pointer (&options)); |