summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-04-25 15:27:01 +0200
committerThomas Haller <thaller@redhat.com>2016-04-25 15:27:27 +0200
commit77f287818c874846a3953cf4b09fac6393051ecf (patch)
tree40c61373799d98787797cf3956153aa720b232d0
parent64e8f0076d0e883619028e7842c48ab6d759d4b0 (diff)
parent316359d8b65030df2ac8b34be926bc752a96802c (diff)
downloadNetworkManager-77f287818c874846a3953cf4b09fac6393051ecf.tar.gz
settings: merge branch 'th/settings-read-hostname'
-rw-r--r--src/settings/nm-settings.c68
1 files changed, 52 insertions, 16 deletions
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index ee6e4f8078..281f299f1f 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -112,6 +112,10 @@ EXPORT(nm_settings_connection_replace_and_commit)
#define PLUGIN_MODULE_PATH "plugin-module-path"
+#if (defined(HOSTNAME_PERSIST_SUSE) + defined(HOSTNAME_PERSIST_SLACKWARE) + defined(HOSTNAME_PERSIST_GENTOO)) > 1
+#error "Can only define one of HOSTNAME_PERSIST_*"
+#endif
+
#if defined(HOSTNAME_PERSIST_SUSE)
#define HOSTNAME_FILE HOSTNAME_FILE_UCASE_HOSTNAME
#elif defined(HOSTNAME_PERSIST_SLACKWARE)
@@ -476,27 +480,58 @@ get_plugin (NMSettings *self, guint32 capability)
static gchar *
read_hostname_gentoo (const char *path)
{
- gchar *contents = NULL, *result = NULL, *tmp;
- gchar **all_lines = NULL;
- guint line_num, i;
+ gs_free char *contents = NULL;
+ gs_strfreev char **all_lines = NULL;
+ const char *tmp;
+ guint i;
if (!g_file_get_contents (path, &contents, NULL, NULL))
return NULL;
+
all_lines = g_strsplit (contents, "\n", 0);
- line_num = g_strv_length (all_lines);
- for (i = 0; i < line_num; i++) {
+ for (i = 0; all_lines[i]; i++) {
g_strstrip (all_lines[i]);
if (all_lines[i][0] == '#' || all_lines[i][0] == '\0')
continue;
if (g_str_has_prefix (all_lines[i], "hostname=")) {
tmp = &all_lines[i][NM_STRLEN ("hostname=")];
- result = g_shell_unquote (tmp, NULL);
- break;
+ return g_shell_unquote (tmp, NULL);
}
}
- g_strfreev (all_lines);
- g_free (contents);
- return result;
+ return NULL;
+}
+#endif
+
+#if defined(HOSTNAME_PERSIST_SLACKWARE)
+static gchar *
+read_hostname_slackware (const char *path)
+{
+ gs_free char *contents = NULL;
+ gs_strfreev char **all_lines = NULL;
+ char *tmp;
+ guint i, j = 0;
+
+ if (!g_file_get_contents (path, &contents, NULL, NULL))
+ return NULL;
+
+ all_lines = g_strsplit (contents, "\n", 0);
+ for (i = 0; all_lines[i]; i++) {
+ g_strstrip (all_lines[i]);
+ if (all_lines[i][0] == '#' || all_lines[i][0] == '\0')
+ continue;
+ tmp = &all_lines[i][0];
+ /* We only want up to the first '.' -- the rest of the */
+ /* fqdn is defined in /etc/hosts */
+ while (tmp[j] != '\0') {
+ if (tmp[j] == '.') {
+ tmp[j] = '\0';
+ break;
+ }
+ j++;
+ }
+ return g_shell_unquote (tmp, NULL);
+ }
+ return NULL;
}
#endif
@@ -543,18 +578,19 @@ nm_settings_get_hostname (NMSettings *self)
goto out;
}
-#if defined(HOSTNAME_PERSIST_GENTOO)
- hostname = read_hostname_gentoo (priv->hostname.file);
-#else
-
#if defined(HOSTNAME_PERSIST_SUSE)
if (priv->hostname.dhcp_monitor_id && hostname_is_dynamic ())
return NULL;
#endif
+
+#if defined(HOSTNAME_PERSIST_GENTOO)
+ hostname = read_hostname_gentoo (priv->hostname.file);
+#elif defined(HOSTNAME_PERSIST_SLACKWARE)
+ hostname = read_hostname_slackware (priv->hostname.file);
+#else
if (g_file_get_contents (priv->hostname.file, &hostname, NULL, NULL))
g_strchomp (hostname);
-
-#endif /* HOSTNAME_PERSIST_GENTOO */
+#endif
out:
if (hostname && !hostname[0]) {