summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-06-24 15:14:45 +0200
committerThomas Haller <thaller@redhat.com>2021-06-28 14:32:05 +0200
commit05aa7519572d0c6985944a617b469e3fb3eb3095 (patch)
treec932f6e83130980f759daaca6746ecd5c5dffda5
parentdbe4803d846638fa65b1a735595341d5a5423cf6 (diff)
downloadNetworkManager-05aa7519572d0c6985944a617b469e3fb3eb3095.tar.gz
core,glib-aux: move nm_hostname_manager_validate_hostname() to shared-utils
This function is badly named, because it has no NMHostnameManager self argument. It's just a simple function that entirely operates on a string argument. Move it away from "nm-hostname-manager.h" to "libnm-glib-aux/nm-shared-utils.h". Hostname handling is complicated enough. Simple string validation functions should not obscure the view on the complicated parts.
-rw-r--r--src/core/devices/nm-device.c2
-rw-r--r--src/core/nm-hostname-manager.c27
-rw-r--r--src/core/nm-hostname-manager.h2
-rw-r--r--src/core/settings/nm-settings.c2
-rw-r--r--src/libnm-glib-aux/nm-shared-utils.c29
-rw-r--r--src/libnm-glib-aux/nm-shared-utils.h2
6 files changed, 33 insertions, 31 deletions
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index d963863353..1dd998badd 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -17653,7 +17653,7 @@ hostname_dns_lookup_callback(GObject *source, GAsyncResult *result, gpointer use
gboolean valid;
resolver->hostname = g_steal_pointer(&output);
- valid = nm_hostname_manager_validate_hostname(resolver->hostname);
+ valid = nm_utils_validate_hostname(resolver->hostname);
_LOGD(LOGD_DNS,
"hostname-from-dns: lookup done for %s, result %s%s%s%s",
diff --git a/src/core/nm-hostname-manager.c b/src/core/nm-hostname-manager.c
index e79cb5274d..12610c0c0f 100644
--- a/src/core/nm-hostname-manager.c
+++ b/src/core/nm-hostname-manager.c
@@ -389,33 +389,6 @@ nm_hostname_manager_write_hostname(NMHostnameManager *self, const char *hostname
return TRUE;
}
-gboolean
-nm_hostname_manager_validate_hostname(const char *hostname)
-{
- const char *p;
- gboolean dot = TRUE;
-
- if (!hostname || !hostname[0])
- return FALSE;
-
- for (p = hostname; *p; p++) {
- if (*p == '.') {
- if (dot)
- return FALSE;
- dot = TRUE;
- } else {
- if (!g_ascii_isalnum(*p) && (*p != '-') && (*p != '_'))
- return FALSE;
- dot = FALSE;
- }
- }
-
- if (dot)
- return FALSE;
-
- return (p - hostname <= HOST_NAME_MAX);
-}
-
static void
hostname_file_changed_cb(GFileMonitor * monitor,
GFile * file,
diff --git a/src/core/nm-hostname-manager.h b/src/core/nm-hostname-manager.h
index c13167e7f1..ff109e7e89 100644
--- a/src/core/nm-hostname-manager.h
+++ b/src/core/nm-hostname-manager.h
@@ -45,6 +45,4 @@ void nm_hostname_manager_set_transient_hostname(NMHostnameManager * s
gboolean nm_hostname_manager_get_transient_hostname(NMHostnameManager *self, char **hostname);
-gboolean nm_hostname_manager_validate_hostname(const char *hostname);
-
#endif /* __NM_HOSTNAME_MANAGER_H__ */
diff --git a/src/core/settings/nm-settings.c b/src/core/settings/nm-settings.c
index c876ea148c..ee6ac59314 100644
--- a/src/core/settings/nm-settings.c
+++ b/src/core/settings/nm-settings.c
@@ -3441,7 +3441,7 @@ impl_settings_save_hostname(NMDBusObject * obj,
g_variant_get(parameters, "(&s)", &hostname);
/* Minimal validation of the hostname */
- if (!nm_hostname_manager_validate_hostname(hostname)) {
+ if (!nm_utils_validate_hostname(hostname)) {
error_code = NM_SETTINGS_ERROR_INVALID_HOSTNAME;
error_reason = "The hostname was too long or contained invalid characters";
goto err;
diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c
index 908f6bec8e..68598728cb 100644
--- a/src/libnm-glib-aux/nm-shared-utils.c
+++ b/src/libnm-glib-aux/nm-shared-utils.c
@@ -6356,3 +6356,32 @@ nm_utils_get_process_exit_status_desc(int status)
else
return g_strdup_printf("exited with unknown status 0x%x", status);
}
+
+/*****************************************************************************/
+
+gboolean
+nm_utils_validate_hostname(const char *hostname)
+{
+ const char *p;
+ gboolean dot = TRUE;
+
+ if (!hostname || !hostname[0])
+ return FALSE;
+
+ for (p = hostname; *p; p++) {
+ if (*p == '.') {
+ if (dot)
+ return FALSE;
+ dot = TRUE;
+ } else {
+ if (!g_ascii_isalnum(*p) && (*p != '-') && (*p != '_'))
+ return FALSE;
+ dot = FALSE;
+ }
+ }
+
+ if (dot)
+ return FALSE;
+
+ return (p - hostname <= HOST_NAME_MAX);
+}
diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h
index 49de9e12b9..803a730c6a 100644
--- a/src/libnm-glib-aux/nm-shared-utils.h
+++ b/src/libnm-glib-aux/nm-shared-utils.h
@@ -2992,4 +2992,6 @@ void nm_crypto_md5_hash(const guint8 *salt,
char *nm_utils_get_process_exit_status_desc(int status);
+gboolean nm_utils_validate_hostname(const char *hostname);
+
#endif /* __NM_SHARED_UTILS_H__ */