summaryrefslogtreecommitdiff
path: root/src/condition.c
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2011-03-25 05:07:20 +0100
committerLennart Poettering <lennart@poettering.net>2011-03-28 23:00:00 +0200
commit2b583ce6576d4a074ce6f1570b3e60b65c64ae7d (patch)
treec5cfa0138219cc79a6412bb69abe13ece385009c /src/condition.c
parent37f85e66e8f396b6f758e063531b95531aef628e (diff)
use /run instead of /dev/.run
Instead of the /dev/.run trick we have currently implemented, we decided to move the early-boot runtime dir to /run. An existing /var/run directory is bind-mounted to /run. If /var/run is already a symlink, no action is taken. An existing /var/lock directory is bind-mounted to /run/lock. If /var/lock is already a symlink, no action is taken. To implement the directory vs. symlink logic, we have a: ConditionPathIsDirectory= now, which is used in the mount units. Skipped mount unit in case of symlink: $ systemctl status var-run.mount var-run.mount - Runtime Directory Loaded: loaded (/lib/systemd/system/var-run.mount) Active: inactive (dead) start condition failed at Fri, 25 Mar 2011 04:51:41 +0100; 6min ago Where: /var/run What: /run CGroup: name=systemd:/system/var-run.mount The systemd rpm needs to make sure to add something like: %pre mkdir -p -m0755 /run >/dev/null 2>&1 || : or it needs to be added to filesystem.rpm. Udev -git already uses /run if that exists, and is writable at bootup. Otherwise it falls back to the current /dev/.udev. Dracut and plymouth need to be adopted to switch from /dev/.run to run too. Cheers, Kay
Diffstat (limited to 'src/condition.c')
-rw-r--r--src/condition.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/condition.c b/src/condition.c
index 1dce276c00..61812c2570 100644
--- a/src/condition.c
+++ b/src/condition.c
@@ -134,6 +134,14 @@ bool condition_test(Condition *c) {
case CONDITION_PATH_EXISTS:
return (access(c->parameter, F_OK) >= 0) == !c->negate;
+ case CONDITION_PATH_IS_DIRECTORY: {
+ struct stat st;
+
+ if (lstat(c->parameter, &st) < 0)
+ return !c->negate;
+ return S_ISDIR(st.st_mode) == !c->negate;
+ }
+
case CONDITION_DIRECTORY_NOT_EMPTY: {
int k;