diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2021-10-06 14:38:17 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2021-10-29 12:05:03 -0700 |
commit | 56783229ef9d2458b2fafe3d0552e8d85eeb6021 (patch) | |
tree | 8de0c1b97f282a10ae8d77f336d44ae24355190a | |
parent | ab6ee5eb7fd0ee61e71537855f8bb5a923df47fe (diff) | |
download | consfigurator-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.lisp | 11 |
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 |