diff options
Diffstat (limited to 'src/dhcp-manager/nm-dhcp-dhclient-utils.c')
| -rw-r--r-- | src/dhcp-manager/nm-dhcp-dhclient-utils.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c index bf2df1e0..008f8af2 100644 --- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c +++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c @@ -36,8 +36,9 @@ #define HOSTNAME4_TAG "send host-name" #define HOSTNAME4_FORMAT HOSTNAME4_TAG " \"%s\"; # added by NetworkManager" -#define FQDN_TAG "send fqdn.fqdn" -#define FQDN_FORMAT FQDN_TAG " \"%s\"; # added by NetworkManager" +#define FQDN_TAG_PREFIX "send fqdn." +#define FQDN_TAG FQDN_TAG_PREFIX "fqdn" +#define FQDN_FORMAT FQDN_TAG " \"%s\"; # added by NetworkManager" #define ALSOREQ_TAG "also request " @@ -205,13 +206,14 @@ nm_dhcp_dhclient_create_config (const char *interface, GBytes **out_new_client_id) { GString *new_contents; - GPtrArray *alsoreq; + GPtrArray *alsoreq, *fqdn_opts; int i; g_return_val_if_fail (!anycast_addr || nm_utils_hwaddr_valid (anycast_addr, ETH_ALEN), NULL); new_contents = g_string_new (_("# Created by NetworkManager\n")); alsoreq = g_ptr_array_sized_new (5); + fqdn_opts = g_ptr_array_sized_new (5); if (orig_contents) { char **lines, **line; @@ -244,6 +246,14 @@ nm_dhcp_dhclient_create_config (const char *interface, continue; } + /* To let user's FQDN options (except "fqdn.fqdn") override the + * default ones set by NM, add them later + */ + if (!strncmp (p, FQDN_TAG_PREFIX, NM_STRLEN (FQDN_TAG_PREFIX))) { + g_ptr_array_add (fqdn_opts, g_strdup (p + NM_STRLEN (FQDN_TAG_PREFIX))); + continue; + } + /* Ignore 'script' since we pass our own */ if (g_str_has_prefix (p, "script ")) continue; @@ -320,6 +330,16 @@ nm_dhcp_dhclient_create_config (const char *interface, } g_ptr_array_free (alsoreq, TRUE); + for (i = 0; i < fqdn_opts->len; i++) { + char *t = g_ptr_array_index (fqdn_opts, i); + + if (i == 0) + g_string_append_printf (new_contents, "\n# FQDN options from %s\n", orig_path); + g_string_append_printf (new_contents, FQDN_TAG_PREFIX "%s\n", t); + g_free (t); + } + g_ptr_array_free (fqdn_opts, TRUE); + g_string_append_c (new_contents, '\n'); if (anycast_addr) { |