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.
This commit is contained in:
Thomas Haller 2021-06-24 15:14:45 +02:00
parent dbe4803d84
commit 05aa751957
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
6 changed files with 33 additions and 31 deletions

View file

@ -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",

View file

@ -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,

View file

@ -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__ */

View file

@ -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;

View file

@ -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);
}

View file

@ -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__ */