chiark / gitweb /
systemd: added new dependency PartOf
[elogind.git] / src / core / unit.c
index 3b416f945fcc20ccac996d6322ff43103f0bfbe1..be75cd792d5961a515ad647821cdce5ed11ad64f 100644 (file)
@@ -1610,7 +1610,8 @@ int unit_add_dependency(Unit *u, UnitDependency d, Unit *other, bool add_referen
                 [UNIT_TRIGGERS] = UNIT_TRIGGERED_BY,
                 [UNIT_TRIGGERED_BY] = UNIT_TRIGGERS,
                 [UNIT_PROPAGATES_RELOAD_TO] = UNIT_RELOAD_PROPAGATED_FROM,
-                [UNIT_RELOAD_PROPAGATED_FROM] = UNIT_PROPAGATES_RELOAD_TO
+                [UNIT_RELOAD_PROPAGATED_FROM] = UNIT_PROPAGATES_RELOAD_TO,
+                [UNIT_PART_OF] = UNIT_CONSISTS_OF
         };
         int r, q = 0, v = 0, w = 0;
 
@@ -2816,17 +2817,31 @@ int unit_add_mount_links(Unit *u) {
         return 0;
 }
 
-int unit_patch_working_directory(Unit *u, ExecContext *c) {
+int unit_exec_context_defaults(Unit *u, ExecContext *c) {
+        unsigned i;
+        int r;
+
         assert(u);
         assert(c);
 
-        if (u->manager->running_as != MANAGER_USER)
-                return 0;
+        /* This only copies in the ones that need memory */
 
-        if (c->working_directory)
-                return 0;
+        for (i = 0; i < RLIMIT_NLIMITS; i++)
+                if (u->manager->rlimit[i] && !c->rlimit[i]) {
+                        c->rlimit[i] = newdup(struct rlimit, u->manager->rlimit[i], 1);
+                        if (!c->rlimit[i])
+                                return -ENOMEM;
+                }
+
+        if (u->manager->running_as == MANAGER_USER &&
+            !c->working_directory) {
 
-        return get_home_dir(&c->working_directory);
+                r = get_home_dir(&c->working_directory);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
 }
 
 static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {