diff options
Diffstat (limited to 'remote/modules/pam/data/opt')
| -rwxr-xr-x | remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close index d3b5ebb3..535cd0d6 100755 --- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close +++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close @@ -7,30 +7,42 @@ export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/o slxlog "session-close" "$PAM_USER logged out on $PAM_TTY" # do not kill all root processes :) -[ "x${PAM_USER}" == "xroot" ] && exit 0 +[ "x${PAM_USER}" = "xroot" ] && exit 0 +# can only work if script is run as root +[ "x$(whoami)" = "xroot" ] || exit 0 -OPENSESSIONS=$(loginctl | grep "${PAM_USER}" | wc -l) +OPENSESSION=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-) +SESSIONCOUNT=$(echo "$OPENSESSION" | wc -w) -if [ "x${OPENSESSIONS}" == "x1" ]; then +if [ "$SESSIONCOUNT" = "1" ]; then # last sessions, close all ghost user processes + usleep 500000 pkill -u "${PAM_USER}" # check if user's process are still running - for TIMEOUT in 1 1 1 2; do - if ! ps aux | grep -v grep | grep -q "${PAM_USER}"; then - break; + for TIMEOUT in 1 1 2 FAIL; do + if [ "$TIMEOUT" = "FAIL" ]; then + # still something running, send SIGKILL + pkill -9 -u "${PAM_USER}" + break fi + if ! ps -o pid,s -u "$PAM_USER" -U "$PAM_USER" | grep -q -v -E "PID|Z"; then + # nothing running anymore + break + fi + # give some time sleep "${TIMEOUT}" done - # all done, kill it again to be sure - pkill -9 -u "${PAM_USER}" - - # unmount the home directory structure - umount -l "/home/${PAM_USER}/PERSISTENT" || \ - echo "Could not unmount '/home/${PAM_USER}/PERSISTENT'." + # just to be sure we check if there's no other open session in the meantime + OPEN2=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-) + if [ -z "$OPEN2" -o "x$OPENSESSION" = "x$OPEN2" ]; then + # unmount the home directory structure + umount -l "/home/${PAM_USER}/PERSISTENT" || \ + echo "Could not unmount '/home/${PAM_USER}/PERSISTENT'." - umount -l "/home/${PAM_USER}" || \ - echo "Could not unmount '/home/${PAM_USER}'." + umount -l "/home/${PAM_USER}" || \ + echo "Could not unmount '/home/${PAM_USER}'." + fi fi exit 0 |
