summaryrefslogtreecommitdiffstats
path: root/remote
diff options
context:
space:
mode:
authorJonathan Bauer2014-01-23 15:09:10 +0100
committerJonathan Bauer2014-01-23 15:09:10 +0100
commitd3b1924e2cab9955db53e7bf950188650cfe8ab5 (patch)
treea1a02c7800e1fa99b94cbcfc7ffbd5039eedc873 /remote
parent[pam] added cifs support to pam module. This is ugly. TODO: split pam (diff)
downloadtm-scripts-d3b1924e2cab9955db53e7bf950188650cfe8ab5.tar.gz
tm-scripts-d3b1924e2cab9955db53e7bf950188650cfe8ab5.tar.xz
tm-scripts-d3b1924e2cab9955db53e7bf950188650cfe8ab5.zip
[pam] moved pam_script_auth to generic pam module
Diffstat (limited to 'remote')
-rwxr-xr-xremote/modules/pam/data/opt/openslx/scripts/pam_script_auth65
1 files changed, 65 insertions, 0 deletions
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
new file mode 100755
index 00000000..611b565a
--- /dev/null
+++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
@@ -0,0 +1,65 @@
+#!/bin/ash
+
+# Needed as pam_script clears PATH
+export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/usr/sbin:/opt/openslx/usr/bin:/opt/openslx/sbin:/opt/openslx/bin"
+
+PASSWD=$(getent passwd "$PAM_USER")
+USER_GID=$(echo "$PASSWD" | awk -F ':' '{print $4}')
+USER_HOME=$(echo "$PASSWD" | awk -F ':' '{print $6}')
+
+# Script to be sourced to mount the user's persistent home
+PERSISTENT_MOUNT_SCRIPT="/opt/openslx/scripts/pam_script_mount_persistent"
+# Script to be run in the user's context iff the persistent home could be mounted successfully
+PERSISTENT_MOUNT_USER_SCRIPT="/opt/openslx/scripts/pam_script_mount_persistent_user"
+# The user's non-persistent home directory mount point, which should be their linux home
+TEMP_HOME_DIR="$USER_HOME"
+# The user's persistent home directory mount point
+PERSISTENT_HOME_DIR="${TEMP_HOME_DIR}/PERSISTENT"
+
+# check if the script runs as root
+[ "x$(whoami)" != "xroot" ] && exit 0
+
+# check if PAM_USER is root and skip if it is the case
+[ "x${PAM_USER}" == "xroot" ] && exit 0
+
+# check if we already mounted the home directory
+mount | grep -q " $TEMP_HOME_DIR " && exit 0
+
+# no home, lets create it
+mkdir -p "${TEMP_HOME_DIR}" || \
+ { slxlog "pam-global-mktemphome" "Could not create '${TEMP_HOME_DIR}'."; exit 1; }
+
+# now make it a tmpfs
+mount -t tmpfs -o size=100m tmpfs "${TEMP_HOME_DIR}" || \
+ { slxlog "pam-global-tmpfstemphome" "Could not make a tmpfs on ${TEMP_HOME_DIR}"; exit 1; }
+
+# create a WARNING.txt for the user
+cat > "${TEMP_HOME_DIR}/WARNING.txt" << EOF
+ATTENTION: This is the non-persistant home directory!
+Files saved here will be lost on shutdown.
+Your real home is under /home/<user>/PERSISTENT.
+Please save your files there.
+EOF
+
+# create the PERSISTENT directory
+mkdir -p "${PERSISTENT_HOME_DIR}" || \
+ { slxlog "pam-global-mkpersistent" "Could not create '${PERSISTENT_HOME_DIR}'."; exit 1; }
+
+if ! chown -R "${PAM_USER}:${USER_GID}" "${TEMP_HOME_DIR}"; then
+ slxlog "pam-global-chpersistent " "Could not chown '${TEMP_HOME_DIR}' to '${PAM_USER}'."
+ exit 1
+fi
+
+# now lets see if we have a persistent directory mount script
+[ ! -e "${PERSISTENT_MOUNT_SCRIPT}" ] && exit 0
+# yes
+. "${PERSISTENT_MOUNT_SCRIPT}" || \
+ { slxlog "pam-global-sourcepersistent" "Could not source ${PERSISTENT_MOUNT_SCRIPT}."; exit 1; }
+
+# Just try to delete the persistent dir. If the mount was successful, it will not work
+# If it was not successful, it will be removed so the user doesn't think he can store
+# anything in there
+rmdir "$PERSISTENT_HOME_DIR" 2> /dev/null
+
+exit 0
+