forked from pool/systemd
fd6833b5af
Added 1001-unit-name-generate-a-clear-error-code-when-convertin.patch Added 1002-basic-unit-name-do-not-use-strdupa-on-a-path.patch Added 1003-basic-unit-name-adjust-comments.patch These patches will be moved to the git repo once the bug will become public. OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=1169
64 lines
4.0 KiB
Diff
64 lines
4.0 KiB
Diff
From 83f392a392067d61be24eb720ff0cf1da7f1892b Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Tue, 1 Jun 2021 19:43:55 +0200
|
|
Subject: [PATCH 1001/1003] unit-name: generate a clear error code when
|
|
converting an overly long fs path to a unit name
|
|
|
|
(cherry picked from commit 9d5acfab20c5f1177d877d0bec18063c0a6c5929)
|
|
|
|
[fbui: adjust context]
|
|
---
|
|
src/basic/unit-name.c | 6 ++++++
|
|
src/test/test-unit-name.c | 4 ++--
|
|
2 files changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
|
|
index 532f8fa048..85dcba6cb7 100644
|
|
--- a/src/basic/unit-name.c
|
|
+++ b/src/basic/unit-name.c
|
|
@@ -528,6 +528,9 @@ int unit_name_from_path(const char *path, const char *suffix, char **ret) {
|
|
if (!s)
|
|
return -ENOMEM;
|
|
|
|
+ if (strlen(s) >= UNIT_NAME_MAX) /* Return a slightly more descriptive error for this specific condition */
|
|
+ return -ENAMETOOLONG;
|
|
+
|
|
/* Refuse this if this got too long or for some other reason didn't result in a valid name */
|
|
if (!unit_name_is_valid(s, UNIT_NAME_PLAIN))
|
|
return -EINVAL;
|
|
@@ -559,6 +562,9 @@ int unit_name_from_path_instance(const char *prefix, const char *path, const cha
|
|
if (!s)
|
|
return -ENOMEM;
|
|
|
|
+ if (strlen(s) >= UNIT_NAME_MAX) /* Return a slightly more descriptive error for this specific condition */
|
|
+ return -ENAMETOOLONG;
|
|
+
|
|
/* Refuse this if this got too long or for some other reason didn't result in a valid name */
|
|
if (!unit_name_is_valid(s, UNIT_NAME_INSTANCE))
|
|
return -EINVAL;
|
|
diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
|
|
index ece78aa548..c0b79715e1 100644
|
|
--- a/src/test/test-unit-name.c
|
|
+++ b/src/test/test-unit-name.c
|
|
@@ -130,7 +130,7 @@ static void test_unit_name_from_path(void) {
|
|
test_unit_name_from_path_one("///", ".mount", "-.mount", 0);
|
|
test_unit_name_from_path_one("/foo/../bar", ".mount", NULL, -EINVAL);
|
|
test_unit_name_from_path_one("/foo/./bar", ".mount", NULL, -EINVAL);
|
|
- test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", NULL, -EINVAL);
|
|
+ test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", NULL, -ENAMETOOLONG);
|
|
}
|
|
|
|
static void test_unit_name_from_path_instance_one(const char *pattern, const char *path, const char *suffix, const char *expected, int ret) {
|
|
@@ -160,7 +160,7 @@ static void test_unit_name_from_path_instance(void) {
|
|
test_unit_name_from_path_instance_one("waldo", "..", ".mount", NULL, -EINVAL);
|
|
test_unit_name_from_path_instance_one("waldo", "/foo", ".waldi", NULL, -EINVAL);
|
|
test_unit_name_from_path_instance_one("wa--ldo", "/--", ".mount", "wa--ldo@\\x2d\\x2d.mount", 0);
|
|
- test_unit_name_from_path_instance_one("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "/waldo", ".mount", NULL, -EINVAL);
|
|
+ test_unit_name_from_path_instance_one("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "/waldo", ".mount", NULL, -ENAMETOOLONG);
|
|
}
|
|
|
|
static void test_unit_name_to_path_one(const char *unit, const char *path, int ret) {
|
|
--
|
|
2.26.2
|
|
|