aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-10-06 14:38:17 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-10-29 12:05:03 -0700
commit56783229ef9d2458b2fafe3d0552e8d85eeb6021 (patch)
tree8de0c1b97f282a10ae8d77f336d44ae24355190a
parentab6ee5eb7fd0ee61e71537855f8bb5a923df47fe (diff)
downloadconsfigurator-56783229ef9d2458b2fafe3d0552e8d85eeb6021.tar.gz
SYSTEMD:LINGERING-ENABLED :CHECK: handle non-zero exit from loginctl
Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
-rw-r--r--src/property/systemd.lisp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/property/systemd.lisp b/src/property/systemd.lisp
index b02c29f..a9f0c90 100644
--- a/src/property/systemd.lisp
+++ b/src/property/systemd.lisp
@@ -75,8 +75,15 @@
(defprop lingering-enabled :posix (user)
(:desc #?"User lingering enable for ${user}")
- (:check (or (service:no-services-p)
- (memstring= "Linger=yes" (runlines "loginctl" "show-user" user))))
+ (:check
+ (or (service:no-services-p)
+ ;; 'loginctl show-user' fails if the user is neither logged in nor
+ ;; lingering. There is no dedicated exit code for that, so just assume
+ ;; lingering is not enabled if command exits nonzero.
+ (multiple-value-bind (out err exit)
+ (run :may-fail "loginctl" "show-user" user)
+ (declare (ignore err))
+ (and (zerop exit) (memstring= "Linger=yes" (lines out))))))
(:apply (mrun "loginctl" "enable-linger" user))
(:unapply (if (service:no-services-p)
:no-change