static bool arg_wait = false;
static const char *arg_unit = NULL;
static char *arg_description = NULL;
-static const char *arg_slice = NULL;
+static char *arg_slice = NULL;
static bool arg_slice_inherit = false;
static bool arg_expand_environment = true;
static bool arg_send_sighup = false;
static const char *arg_host = NULL;
static RuntimeScope arg_runtime_scope = RUNTIME_SCOPE_SYSTEM;
static const char *arg_service_type = NULL;
-static const char *arg_exec_user = NULL;
+static char *arg_exec_user = NULL;
static const char *arg_exec_group = NULL;
static int arg_nice = 0;
static bool arg_nice_set = false;
static bool arg_empower = false;
STATIC_DESTRUCTOR_REGISTER(arg_description, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_slice, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_exec_user, freep);
STATIC_DESTRUCTOR_REGISTER(arg_environment, strv_freep);
STATIC_DESTRUCTOR_REGISTER(arg_property, strv_freep);
STATIC_DESTRUCTOR_REGISTER(arg_path_property, strv_freep);
break;
case ARG_SLICE:
- arg_slice = optarg;
+ r = free_and_strdup_warn(&arg_slice, optarg);
+ if (r < 0)
+ return r;
break;
case ARG_SLICE_INHERIT:
break;
case ARG_EXEC_USER:
- arg_exec_user = optarg;
+ r = free_and_strdup_warn(&arg_exec_user, optarg);
+ if (r < 0)
+ return r;
break;
case ARG_EXEC_GROUP:
break;
case ARG_SLICE:
- arg_slice = optarg;
+ r = free_and_strdup_warn(&arg_slice, optarg);
+ if (r < 0)
+ return r;
break;
case ARG_SLICE_INHERIT:
break;
case 'u':
- arg_exec_user = optarg;
+ r = free_and_strdup_warn(&arg_exec_user, optarg);
+ if (r < 0)
+ return r;
break;
case 'g':
}
if (arg_exec_user) {
- const char *home, *shell;
+ const char *un = arg_exec_user, *home, *shell;
uid_t uid;
gid_t gid;
- r = get_user_creds(&arg_exec_user, &uid, &gid, &home, &shell,
+ r = get_user_creds(&un, &uid, &gid, &home, &shell,
USER_CREDS_CLEAN|USER_CREDS_SUPPRESS_PLACEHOLDER|USER_CREDS_PREFER_NSS);
if (r < 0)
return log_error_errno(r, "Failed to resolve user '%s': %s",
arg_exec_user, STRERROR_USER(r));
+ r = free_and_strdup_warn(&arg_exec_user, un);
+ if (r < 0)
+ return r;
+
if (home) {
r = strv_extendf(&user_env, "HOME=%s", home);
if (r < 0)