mrrl-logincaps

MRRL version of logincaps
git clone https://ccx.te2000.cz/git/mrrl-logincaps
Log | Files | Refs

commit 496e5dc377b4c7a93e9350d0831870b69446a29e
parent ae64d05f72fa7c1d1c6f7612228849b68bf6a746
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Thu,  6 Jun 2019 22:35:23 +0200

ssh-agent locking support
Diffstat:
Mbin/zshaskpass_lock | 19++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/bin/zshaskpass_lock b/bin/zshaskpass_lock @@ -12,7 +12,7 @@ fi setopt no_unset warn_create_global zmodload zsh/zselect -typeset -g COPROC_OUT fd newfd prompt_end keep_running X +typeset -g COPROC_OUT fd newfd prompt_end keep_running X die_color typeset -a coproc_args typeset -gA fds @@ -26,7 +26,14 @@ if [[ $TTY == /dev/tty[1234] ]]; then X=$[ ${TTY#/dev/tty} + 4 ] fi +die_color=%F{red} prompt_end=%f + +die() { + printf '%s\n' "${(%)die_color}$^@${(%)prompt_end}" + exit 1 +} + coproc_args=( fdmove -c 2 1 unexport ZSHASKPASS_PROMPTFD @@ -58,6 +65,14 @@ logincap() { printf '%s\n' ${(%)result_color}$line${(%)prompt_end} } +lock() { + ssh-add -D || die "Error removing identities" + s6-svc -o -wu -T 3000 /run/containers/xsession.$X.ccx/run/service/screen-locker/ || "Failed to bring up screen locker" + s6-svstat /run/containers/xsession.$X.ccx/run/service/screen-locker/ + s6-svlisten1 -d /run/containers/xsession.$X.ccx/run/service/screen-locker/ zsh -c "read -sk 1 $'?Session locked, press enter to unlock.\n' || exit 98; until ssh-add -c; do sleep 2; read -sk 1 $'?\nUnlock failed, press enter to try again.\n' || exit 98; done; if ssh-add -l >/dev/null; then printf '%s\n' 'Success, stopping screen locker'; s6-svc -d '/run/containers/xsession.$X.ccx/run/service/screen-locker/'; fi" + ssh-add -l >/dev/null || die "Failed to load SSH agent identities (screen locker died?), exiting." +} + cmd() { case $1 in ('') ;; @@ -78,6 +93,8 @@ cmd() { logincap b;; (root) logincap "terminal rxvt-unicode importas -i PTY_FD PTY_FD s6-envdir /run/user/ccx/X$[ ${TTY#/dev/tty} + 4 ]/env urxvt -pty-fd \$PTY_FD" ;; + (lock) + lock;; (exit) true >/run/user/ccx/X$[ ${TTY#/dev/tty} + 4 ]/fifo keep_running=0;;