mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
sysusers: add a generic specifier table for common cases
This moves the definition of the specifier table consisting only of system and /tmp specifiers into generic code so that we can share it. This patch only adds one user of it for now. Follow-up patches will add more.
This commit is contained in:
@@ -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,
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user