chiark / gitweb /
don't use test directory anymore by default
[elogind.git] / load-fragment.c
index e002bf5ad1fd754cdc2d4cb66208d1e78210c4c6..bf17111482d30731a373fb79925eb239134c9871 100644 (file)
@@ -943,6 +943,37 @@ static int config_parse_limit(
         return 0;
 }
 
+static int config_parse_cgroup(
+                const char *filename,
+                unsigned line,
+                const char *section,
+                const char *lvalue,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        Unit *u = userdata;
+        char *w;
+        size_t l;
+        char *state;
+
+        FOREACH_WORD(w, l, rvalue, state) {
+                char *t;
+                int r;
+
+                if (!(t = strndup(w, l)))
+                        return -ENOMEM;
+
+                r = unit_add_cgroup_from_text(u, t);
+                free(t);
+
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 #define FOLLOW_MAX 8
 
 static int open_follow(char **filename, FILE **_f, Set *names, char **_id) {
@@ -1067,7 +1098,8 @@ static int load_from_path(Unit *u, const char *path) {
                 { "LimitNICE",              config_parse_limit,           &(context).rlimit[RLIMIT_NICE],                  section   }, \
                 { "LimitRTPRIO",            config_parse_limit,           &(context).rlimit[RLIMIT_RTPRIO],                section   }, \
                 { "LimitRTTIME",            config_parse_limit,           &(context).rlimit[RLIMIT_RTTIME],                section   }, \
-                { "NonBlocking",            config_parse_bool,            &(context).non_blocking,                         section   }
+                { "NonBlocking",            config_parse_bool,            &(context).non_blocking,                         section   }, \
+                { "ControlGroup",           config_parse_cgroup,          u,                                               section   }  \
 
         const ConfigItem items[] = {
                 { "Names",                  config_parse_names,           u,                                               "Meta"    },
@@ -1094,6 +1126,9 @@ static int load_from_path(Unit *u, const char *path) {
                 { "TimeoutSec",             config_parse_usec,            &u->service.timeout_usec,                        "Service" },
                 { "Type",                   config_parse_service_type,    &u->service,                                     "Service" },
                 { "Restart",                config_parse_service_restart, &u->service,                                     "Service" },
+                { "PermissionsStartOnly",   config_parse_bool,            &u->service.permissions_start_only,              "Service" },
+                { "RootDirectoryStartOnly", config_parse_bool,            &u->service.root_directory_start_only,           "Service" },
+                { "ValidNoProcess",         config_parse_bool,            &u->service.valid_no_process,                    "Service" },
                 EXEC_CONTEXT_CONFIG_ITEMS(u->service.exec_context, "Service"),
 
                 { "ListenStream",           config_parse_listen,          &u->socket,                                      "Socket"  },
@@ -1250,7 +1285,8 @@ int unit_load_fragment(Unit *u) {
                 else
                         c = NULL;
 
-                if (c && (c->output == EXEC_OUTPUT_KERNEL || c->output == EXEC_OUTPUT_SYSLOG)) {
+                if (c &&
+                    (c->output == EXEC_OUTPUT_KERNEL || c->output == EXEC_OUTPUT_SYSLOG)) {
                         int k;
 
                         /* If syslog or kernel logging is requested, make sure
@@ -1259,8 +1295,9 @@ int unit_load_fragment(Unit *u) {
                         if ((k = unit_add_dependency_by_name(u, UNIT_AFTER, SPECIAL_LOGGER_SOCKET)) < 0)
                                 return k;
 
-                        if ((k = unit_add_dependency_by_name(u, UNIT_REQUIRES, SPECIAL_LOGGER_SOCKET)) < 0)
-                                return k;
+                        if (u->meta.manager->running_as != MANAGER_SESSION)
+                                if ((k = unit_add_dependency_by_name(u, UNIT_REQUIRES, SPECIAL_LOGGER_SOCKET)) < 0)
+                                        return k;
                 }
         }