From bc0f8771f23dc3952bf4b06301dc842ba625a0f2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 21 May 2010 23:41:54 +0200 Subject: [PATCH] unit: add simple only-by-dependency flag for units --- src/dbus-unit.c | 3 +++ src/load-fragment.c | 1 + src/unit.c | 6 ++++-- src/unit.h | 3 +++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/dbus-unit.c b/src/dbus-unit.c index e3e1be12a..5c474c0c1 100644 --- a/src/dbus-unit.c +++ b/src/dbus-unit.c @@ -281,6 +281,9 @@ static DBusHandlerResult bus_unit_message_dispatch(Unit *u, DBusMessage *message int r; char *path; + if (job_type == JOB_START && u->meta.only_by_dependency) + return bus_send_error_reply(m, message, NULL, -EPERM); + if (!dbus_message_get_args( message, &error, diff --git a/src/load-fragment.c b/src/load-fragment.c index 3ebea4316..70b69233c 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -1268,6 +1268,7 @@ static int load_from_path(Unit *u, const char *path) { { "After", config_parse_deps, UINT_TO_PTR(UNIT_AFTER), "Unit" }, { "RecursiveStop", config_parse_bool, &u->meta.recursive_stop, "Unit" }, { "StopWhenUnneeded", config_parse_bool, &u->meta.stop_when_unneeded, "Unit" }, + { "OnlyByDependency", config_parse_bool, &u->meta.only_by_dependency, "Unit" }, { "PIDFile", config_parse_path, &u->service.pid_file, "Service" }, { "ExecStartPre", config_parse_exec, u->service.exec_command+SERVICE_EXEC_START_PRE, "Service" }, diff --git a/src/unit.c b/src/unit.c index 012edd47a..b38be317e 100644 --- a/src/unit.c +++ b/src/unit.c @@ -593,7 +593,8 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { "%s\tActive Enter Timestamp: %s\n" "%s\tActive Exit Timestamp: %s\n" "%s\tInactive Enter Timestamp: %s\n" - "%s\tGC Check Good: %s\n", + "%s\tGC Check Good: %s\n" + "%s\tOnly By Dependency: %s\n", prefix, u->meta.id, prefix, unit_description(u), prefix, strna(u->meta.instance), @@ -603,7 +604,8 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { prefix, strna(format_timestamp(timestamp2, sizeof(timestamp2), u->meta.active_enter_timestamp)), prefix, strna(format_timestamp(timestamp3, sizeof(timestamp3), u->meta.active_exit_timestamp)), prefix, strna(format_timestamp(timestamp4, sizeof(timestamp4), u->meta.inactive_enter_timestamp)), - prefix, yes_no(unit_check_gc(u))); + prefix, yes_no(unit_check_gc(u)), + prefix, yes_no(u->meta.only_by_dependency)); SET_FOREACH(t, u->meta.names, i) fprintf(f, "%s\tName: %s\n", prefix, t); diff --git a/src/unit.h b/src/unit.h index 8f9d9e986..d8be185c5 100644 --- a/src/unit.h +++ b/src/unit.h @@ -136,6 +136,9 @@ struct Meta { UnitLoadState load_state; Unit *merged_into; + /* Refuse manual starting, allow starting only indirectly via dependency. */ + bool only_by_dependency; + char *id; /* One name is special because we use it for identification. Points to an entry in the names set */ char *instance; -- 2.30.2