tmpfiles: add %D specifier resolution

systemd-tmpfiles now resolves the %D specifier to /usr/share
(for the system manager) or $XDG_DATA_HOME (for the user manager).

Closes: https://github.com/systemd/systemd/issues/42010
Signed-off-by: Skye Soss <skye@soss.website>
This commit is contained in:
Skye Soss
2026-06-21 18:20:53 +01:00
committed by Luca Boccassi
parent 1a8a470048
commit a4f7c9589e
5 changed files with 18 additions and 5 deletions
+4
View File
@@ -205,6 +205,7 @@ typedef enum DirectoryType {
DIRECTORY_STATE,
DIRECTORY_CACHE,
DIRECTORY_LOGS,
DIRECTORY_SHARED,
_DIRECTORY_TYPE_MAX,
} DirectoryType;
@@ -293,6 +294,7 @@ static int specifier_directory(
[DIRECTORY_STATE] = { SD_PATH_SYSTEM_STATE_PRIVATE },
[DIRECTORY_CACHE] = { SD_PATH_SYSTEM_STATE_CACHE },
[DIRECTORY_LOGS] = { SD_PATH_SYSTEM_STATE_LOGS },
[DIRECTORY_SHARED] = { SD_PATH_SYSTEM_SHARED },
};
static const struct table_entry paths_user[] = {
@@ -300,6 +302,7 @@ static int specifier_directory(
[DIRECTORY_STATE] = { SD_PATH_USER_STATE_PRIVATE },
[DIRECTORY_CACHE] = { SD_PATH_USER_STATE_CACHE },
[DIRECTORY_LOGS] = { SD_PATH_USER_STATE_PRIVATE, "log" },
[DIRECTORY_SHARED] = { SD_PATH_USER_SHARED },
};
const struct table_entry *paths;
@@ -3907,6 +3910,7 @@ static int parse_line(
{ 'h', specifier_user_home, NULL },
{ 'C', specifier_directory, UINT_TO_PTR(DIRECTORY_CACHE) },
{ 'D', specifier_directory, UINT_TO_PTR(DIRECTORY_SHARED) },
{ 'L', specifier_directory, UINT_TO_PTR(DIRECTORY_LOGS) },
{ 'S', specifier_directory, UINT_TO_PTR(DIRECTORY_STATE) },
{ 't', specifier_directory, UINT_TO_PTR(DIRECTORY_RUNTIME) },