From 95c7dc33087ae99db8ab8b6614550541a8e7187f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 1 Jun 2026 10:35:31 +0200 Subject: [PATCH] hostname-util: don't allow machine tags to begin/end with '-' or '.' --- src/basic/hostname-util.c | 6 ++++++ src/test/test-hostname-util.c | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c index baa735ab10..e12ec01af2 100644 --- a/src/basic/hostname-util.c +++ b/src/basic/hostname-util.c @@ -259,6 +259,12 @@ bool machine_tag_is_valid(const char *s) { if (n <= 0 || n >= 256) return false; + /* Don't allow "-" and "." as first or last char. (This is load-bearing, we want that "+"/"-" can be + * used as prefix for adding/removing tags from the list). */ + if (strchr("-.", s[0]) || + strchr("-.", s[n-1])) + return false; + return in_charset(s, ALPHANUMERICAL "-."); } diff --git a/src/test/test-hostname-util.c b/src/test/test-hostname-util.c index 1a3cb1dfff..8ec4034af7 100644 --- a/src/test/test-hostname-util.c +++ b/src/test/test-hostname-util.c @@ -132,6 +132,10 @@ TEST(machine_tag_is_valid) { assert_se(!machine_tag_is_valid("fööbar")); /* non-ASCII */ assert_se(!machine_tag_is_valid("foo/bar")); assert_se(!machine_tag_is_valid("foo_bar")); + assert_se(!machine_tag_is_valid("-foo")); + assert_se(!machine_tag_is_valid("foo-")); + assert_se(!machine_tag_is_valid(".foo")); + assert_se(!machine_tag_is_valid("foo.")); /* Length boundary: 255 characters is fine, 256 is too long */ _cleanup_free_ char *max = strrep("a", 255), *over = strrep("a", 256);