summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-06-18 23:25:19 +0200
committerLennart Poettering <lennart@poettering.net>2010-06-18 23:25:19 +0200
commitf2d3769a161f5b341b20321ca7cb3f689387f410 (patch)
tree1ec8365bcf8be0489acab542bc573d0e098b74c4
parent8c40acf7cba891ff73f86cf75eba058e8cb495ac (diff)
execute: handle format strings in User= and other directives
-rw-r--r--src/execute.c6
-rw-r--r--src/load-fragment.c29
2 files changed, 18 insertions, 17 deletions
diff --git a/src/execute.c b/src/execute.c
index ed10ea2bfb..28baeedcfc 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 88fedceea1..d6a35f7ff0 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"),