diff --git a/src/core/nm-core-utils.c b/src/core/nm-core-utils.c index 085c806c12..25d1ec807f 100644 --- a/src/core/nm-core-utils.c +++ b/src/core/nm-core-utils.c @@ -5222,7 +5222,7 @@ again: * @shortened: (out) (transfer full): on return, the shortened hostname * * Checks whether the input hostname is valid. If not, tries to shorten it - * to HOST_NAME_MAX or to the first dot, whatever comes earlier. + * to HOST_NAME_MAX (64) or to the first dot, whatever comes earlier. * The new hostname is returned in @shortened. * * Returns: %TRUE if the input hostname was already valid or if was shortened @@ -5248,7 +5248,7 @@ nm_utils_shorten_hostname(const char *hostname, char **shortened) l = (dot - hostname); else l = strlen(hostname); - l = MIN(l, (gsize) HOST_NAME_MAX); + l = MIN(l, (gsize) NM_HOST_NAME_MAX); s = g_strndup(hostname, l); diff --git a/src/core/tests/test-utils.c b/src/core/tests/test-utils.c index ad9950ddb4..2bcb6f6946 100644 --- a/src/core/tests/test-utils.c +++ b/src/core/tests/test-utils.c @@ -234,8 +234,10 @@ test_shorten_hostname(void) * system configuration (`getconf HOST_NAME_MAX`). On Linux * it's typically 64 characters, but POSIX allows up to * 255 characters. + * + * We use our own define NM_HOST_NAME_MAX, which is always 64. */ - maxhost = g_strnfill(HOST_NAME_MAX, 'a'); + maxhost = g_strnfill(NM_HOST_NAME_MAX, 'a'); do_test_shorten_hostname("name1", TRUE, NULL); diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 0756bad45b..f305a7aa13 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -6585,7 +6585,7 @@ nm_utils_validate_hostname(const char *hostname) if (dot) return FALSE; - return (p - hostname <= HOST_NAME_MAX); + return (p - hostname <= NM_HOST_NAME_MAX); } /*****************************************************************************/ @@ -7246,7 +7246,7 @@ nm_hostname_is_valid(const char *s, gboolean trailing_dot) /* Note that HOST_NAME_MAX is 64 on Linux, but DNS allows domain names up to * 255 characters */ - if (p - s > HOST_NAME_MAX) + if (p - s > NM_HOST_NAME_MAX) return FALSE; return TRUE; diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 14b6302662..ec57190e50 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -3256,6 +3256,12 @@ char *_nm_utils_format_variant_attributes(GHashTable *a /*****************************************************************************/ +/* glibc defines HOST_NAME_MAX as 64. Also Linux' sethostname() enforces + * that (__NEW_UTS_LEN). However, musl sets this to 255. + * + * At some places, we want to follow Linux. Hardcode our own define. */ +#define NM_HOST_NAME_MAX 64 + gboolean nm_utils_is_localhost(const char *name); gboolean nm_utils_is_specific_hostname(const char *name); diff --git a/src/libnm-glib-aux/tests/test-shared-general.c b/src/libnm-glib-aux/tests/test-shared-general.c index 15e709b62c..ccd1b1c37b 100644 --- a/src/libnm-glib-aux/tests/test-shared-general.c +++ b/src/libnm-glib-aux/tests/test-shared-general.c @@ -2120,6 +2120,8 @@ test_hostname_is_valid(void) g_assert(!nm_hostname_is_valid("foo..bar", FALSE)); g_assert(!nm_hostname_is_valid("foo.bar..", FALSE)); + G_STATIC_ASSERT_EXPR(NM_HOST_NAME_MAX <= HOST_NAME_MAX); + #define _assert_hostname_length(n, valid) \ G_STMT_START \ { \ @@ -2132,16 +2134,15 @@ test_hostname_is_valid(void) } \ G_STMT_END - _assert_hostname_length(HOST_NAME_MAX - 10, TRUE); - _assert_hostname_length(HOST_NAME_MAX - 1, TRUE); - _assert_hostname_length(HOST_NAME_MAX, TRUE); - _assert_hostname_length(HOST_NAME_MAX + 1, FALSE); - _assert_hostname_length(HOST_NAME_MAX + 10, FALSE); + _assert_hostname_length(NM_HOST_NAME_MAX - 10, TRUE); + _assert_hostname_length(NM_HOST_NAME_MAX - 1, TRUE); + _assert_hostname_length(NM_HOST_NAME_MAX, TRUE); + _assert_hostname_length(NM_HOST_NAME_MAX + 1, FALSE); + _assert_hostname_length(NM_HOST_NAME_MAX + 10, FALSE); - g_assert(nm_hostname_is_valid( - "au-xph5-rvgrdsb5hcxc-47et3a5vvkrc-server-wyoz4elpdpe3.openstack.local", - FALSE) - == (HOST_NAME_MAX >= 69)); + g_assert(!nm_hostname_is_valid( + "au-xph5-rvgrdsb5hcxc-47et3a5vvkrc-server-wyoz4elpdpe3.openstack.local", + FALSE)); g_assert(nm_hostname_is_valid("foobar", TRUE)); g_assert(nm_hostname_is_valid("foobar.com", TRUE)); @@ -2160,13 +2161,11 @@ test_hostname_is_valid(void) g_assert(!nm_hostname_is_valid("foo.bar..", TRUE)); g_assert( nm_hostname_is_valid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", - TRUE) - == (HOST_NAME_MAX >= 64)); + TRUE)); g_assert( - nm_hostname_is_valid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", - TRUE) - == (HOST_NAME_MAX >= 104)); + !nm_hostname_is_valid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + TRUE)); } /*****************************************************************************/