<xi:include href="standard-specifiers.xml" xpointer="W"/>
<xi:include href="standard-specifiers.xml" xpointer="T"/>
<xi:include href="standard-specifiers.xml" xpointer="V"/>
+ <row>
+ <entry><literal>%h</literal></entry>
+ <entry>User home directory</entry>
+ <entry>This is the home directory of the <emphasis>user running the service manager instance</emphasis>.</entry>
+ </row>
+ <row>
+ <entry><literal>%u</literal></entry>
+ <entry>Username</entry>
+ <entry>This is the username of the <emphasis>user running the service manager instance</emphasis>.</entry>
+ </row>
+ <row>
+ <entry><literal>%U</literal></entry>
+ <entry>User id</entry>
+ <entry>This is the user id of the <emphasis>user running the service manager instance</emphasis>.</entry>
+ </row>
+ <row>
+ <entry><literal>%g</literal></entry>
+ <entry>Primary group</entry>
+ <entry>This is the primary group of the <emphasis>user running the service manager instance</emphasis>.</entry>
+ </row>
+ <row>
+ <entry><literal>%G</literal></entry>
+ <entry>Primary group id</entry>
+ <entry>This is the primary group id of the <emphasis>user running the service manager instance</emphasis>.</entry>
+ </row>
+ <row>
+ <entry><literal>%s</literal></entry>
+ <entry>User shell</entry>
+ <entry>This is the shell of the <emphasis>user running the service manager instance</emphasis>.</entry>
+ </row>
<xi:include href="standard-specifiers.xml" xpointer="percent"/>
</tbody>
</tgroup>
return 0;
}
+ bool is_system = ltype;
+
+ const Specifier table[] = {
+ COMMON_SYSTEM_SPECIFIERS,
+ COMMON_TMP_SPECIFIERS,
+ COMMON_CREDS_SPECIFIERS(is_system ? LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER),
+ { 'h', specifier_user_home, NULL },
+ { 's', specifier_user_shell, NULL },
+ };
+
for (const char *p = rvalue;; ) {
_cleanup_free_ char *word = NULL, *resolved = NULL;
if (u)
r = unit_env_printf(u, word, &resolved);
else
- r = specifier_printf(word, sc_arg_max(), system_and_tmp_specifier_table, NULL, NULL, &resolved);
+ r = specifier_printf(word, sc_arg_max(), table, NULL, NULL, &resolved);
if (r < 0) {
log_syntax(unit, LOG_WARNING, filename, line, r,
"Failed to resolve specifiers in %s, ignoring: %m", word);
{ "Manager", "DefaultStartLimitInterval", config_parse_sec, 0, &arg_default_start_limit_interval }, /* obsolete alias */
{ "Manager", "DefaultStartLimitIntervalSec", config_parse_sec, 0, &arg_default_start_limit_interval },
{ "Manager", "DefaultStartLimitBurst", config_parse_unsigned, 0, &arg_default_start_limit_burst },
- { "Manager", "DefaultEnvironment", config_parse_environ, 0, &arg_default_environment },
- { "Manager", "ManagerEnvironment", config_parse_environ, 0, &arg_manager_environment },
+ { "Manager", "DefaultEnvironment", config_parse_environ, arg_system, &arg_default_environment },
+ { "Manager", "ManagerEnvironment", config_parse_environ, arg_system, &arg_manager_environment },
{ "Manager", "DefaultLimitCPU", config_parse_rlimit, RLIMIT_CPU, arg_default_rlimit },
{ "Manager", "DefaultLimitFSIZE", config_parse_rlimit, RLIMIT_FSIZE, arg_default_rlimit },
{ "Manager", "DefaultLimitDATA", config_parse_rlimit, RLIMIT_DATA, arg_default_rlimit },