summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-09-23 17:09:49 +0200
committerLennart Poettering <lennart@poettering.net>2011-09-23 17:09:49 +0200
commit8095200d05ad28e84a3480f94f061783150db81e (patch)
tree6a76fb2b83a7937dbb8afcef74091f316836f2c5 /src
parentb52aae1d934b006830e7d575e56e2a98b0765ad3 (diff)
condition: optionally test against type of virtualization (vm vs. container)
Diffstat (limited to 'src')
-rw-r--r--src/condition.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/condition.c b/src/condition.c
index 1438ea85a0..e978656772 100644
--- a/src/condition.c
+++ b/src/condition.c
@@ -30,6 +30,7 @@
#include "util.h"
#include "condition.h"
+#include "virt.h"
Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
Condition *c;
@@ -118,25 +119,35 @@ static bool test_kernel_command_line(const char *parameter) {
}
static bool test_virtualization(const char *parameter) {
- int r, b;
+ int b;
+ Virtualization v;
const char *id;
assert(parameter);
- r = detect_virtualization(&id);
- if (r < 0) {
- log_warning("Failed to detect virtualization, ignoring: %s", strerror(-r));
+ v = detect_virtualization(&id);
+ if (v < 0) {
+ log_warning("Failed to detect virtualization, ignoring: %s", strerror(-v));
return false;
}
+ /* First, compare with yes/no */
b = parse_boolean(parameter);
- if (r > 0 && b > 0)
+ if (v > 0 && b > 0)
+ return true;
+
+ if (v == 0 && b == 0)
+ return true;
+
+ /* Then, compare categorization */
+ if (v == VIRTUALIZATION_VM && streq(parameter, "vm"))
return true;
- if (r == 0 && b == 0)
+ if (v == VIRTUALIZATION_CONTAINER && streq(parameter, "container"))
return true;
+ /* Finally compare id */
return streq(parameter, id);
}