summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/unit.c29
-rw-r--r--units/getty@.service.m49
-rw-r--r--units/serial-getty@.service.m49
3 files changed, 25 insertions, 22 deletions
diff --git a/src/unit.c b/src/unit.c
index a619727f96..ee1dc85d50 100644
--- a/src/unit.c
+++ b/src/unit.c
@@ -826,6 +826,7 @@ fail:
*/
int unit_start(Unit *u) {
UnitActiveState state;
+ Unit *following;
assert(u);
@@ -840,16 +841,22 @@ int unit_start(Unit *u) {
if (UNIT_IS_ACTIVE_OR_RELOADING(state))
return -EALREADY;
- /* If it is stopped, but we cannot start it, then fail */
- if (!UNIT_VTABLE(u)->start)
- return -EBADR;
-
/* If the conditions failed, don't do anything at all */
if (!condition_test_list(u->meta.conditions)) {
log_debug("Starting of %s requested but condition failed. Ignoring.", u->meta.id);
return -EALREADY;
}
+ /* Forward to the main object, if we aren't it. */
+ if ((following = unit_following(u))) {
+ log_debug("Redirecting start request from %s to %s.", u->meta.id, following->meta.id);
+ return unit_start(following);
+ }
+
+ /* If it is stopped, but we cannot start it, then fail */
+ if (!UNIT_VTABLE(u)->start)
+ return -EBADR;
+
/* We don't suppress calls to ->start() here when we are
* already starting, to allow this request to be used as a
* "hurry up" call, for example when the unit is in some "auto
@@ -859,7 +866,6 @@ int unit_start(Unit *u) {
unit_add_to_dbus_queue(u);
unit_status_printf(u, "Starting %s...\n", unit_description(u));
-
return UNIT_VTABLE(u)->start(u);
}
@@ -883,6 +889,7 @@ bool unit_can_isolate(Unit *u) {
*/
int unit_stop(Unit *u) {
UnitActiveState state;
+ Unit *following;
assert(u);
@@ -890,13 +897,17 @@ int unit_stop(Unit *u) {
if (UNIT_IS_INACTIVE_OR_FAILED(state))
return -EALREADY;
+ if ((following = unit_following(u))) {
+ log_debug("Redirecting stop request from %s to %s.", u->meta.id, following->meta.id);
+ return unit_stop(following);
+ }
+
if (!UNIT_VTABLE(u)->stop)
return -EBADR;
unit_add_to_dbus_queue(u);
unit_status_printf(u, "Stopping %s...\n", unit_description(u));
-
return UNIT_VTABLE(u)->stop(u);
}
@@ -907,6 +918,7 @@ int unit_stop(Unit *u) {
*/
int unit_reload(Unit *u) {
UnitActiveState state;
+ Unit *following;
assert(u);
@@ -923,6 +935,11 @@ int unit_reload(Unit *u) {
if (state != UNIT_ACTIVE)
return -ENOEXEC;
+ if ((following = unit_following(u))) {
+ log_debug("Redirecting reload request from %s to %s.", u->meta.id, following->meta.id);
+ return unit_reload(following);
+ }
+
unit_add_to_dbus_queue(u);
return UNIT_VTABLE(u)->reload(u);
}
diff --git a/units/getty@.service.m4 b/units/getty@.service.m4
index 24247be7a7..11a71d7168 100644
--- a/units/getty@.service.m4
+++ b/units/getty@.service.m4
@@ -5,13 +5,6 @@
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
-m4_ifdef(`TARGET_FEDORA', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_SUSE', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_GENTOO', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_ARCH', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_DEBIAN', `m4_define(`GETTY', `/sbin/getty')')m4_dnl
-m4_ifdef(`TARGET_UBUNTU', `m4_define(`GETTY', `/sbin/getty')')m4_dnl
-m4_dnl
[Unit]
Description=Getty on %I
BindTo=dev-%i.device
@@ -30,7 +23,7 @@ Before=getty.target
[Service]
Environment=TERM=linux
-ExecStart=-GETTY %I 38400
+ExecStart=-/sbin/agetty %I 38400
Restart=always
RestartSec=0
UtmpIdentifier=%I
diff --git a/units/serial-getty@.service.m4 b/units/serial-getty@.service.m4
index a8610c809a..da9bd1946b 100644
--- a/units/serial-getty@.service.m4
+++ b/units/serial-getty@.service.m4
@@ -5,13 +5,6 @@
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
-m4_ifdef(`TARGET_FEDORA', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_SUSE', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_GENTOO', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_ARCH', `m4_define(`GETTY', `/sbin/agetty')')m4_dnl
-m4_ifdef(`TARGET_DEBIAN', `m4_define(`GETTY', `/sbin/getty')')m4_dnl
-m4_ifdef(`TARGET_UBUNTU', `m4_define(`GETTY', `/sbin/getty')')m4_dnl
-m4_dnl
[Unit]
Description=Serial Getty on %I
BindTo=dev-%i.device
@@ -33,7 +26,7 @@ Environment=TERM=vt100-nav
m4_ifdef(`TARGET_FEDORA',
ExecStartPre=-/sbin/securetty %I
)m4_dnl
-ExecStart=-GETTY -s %I 115200,38400,9600
+ExecStart=-/sbin/agetty -s %I 115200,38400,9600
Restart=always
RestartSec=0
UtmpIdentifier=%I