mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-13 02:20:33 +01:00
all: hardcode HOST_NAME_MAX to 64
On glibc, HOST_NAME_MAX is defined as 64. Also, Linux' sethostname() enforces that limit (__NEW_UTS_LEN). Also, `man gethostname` comments that HOST_NAME_MAX on Linux is 64. However, when building against musl, HOST_NAME_MAX is defined as 255. That seems wrong. We use this limit to validate the hostname, and that should not depend on the libc or on the compilation. Hardcode the value to 64. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1197
This commit is contained in:
parent
da7dbc0304
commit
7fcfc5ccb3
5 changed files with 27 additions and 20 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue