From 56783229ef9d2458b2fafe3d0552e8d85eeb6021 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Wed, 6 Oct 2021 14:38:17 -0700 Subject: SYSTEMD:LINGERING-ENABLED :CHECK: handle non-zero exit from loginctl Signed-off-by: Sean Whitton --- src/property/systemd.lisp | 11 +++++++++-- 1 file 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 -- cgit v1.2.3