diff options
-rw-r--r-- | src/shared/specifier.c | 6 | ||||
-rw-r--r-- | src/shared/specifier.h | 4 | ||||
-rw-r--r-- | src/sysusers/sysusers.c | 16 |
3 files changed, 14 insertions, 12 deletions
diff --git a/src/shared/specifier.c b/src/shared/specifier.c index f4c73b2741..1712c1c295 100644 --- a/src/shared/specifier.c +++ b/src/shared/specifier.c @@ -364,3 +364,9 @@ int specifier_escape_strv(char **l, char ***ret) { return 0; } + +const Specifier system_and_tmp_specifier_table[] = { + COMMON_SYSTEM_SPECIFIERS, + COMMON_TMP_SPECIFIERS, + {} +}; diff --git a/src/shared/specifier.h b/src/shared/specifier.h index 0c5bb3d0c4..839515da42 100644 --- a/src/shared/specifier.h +++ b/src/shared/specifier.h @@ -80,7 +80,6 @@ int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata { 'w', specifier_os_version_id, NULL }, \ { 'W', specifier_os_variant_id, NULL } - #define COMMON_CREDS_SPECIFIERS \ { 'g', specifier_group_name, NULL }, \ { 'G', specifier_group_id, NULL }, \ @@ -96,3 +95,6 @@ static inline char* specifier_escape(const char *string) { } int specifier_escape_strv(char **l, char ***ret); + +/* A generic specifier table consisting of COMMON_SYSTEM_SPECIFIERS and COMMON_TMP_SPECIFIERS */ +extern const Specifier system_and_tmp_specifier_table[]; diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 5aa3531012..c9eda29b49 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1466,12 +1466,6 @@ static bool item_equal(Item *a, Item *b) { static int parse_line(const char *fname, unsigned line, const char *buffer) { - static const Specifier specifier_table[] = { - COMMON_SYSTEM_SPECIFIERS, - COMMON_TMP_SPECIFIERS, - {} - }; - _cleanup_free_ char *action = NULL, *name = NULL, *resolved_name = NULL, *id = NULL, *resolved_id = NULL, @@ -1515,7 +1509,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { name = mfree(name); if (name) { - r = specifier_printf(name, NAME_MAX, specifier_table, NULL, &resolved_name); + r = specifier_printf(name, NAME_MAX, system_and_tmp_specifier_table, NULL, &resolved_name); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, name); @@ -1530,7 +1524,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { id = mfree(id); if (id) { - r = specifier_printf(id, PATH_MAX-1, specifier_table, NULL, &resolved_id); + r = specifier_printf(id, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_id); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, name); @@ -1541,7 +1535,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { description = mfree(description); if (description) { - r = specifier_printf(description, LONG_LINE_MAX, specifier_table, NULL, &resolved_description); + r = specifier_printf(description, LONG_LINE_MAX, system_and_tmp_specifier_table, NULL, &resolved_description); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, description); @@ -1557,7 +1551,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { home = mfree(home); if (home) { - r = specifier_printf(home, PATH_MAX-1, specifier_table, NULL, &resolved_home); + r = specifier_printf(home, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_home); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, home); @@ -1573,7 +1567,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { shell = mfree(shell); if (shell) { - r = specifier_printf(shell, PATH_MAX-1, specifier_table, NULL, &resolved_shell); + r = specifier_printf(shell, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_shell); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, shell); |