mrrl-logincaps

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

commit 7c5e460eff677adc9b2267b8261743291697a5f3
parent 07feac5430e14d27a0018014f73b1b0a3c041b11
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Tue, 15 Dec 2020 02:48:17 +0100

Abstract out terminal invocation, always use fd0 for pty master and pass it through s6-sudo
Diffstat:
Mbin/zshaskpass_lock | 9++++++---
Msbin/su-term.py | 4+++-
2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/bin/zshaskpass_lock b/bin/zshaskpass_lock @@ -13,7 +13,7 @@ setopt no_unset warn_create_global zmodload zsh/zselect typeset -g COPROC_OUT fd newfd prompt_end keep_running X die_color plumb_r plumb_w -typeset -a coproc_args +typeset -a coproc_args terminal_args typeset -gA fds #if [[ $ZSHASKPASS_PROMPTFD -gt $ZSHASKPASS_PASSFD ]]; then @@ -45,6 +45,8 @@ if [[ -n $X ]]; then coproc_args+=( tail -F /run/containers/xsession.$X.ccx/run/uncaught-logs/current ) typeset -g plumber_fifo plumber_fifo=/run/containers/xsession.$X.ccx/run/plumber_fifo + terminal_args=( s6-sudo $HOME/chome/xsession.$[ ${TTY#/dev/tty} + 4 ]/run/socket urxvt -pty-fd 0 ) + terminal_env=rxvt-unicode # the TERM variable used else coproc_args+=( tail -F /run/user/ccx.logs/current ) fi @@ -114,9 +116,10 @@ cmd() { (reboot) 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" ;; + # 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" ;; + logincap "terminal $terminal_env $terminal_args" ;; (t *) - logincap "terminal-${1#t } rxvt-unicode s6-envdir /run/user/ccx/X$[ ${TTY#/dev/tty} + 4 ]/env urxvt -pty-fd 0" ;; + logincap "terminal-${1#t } $terminal_env $terminal_args" ;; (lock) lock;; (exit) diff --git a/sbin/su-term.py b/sbin/su-term.py @@ -33,11 +33,13 @@ def exec_terminal(uid, gid, home, terminal, term_env, shell, shell_workdir): if os.fork(): # parent os.close(slave) + os.dup2(master, 0) + os.close(master) os.setgid(gid) os.setuid(uid) os.chdir(home) env = dict(os.environ) - env['PTY_FD'] = str(master) + env['PTY_FD'] = "0" env['HOME'] = home if '/' in terminal[0]: os.execve(terminal[0], terminal, env)