From: Lennart Poettering Date: Fri, 18 Jun 2010 21:25:19 +0000 (+0200) Subject: execute: handle format strings in User= and other directives X-Git-Tag: v1~147 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=f2d3769a161f5b341b20321ca7cb3f689387f410 execute: handle format strings in User= and other directives --- diff --git a/src/execute.c b/src/execute.c index ed10ea2bf..28baeedcf 100644 --- a/src/execute.c +++ b/src/execute.c @@ -1517,9 +1517,9 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { } if (c->user) - fprintf(f, "%sUser: %s", prefix, c->user); + fprintf(f, "%sUser: %s\n", prefix, c->user); if (c->group) - fprintf(f, "%sGroup: %s", prefix, c->group); + fprintf(f, "%sGroup: %s\n", prefix, c->group); if (strv_length(c->supplementary_groups) > 0) { fprintf(f, "%sSupplementaryGroups:", prefix); @@ -1528,7 +1528,7 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { } if (c->pam_name) - fprintf(f, "%sPAMName: %s", prefix, c->pam_name); + fprintf(f, "%sPAMName: %s\n", prefix, c->pam_name); if (strv_length(c->read_write_dirs) > 0) { fprintf(f, "%sReadWriteDirs:", prefix); diff --git a/src/load-fragment.c b/src/load-fragment.c index 88fedceea..d6a35f7ff 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -154,7 +154,7 @@ static int config_parse_names( return 0; } -static int config_parse_description( +static int config_parse_string_printf( const char *filename, unsigned line, const char *section, @@ -164,23 +164,24 @@ static int config_parse_description( void *userdata) { Unit *u = userdata; + char **s = data; char *k; assert(filename); assert(lvalue); assert(rvalue); - assert(data); + assert(s); + assert(u); if (!(k = unit_full_printf(u, rvalue))) return -ENOMEM; - free(u->meta.description); - + free(*s); if (*k) - u->meta.description = k; + *s = k; else { free(k); - u->meta.description = NULL; + *s = NULL; } return 0; @@ -1359,7 +1360,7 @@ static void dump_items(FILE *f, const ConfigItem *items) { { config_parse_usec, "SECONDS" }, { config_parse_path_strv, "PATH [...]" }, { config_parse_mount_flags, "MOUNTFLAG [...]" }, - { config_parse_description, "DESCRIPTION" }, + { config_parse_string_printf, "STRING" }, { config_parse_timer, "TIMER" }, { config_parse_timer_unit, "NAME" }, { config_parse_path_spec, "PATH" }, @@ -1412,8 +1413,8 @@ static int load_from_path(Unit *u, const char *path) { #define EXEC_CONTEXT_CONFIG_ITEMS(context, section) \ { "WorkingDirectory", config_parse_path, &(context).working_directory, section }, \ { "RootDirectory", config_parse_path, &(context).root_directory, section }, \ - { "User", config_parse_string, &(context).user, section }, \ - { "Group", config_parse_string, &(context).group, section }, \ + { "User", config_parse_string_printf, &(context).user, section }, \ + { "Group", config_parse_string_printf, &(context).group, section }, \ { "SupplementaryGroups", config_parse_strv, &(context).supplementary_groups, section }, \ { "Nice", config_parse_nice, &(context), section }, \ { "OOMAdjust", config_parse_oom_adjust, &(context), section }, \ @@ -1430,7 +1431,7 @@ static int load_from_path(Unit *u, const char *path) { { "StandardOutput", config_parse_output, &(context).std_output, section }, \ { "StandardError", config_parse_output, &(context).std_error, section }, \ { "TTYPath", config_parse_path, &(context).tty_path, section }, \ - { "SyslogIdentifier", config_parse_string, &(context).syslog_identifier, section }, \ + { "SyslogIdentifier", config_parse_string_printf, &(context).syslog_identifier, section }, \ { "SyslogFacility", config_parse_facility, &(context).syslog_priority, section }, \ { "SyslogLevel", config_parse_level, &(context).syslog_priority, section }, \ { "SyslogNoPrefix", config_parse_bool, &(context).syslog_no_prefix, section }, \ @@ -1460,12 +1461,12 @@ static int load_from_path(Unit *u, const char *path) { { "InaccessibleDirectories",config_parse_path_strv, &(context).inaccessible_dirs, section }, \ { "PrivateTmp", config_parse_bool, &(context).private_tmp, section }, \ { "MountFlags", config_parse_mount_flags, &(context), section }, \ - { "TCPWrapName", config_parse_string, &(context).tcpwrap_name, section }, \ - { "PAMName", config_parse_string, &(context).pam_name, section } + { "TCPWrapName", config_parse_string_printf, &(context).tcpwrap_name, section }, \ + { "PAMName", config_parse_string_printf, &(context).pam_name, section } const ConfigItem items[] = { { "Names", config_parse_names, u, "Unit" }, - { "Description", config_parse_description, u, "Unit" }, + { "Description", config_parse_string_printf, &u->meta.description, "Unit" }, { "Requires", config_parse_deps, UINT_TO_PTR(UNIT_REQUIRES), "Unit" }, { "RequiresOverridable", config_parse_deps, UINT_TO_PTR(UNIT_REQUIRES_OVERRIDABLE), "Unit" }, { "Requisite", config_parse_deps, UINT_TO_PTR(UNIT_REQUISITE), "Unit" }, @@ -1495,7 +1496,7 @@ static int load_from_path(Unit *u, const char *path) { { "SysVStartPriority", config_parse_sysv_priority, &u->service.sysv_start_priority, "Service" }, { "KillMode", config_parse_kill_mode, &u->service.kill_mode, "Service" }, { "NonBlocking", config_parse_bool, &u->service.exec_context.non_blocking, "Service" }, - { "BusName", config_parse_string, &u->service.bus_name, "Service" }, + { "BusName", config_parse_string_printf, &u->service.bus_name, "Service" }, { "NotifyAccess", config_parse_notify_access, &u->service.notify_access, "Service" }, EXEC_CONTEXT_CONFIG_ITEMS(u->service.exec_context, "Service"),