diff options
author | Francesco Giudici <fgiudici@redhat.com> | 2017-03-02 19:18:49 +0100 |
---|---|---|
committer | Francesco Giudici <fgiudici@redhat.com> | 2017-03-24 15:18:09 +0100 |
commit | 2eba42b4ab46261f34d075d46f7a5e5347eaf889 (patch) | |
tree | 447cacf6a2f7b634e11c5f2f4f7b20796ca9fe18 /src | |
parent | e22af1aa9e361c6b7338ef64abfd28cd3bbafccd (diff) | |
download | NetworkManager-2eba42b4ab46261f34d075d46f7a5e5347eaf889.tar.gz |
policy: add support to configurable hostname mode
Diffstat (limited to 'src')
-rw-r--r-- | src/nm-config.h | 1 | ||||
-rw-r--r-- | src/nm-policy.c | 20 | ||||
-rw-r--r-- | src/nm-policy.h | 17 |
3 files changed, 38 insertions, 0 deletions
diff --git a/src/nm-config.h b/src/nm-config.h index 9930df33e2..933d0b40d4 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -62,6 +62,7 @@ #define NM_CONFIG_KEYFILE_KEY_MAIN_AUTH_POLKIT "auth-polkit" #define NM_CONFIG_KEYFILE_KEY_MAIN_DHCP "dhcp" #define NM_CONFIG_KEYFILE_KEY_MAIN_DEBUG "debug" +#define NM_CONFIG_KEYFILE_KEY_MAIN_HOSTNAME_MODE "hostname-mode" #define NM_CONFIG_KEYFILE_KEY_LOGGING_BACKEND "backend" #define NM_CONFIG_KEYFILE_KEY_CONFIG_ENABLE "enable" #define NM_CONFIG_KEYFILE_KEY_ATOMIC_SECTION_WAS ".was" diff --git a/src/nm-policy.c b/src/nm-policy.c index 2b71d13538..e88872308e 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -47,6 +47,7 @@ #include "settings/nm-settings-connection.h" #include "nm-dhcp4-config.h" #include "nm-dhcp6-config.h" +#include "nm-config.h" /*****************************************************************************/ @@ -85,6 +86,7 @@ typedef struct { guint schedule_activate_all_id; /* idle handler for schedule_activate_all(). */ + NMPolicyHostnameMode hostname_mode; char *orig_hostname; /* hostname at NM start time */ char *cur_hostname; /* hostname we want to assign */ char *last_hostname; /* last hostname NM set (to detect if someone else changed it in the meanwhile) */ @@ -591,6 +593,9 @@ update_system_hostname (NMPolicy *self, NMDevice *best4, NMDevice *best6) g_return_if_fail (self != NULL); + if (priv->hostname_mode == NM_POLICY_HOSTNAME_MODE_NONE) + return; + nm_clear_g_cancellable (&priv->lookup_cancellable); /* Check if the hostname was set externally to NM, so that in that case @@ -683,6 +688,9 @@ update_system_hostname (NMPolicy *self, NMDevice *best4, NMDevice *best6) if (external_hostname) return; + if (priv->hostname_mode == NM_POLICY_HOSTNAME_MODE_DHCP) + return; + if (!best4 && !best6) { /* No best device; fall back to the last hostname set externally * to NM or if there wasn't one, 'localhost.localdomain' @@ -2257,6 +2265,18 @@ static void nm_policy_init (NMPolicy *self) { NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self); + const char *hostname_mode; + + hostname_mode = nm_config_data_get_value (NM_CONFIG_GET_DATA_ORIG, + NM_CONFIG_KEYFILE_GROUP_MAIN, + NM_CONFIG_KEYFILE_KEY_MAIN_HOSTNAME_MODE, + NM_CONFIG_GET_VALUE_STRIP | NM_CONFIG_GET_VALUE_NO_EMPTY); + if (nm_streq0 (hostname_mode, "none")) + priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_NONE; + else if (nm_streq0 (hostname_mode, "dhcp")) + priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_DHCP; + else /* default - full mode */ + priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_FULL; priv->devices = g_hash_table_new (NULL, NULL); priv->ip6_prefix_delegations = g_array_new (FALSE, FALSE, sizeof (IP6PrefixDelegation)); diff --git a/src/nm-policy.h b/src/nm-policy.h index 64cac4fe70..2c96e6d090 100644 --- a/src/nm-policy.h +++ b/src/nm-policy.h @@ -47,4 +47,21 @@ NMDevice *nm_policy_get_default_ip6_device (NMPolicy *policy); NMDevice *nm_policy_get_activating_ip4_device (NMPolicy *policy); NMDevice *nm_policy_get_activating_ip6_device (NMPolicy *policy); +/** + * NMPolicyHostnameMode + * @NM_POLICY_HOSTNAME_MODE_NONE: never update the transient hostname. + * @NM_POLICY_HOSTNAME_MODE_DHCP: only hostname from DHCP hostname + * options are eligible to be set as transient hostname. + * @NM_POLICY_HOSTNAME_MODE_FULL: NM will try to update the hostname looking + * to current static hostname, DHCP options, reverse IP lookup and externally + * set hostnames. + * + * NMPolicy's hostname update policy + */ +typedef enum { + NM_POLICY_HOSTNAME_MODE_NONE, + NM_POLICY_HOSTNAME_MODE_DHCP, + NM_POLICY_HOSTNAME_MODE_FULL, +} NMPolicyHostnameMode; + #endif /* __NETWORKMANAGER_POLICY_H__ */ |