summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemd.unit.xml3
-rw-r--r--src/analyze/analyze-condition.c4
-rw-r--r--src/core/dbus-unit.c22
-rw-r--r--src/core/load-fragment-gperf.gperf.m42
-rw-r--r--src/core/load-fragment.c55
-rw-r--r--src/core/load-fragment.h1
-rw-r--r--src/shared/condition.c21
-rw-r--r--src/shared/condition.h2
-rw-r--r--src/test/test-condition.c15
-rw-r--r--test/fuzz/fuzz-unit-file/systemd-machined.service3
10 files changed, 11 insertions, 117 deletions
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index 7ef6080237..50f35aaa3c 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -1092,9 +1092,6 @@
<para>Except for <varname>ConditionPathIsSymbolicLink=</varname>, all path checks follow symlinks.</para>
<variablelist class='unit-directives'>
- <!-- We do not document ConditionNull= here, as it is not particularly useful and probably just
- confusing. -->
-
<varlistentry>
<term><varname>ConditionArchitecture=</varname></term>
diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c
index 13f75e813a..e1365e1805 100644
--- a/src/analyze/analyze-condition.c
+++ b/src/analyze/analyze-condition.c
@@ -38,9 +38,7 @@ static int parse_condition(Unit *u, const char *line) {
p += strspn(p, WHITESPACE);
- if (t == CONDITION_NULL) /* deprecated, but we should still parse this for now */
- callback = config_parse_unit_condition_null;
- else if (condition_takes_path(t))
+ if (condition_takes_path(t))
callback = config_parse_unit_condition_path;
else
callback = config_parse_unit_condition_string;
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 9e9d3b101e..e799771c22 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -1974,14 +1974,11 @@ static int bus_set_transient_conditions(
if (t < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid condition type: %s", type_name);
- if (t != CONDITION_NULL) {
- if (isempty(param))
- return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Condition parameter in %s is empty", type_name);
+ if (isempty(param))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Condition parameter in %s is empty", type_name);
- if (condition_takes_path(t) && !path_is_absolute(param))
- return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Path in condition %s is not absolute: %s", type_name, param);
- } else
- param = NULL;
+ if (condition_takes_path(t) && !path_is_absolute(param))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Path in condition %s is not absolute: %s", type_name, param);
if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
Condition *c;
@@ -1992,14 +1989,9 @@ static int bus_set_transient_conditions(
LIST_PREPEND(conditions, *list, c);
- if (t != CONDITION_NULL)
- unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name,
- "%s=%s%s%s", type_name,
- trigger ? "|" : "", negate ? "!" : "", param);
- else
- unit_write_settingf(u, flags, name,
- "%s=%s%s", type_name,
- trigger ? "|" : "", yes_no(!negate));
+ unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name,
+ "%s=%s%s%s", type_name,
+ trigger ? "|" : "", negate ? "!" : "", param);
}
empty = false;
diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
index 1e6bd6483c..a191de62af 100644
--- a/src/core/load-fragment-gperf.gperf.m4
+++ b/src/core/load-fragment-gperf.gperf.m4
@@ -292,7 +292,6 @@ Unit.ConditionEnvironment, config_parse_unit_condition_string, CONDITION_E
Unit.ConditionUser, config_parse_unit_condition_string, CONDITION_USER, offsetof(Unit, conditions)
Unit.ConditionGroup, config_parse_unit_condition_string, CONDITION_GROUP, offsetof(Unit, conditions)
Unit.ConditionControlGroupController, config_parse_unit_condition_string, CONDITION_CONTROL_GROUP_CONTROLLER, offsetof(Unit, conditions)
-Unit.ConditionNull, config_parse_unit_condition_null, 0, offsetof(Unit, conditions)
Unit.AssertPathExists, config_parse_unit_condition_path, CONDITION_PATH_EXISTS, offsetof(Unit, asserts)
Unit.AssertPathExistsGlob, config_parse_unit_condition_path, CONDITION_PATH_EXISTS_GLOB, offsetof(Unit, asserts)
Unit.AssertPathIsDirectory, config_parse_unit_condition_path, CONDITION_PATH_IS_DIRECTORY, offsetof(Unit, asserts)
@@ -319,7 +318,6 @@ Unit.AssertEnvironment, config_parse_unit_condition_string, CONDITION_E
Unit.AssertUser, config_parse_unit_condition_string, CONDITION_USER, offsetof(Unit, asserts)
Unit.AssertGroup, config_parse_unit_condition_string, CONDITION_GROUP, offsetof(Unit, asserts)
Unit.AssertControlGroupController, config_parse_unit_condition_string, CONDITION_CONTROL_GROUP_CONTROLLER, offsetof(Unit, asserts)
-Unit.AssertNull, config_parse_unit_condition_null, 0, offsetof(Unit, asserts)
Unit.CollectMode, config_parse_collect_mode, 0, offsetof(Unit, collect_mode)
m4_dnl
Service.PIDFile, config_parse_pid_file, 0, offsetof(Service, pid_file)
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 266382c84c..cfd04f3b49 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -2999,60 +2999,6 @@ int config_parse_unit_condition_string(
return 0;
}
-int config_parse_unit_condition_null(
- const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Condition **list = data, *c;
- bool trigger, negate;
- int b;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- log_syntax(unit, LOG_WARNING, filename, line, 0, "%s= is deprecated, please do not use.", lvalue);
-
- if (isempty(rvalue)) {
- /* Empty assignment resets the list */
- *list = condition_free_list(*list);
- return 0;
- }
-
- trigger = rvalue[0] == '|';
- if (trigger)
- rvalue++;
-
- negate = rvalue[0] == '!';
- if (negate)
- rvalue++;
-
- b = parse_boolean(rvalue);
- if (b < 0) {
- log_syntax(unit, LOG_ERR, filename, line, b, "Failed to parse boolean value in condition, ignoring: %s", rvalue);
- return 0;
- }
-
- if (!b)
- negate = !negate;
-
- c = condition_new(CONDITION_NULL, NULL, trigger, negate);
- if (!c)
- return log_oom();
-
- LIST_PREPEND(conditions, *list, c);
- return 0;
-}
-
int config_parse_unit_requires_mounts_for(
const char *unit,
const char *filename,
@@ -5266,7 +5212,6 @@ void unit_dump_config_items(FILE *f) {
{ config_parse_ip_tos, "TOS" },
{ config_parse_unit_condition_path, "CONDITION" },
{ config_parse_unit_condition_string, "CONDITION" },
- { config_parse_unit_condition_null, "CONDITION" },
{ config_parse_unit_slice, "SLICE" },
{ config_parse_documentation, "URL" },
{ config_parse_service_timeout, "SECONDS" },
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index 2672db5ace..cee5717d0f 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -58,7 +58,6 @@ CONFIG_PARSER_PROTOTYPE(config_parse_unit_env_file);
CONFIG_PARSER_PROTOTYPE(config_parse_ip_tos);
CONFIG_PARSER_PROTOTYPE(config_parse_unit_condition_path);
CONFIG_PARSER_PROTOTYPE(config_parse_unit_condition_string);
-CONFIG_PARSER_PROTOTYPE(config_parse_unit_condition_null);
CONFIG_PARSER_PROTOTYPE(config_parse_kill_mode);
CONFIG_PARSER_PROTOTYPE(config_parse_notify_access);
CONFIG_PARSER_PROTOTYPE(config_parse_emergency_action);
diff --git a/src/shared/condition.c b/src/shared/condition.c
index bf3b5fa162..1f6105622a 100644
--- a/src/shared/condition.c
+++ b/src/shared/condition.c
@@ -52,7 +52,7 @@ Condition* condition_new(ConditionType type, const char *parameter, bool trigger
assert(type >= 0);
assert(type < _CONDITION_TYPE_MAX);
- assert((!parameter) == (type == CONDITION_NULL));
+ assert(parameter);
c = new(Condition, 1);
if (!c)
@@ -776,15 +776,6 @@ static int condition_test_file_is_executable(Condition *c, char **env) {
(st.st_mode & 0111));
}
-static int condition_test_null(Condition *c, char **env) {
- assert(c);
- assert(c->type == CONDITION_NULL);
-
- /* Note that during parsing we already evaluate the string and
- * store it in c->negate */
- return true;
-}
-
int condition_test(Condition *c, char **env) {
static int (*const condition_tests[_CONDITION_TYPE_MAX])(Condition *c, char **env) = {
@@ -811,7 +802,6 @@ int condition_test(Condition *c, char **env) {
[CONDITION_USER] = condition_test_user,
[CONDITION_GROUP] = condition_test_group,
[CONDITION_CONTROL_GROUP_CONTROLLER] = condition_test_control_group_controller,
- [CONDITION_NULL] = condition_test_null,
[CONDITION_CPUS] = condition_test_cpus,
[CONDITION_MEMORY] = condition_test_memory,
[CONDITION_ENVIRONMENT] = condition_test_environment,
@@ -859,23 +849,20 @@ bool condition_test_list(
r = condition_test(c, env);
if (logger) {
- const char *p = c->type == CONDITION_NULL ? "true" : c->parameter;
- assert(p);
-
if (r < 0)
logger(userdata, LOG_WARNING, r, PROJECT_FILE, __LINE__, __func__,
"Couldn't determine result for %s=%s%s%s, assuming failed: %m",
to_string(c->type),
c->trigger ? "|" : "",
c->negate ? "!" : "",
- p);
+ c->parameter);
else
logger(userdata, LOG_DEBUG, 0, PROJECT_FILE, __LINE__, __func__,
"%s=%s%s%s %s.",
to_string(c->type),
c->trigger ? "|" : "",
c->negate ? "!" : "",
- p,
+ c->parameter,
condition_result_to_string(c->result));
}
@@ -937,7 +924,6 @@ static const char* const condition_type_table[_CONDITION_TYPE_MAX] = {
[CONDITION_USER] = "ConditionUser",
[CONDITION_GROUP] = "ConditionGroup",
[CONDITION_CONTROL_GROUP_CONTROLLER] = "ConditionControlGroupController",
- [CONDITION_NULL] = "ConditionNull",
[CONDITION_CPUS] = "ConditionCPUs",
[CONDITION_MEMORY] = "ConditionMemory",
[CONDITION_ENVIRONMENT] = "ConditionEnvironment",
@@ -969,7 +955,6 @@ static const char* const assert_type_table[_CONDITION_TYPE_MAX] = {
[CONDITION_USER] = "AssertUser",
[CONDITION_GROUP] = "AssertGroup",
[CONDITION_CONTROL_GROUP_CONTROLLER] = "AssertControlGroupController",
- [CONDITION_NULL] = "AssertNull",
[CONDITION_CPUS] = "AssertCPUs",
[CONDITION_MEMORY] = "AssertMemory",
[CONDITION_ENVIRONMENT] = "AssertEnvironment",
diff --git a/src/shared/condition.h b/src/shared/condition.h
index fea74d228d..e5ad43f945 100644
--- a/src/shared/condition.h
+++ b/src/shared/condition.h
@@ -34,8 +34,6 @@ typedef enum ConditionType {
CONDITION_FILE_NOT_EMPTY,
CONDITION_FILE_IS_EXECUTABLE,
- CONDITION_NULL,
-
CONDITION_USER,
CONDITION_GROUP,
diff --git a/src/test/test-condition.c b/src/test/test-condition.c
index ddf2e669c0..d209c1304c 100644
--- a/src/test/test-condition.c
+++ b/src/test/test-condition.c
@@ -438,20 +438,6 @@ static void test_condition_test_kernel_version(void) {
condition_free(condition);
}
-static void test_condition_test_null(void) {
- Condition *condition;
-
- condition = condition_new(CONDITION_NULL, NULL, false, false);
- assert_se(condition);
- assert_se(condition_test(condition, environ) > 0);
- condition_free(condition);
-
- condition = condition_new(CONDITION_NULL, NULL, false, true);
- assert_se(condition);
- assert_se(condition_test(condition, environ) == 0);
- condition_free(condition);
-}
-
static void test_condition_test_security(void) {
Condition *condition;
@@ -868,7 +854,6 @@ int main(int argc, char *argv[]) {
test_condition_test_architecture();
test_condition_test_kernel_command_line();
test_condition_test_kernel_version();
- test_condition_test_null();
test_condition_test_security();
print_securities();
test_condition_test_virtualization();
diff --git a/test/fuzz/fuzz-unit-file/systemd-machined.service b/test/fuzz/fuzz-unit-file/systemd-machined.service
index 70b627c5f4..79ee9861d8 100644
--- a/test/fuzz/fuzz-unit-file/systemd-machined.service
+++ b/test/fuzz/fuzz-unit-file/systemd-machined.service
@@ -15,9 +15,6 @@ Documentation=https://www.freedesktop.org/wiki/Software/systemd/machined
Wants=machine.slice
After=machine.slice
RequiresMountsFor=/var/lib/machines
-ConditionNull=true
-ConditionNull=
-ConditionNull=|!false
OnFailureIsolate=false
FailureActionExitStatus=222
FailureActionExitStatus=