/* fish username from passwd */
username = s->exec_context.user;
- r = get_user_creds(&username, NULL, NULL, NULL);
+ r = get_user_creds(&username, NULL, NULL, NULL, NULL);
if (r < 0)
return NULL;
}
username = s->exec_context.user;
- r = get_user_creds(&username, NULL, NULL, &home);
+ r = get_user_creds(&username, NULL, NULL, &home, NULL);
if (r < 0)
return NULL;
return strdup(home);
}
+static char *specifier_user_shell(char specifier, void *data, void *userdata) {
+ Service *s = userdata;
+ int r;
+ const char *username, *shell;
+
+ /* return HOME if set, otherwise from passwd */
+ if (!s->exec_context.user) {
+ char *sh;
+
+ r = get_shell(&sh);
+ if (r < 0)
+ return strdup("/bin/sh");
+
+ return sh;
+ }
+
+ username = s->exec_context.user;
+ r = get_user_creds(&username, NULL, NULL, NULL, &shell);
+ if (r < 0)
+ return strdup("/bin/sh");
+
+ return strdup(shell);
+}
+
char *unit_name_printf(Unit *u, const char* format) {
/*
{ 't', specifier_runtime, NULL },
{ 'u', specifier_user_name, NULL },
{ 'h', specifier_user_home, NULL },
+ { 's', specifier_user_shell, NULL },
{ 0, NULL, NULL }
};
return 0;
}
+int unit_patch_working_directory(Unit *u, ExecContext *c) {
+ assert(u);
+ assert(c);
+
+ if (u->manager->running_as != MANAGER_USER)
+ return 0;
+
+ if (c->working_directory)
+ return 0;
+
+ return get_home_dir(&c->working_directory);
+}
+
static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
[UNIT_ACTIVE] = "active",
[UNIT_RELOADING] = "reloading",