summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemd.unit.xml8
-rw-r--r--src/bus-errors.h2
-rw-r--r--src/load-fragment.c2
-rw-r--r--src/main.c8
-rw-r--r--src/manager.c6
-rw-r--r--src/unit.c2
-rw-r--r--src/unit.h2
7 files changed, 19 insertions, 11 deletions
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index c3c9561f2f..e59c1a16c4 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -190,6 +190,14 @@
string before the @, i.e. "getty" in the example
above, where "tty3" is the instance name.</para>
+ <para>If a unit file is empty (i.e. has the file size
+ 0) or is symlinked to <filename>/dev/null</filename>
+ its configuration will not be loaded and it appears
+ with a load state of <literal>masked</literal>, and
+ cannot be activated. Use this as an effective way to
+ fully disable a unit, making it impossible to start it
+ even manually.</para>
+
<para>The unit file format is covered by the
<ulink
url="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">Interface
diff --git a/src/bus-errors.h b/src/bus-errors.h
index 8f5c4eb7f3..d6ccd7407f 100644
--- a/src/bus-errors.h
+++ b/src/bus-errors.h
@@ -37,7 +37,7 @@
#define BUS_ERROR_ONLY_BY_DEPENDENCY "org.freedesktop.systemd1.OnlyByDependency"
#define BUS_ERROR_NO_ISOLATION "org.freedesktop.systemd1.NoIsolation"
#define BUS_ERROR_LOAD_FAILED "org.freedesktop.systemd1.LoadFailed"
-#define BUS_ERROR_BANNED "org.freedesktop.systemd1.Banned"
+#define BUS_ERROR_MASKED "org.freedesktop.systemd1.Masked"
#define BUS_ERROR_JOB_TYPE_NOT_APPLICABLE "org.freedesktop.systemd1.JobTypeNotApplicable"
#define BUS_ERROR_TRANSACTION_IS_DESTRUCTIVE "org.freedesktop.systemd1.TransactionIsDestructive"
#define BUS_ERROR_TRANSACTION_JOBS_CONFLICTING "org.freedesktop.systemd1.TransactionJobsConflicting"
diff --git a/src/load-fragment.c b/src/load-fragment.c
index b22955b424..eb9861802b 100644
--- a/src/load-fragment.c
+++ b/src/load-fragment.c
@@ -1885,7 +1885,7 @@ static int load_from_path(Unit *u, const char *path) {
}
if (null_or_empty(&st))
- u->meta.load_state = UNIT_BANNED;
+ u->meta.load_state = UNIT_MASKED;
else {
/* Now, parse the file contents */
if ((r = config_parse(filename, f, sections, items, false, u)) < 0)
diff --git a/src/main.c b/src/main.c
index d6f5c56c2a..fa306d6aad 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1062,8 +1062,8 @@ int main(int argc, char *argv[]) {
dbus_error_free(&error);
} else if (target->meta.load_state == UNIT_ERROR)
log_error("Failed to load default target: %s", strerror(-target->meta.load_error));
- else if (target->meta.load_state == UNIT_BANNED)
- log_error("Default target banned.");
+ else if (target->meta.load_state == UNIT_MASKED)
+ log_error("Default target masked.");
if (!target || target->meta.load_state != UNIT_LOADED) {
log_info("Trying to load rescue target...");
@@ -1075,8 +1075,8 @@ int main(int argc, char *argv[]) {
} else if (target->meta.load_state == UNIT_ERROR) {
log_error("Failed to load rescue target: %s", strerror(-target->meta.load_error));
goto finish;
- } else if (target->meta.load_state == UNIT_BANNED) {
- log_error("Rescue target banned.");
+ } else if (target->meta.load_state == UNIT_MASKED) {
+ log_error("Rescue target masked.");
goto finish;
}
}
diff --git a/src/manager.c b/src/manager.c
index 7e9075aad6..537ff2e39d 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -1400,7 +1400,7 @@ static int transaction_add_job_and_dependencies(
if (unit->meta.load_state != UNIT_LOADED &&
unit->meta.load_state != UNIT_ERROR &&
- unit->meta.load_state != UNIT_BANNED) {
+ unit->meta.load_state != UNIT_MASKED) {
dbus_set_error(e, BUS_ERROR_LOAD_FAILED, "Unit %s is not loaded properly.", unit->meta.id);
return -EINVAL;
}
@@ -1414,8 +1414,8 @@ static int transaction_add_job_and_dependencies(
return -EINVAL;
}
- if (type != JOB_STOP && unit->meta.load_state == UNIT_BANNED) {
- dbus_set_error(e, BUS_ERROR_BANNED, "Unit %s is banned.", unit->meta.id);
+ if (type != JOB_STOP && unit->meta.load_state == UNIT_MASKED) {
+ dbus_set_error(e, BUS_ERROR_MASKED, "Unit %s is masked.", unit->meta.id);
return -EINVAL;
}
diff --git a/src/unit.c b/src/unit.c
index d45fe91560..a45a1f7725 100644
--- a/src/unit.c
+++ b/src/unit.c
@@ -2237,7 +2237,7 @@ static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
[UNIT_LOADED] = "loaded",
[UNIT_ERROR] = "error",
[UNIT_MERGED] = "merged",
- [UNIT_BANNED] = "banned"
+ [UNIT_MASKED] = "masked"
};
DEFINE_STRING_TABLE_LOOKUP(unit_load_state, UnitLoadState);
diff --git a/src/unit.h b/src/unit.h
index aa818d4f21..605fa3774d 100644
--- a/src/unit.h
+++ b/src/unit.h
@@ -62,7 +62,7 @@ enum UnitLoadState {
UNIT_LOADED,
UNIT_ERROR,
UNIT_MERGED,
- UNIT_BANNED,
+ UNIT_MASKED,
_UNIT_LOAD_STATE_MAX,
_UNIT_LOAD_STATE_INVALID = -1
};