summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/scripts/pam_script_auth.d/99-run_virt_credentials
blob: 7d80abe030132562b3e41840f82b843a4c053add (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/ash
# This is being sourced and running in ash

if [ -n "$TEMP_HOME_DIR" ]; then
	if [ -z "$PAM_TTY" ] || [ "x$PAM_TTY" = "x:0" ]; then
		# Pass on network path to home directory
		if [ -z "$PERSISTENT_NETPATH" ]; then
			PERSISTENT_NETPATH=$(grep -m1 -F " ${PERSISTENT_HOME_DIR} " "/proc/mounts" | awk '{print $1}')
		fi
		if [ -n "$PERSISTENT_NETPATH" ]; then
			[ "x${PERSISTENT_NETPATH:0:2}" = "x//" ] && PERSISTENT_NETPATH=$(echo "$PERSISTENT_NETPATH" | tr '/' '\')
			echo "${PERSISTENT_NETPATH}" > "${TEMP_HOME_DIR}/.home"
			chmod 0644 "${TEMP_HOME_DIR}/.home"
		fi
		# pwdaemon
		# Figure out username
		XUSER="${REAL_ACCOUNT}"
		[ -z "$XUSER" ] && XUSER="${PAM_USER}"
		# Guess domain
		XDOMAIN=
		if [ -n "$PERSISTENT_HOME_DIR" ]; then
			XDOMAIN=$(grep -F " ${PERSISTENT_HOME_DIR} " "/proc/mounts" | grep -m1 -F 'domain=' | sed -r 's/^.*[ ,]domain=([^ ,]+)[ ,].*$/\1/g')
		fi
		if [ -z "$XDOMAIN" ]; then
			XDOMAIN=$(<"/etc/ldap.conf" grep -m1 -i '^BASE\s.*DC=' | grep -o -E -i 'DC=([^,;]+)' | head -n 1 | cut -c 4-)
		fi
		if [ -z "$XDOMAIN" ]; then
			XDOMAIN=$(<"/etc/sssd/sssd.conf" grep -m1 -i '^ldap_search_base\s*=.*DC=' | grep -o -E -i 'DC=[^,;]+' | head -n 1 | cut -c 4-)
		fi
		if [ -n "$XDOMAIN" ]; then
			XDOMAIN=$(echo "$XDOMAIN" | tr '[a-z]' '[A-Z]')
		else
			XDOMAIN="WORKGROUP"
		fi
		USERNAME="$XDOMAIN\\$XUSER" PASSWORD="$PAM_AUTHTOK" PWSOCKET="${TEMP_HOME_DIR}/.pwsocket" su -c 'pwdaemon --daemon &' "${PAM_USER}" &
		unset XUSER XDOMAIN
	fi
fi

true