summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
blob: 0ce8b427ba6e75359d417b58553e6fc3a8f4f374 (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function mount_shares()
{
	for (( CONFIGROW = 1; CONFIGROW < ${#ROHSHARES[@]}; CONFIGROW++ )); do
		SHAREPATH=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 1 -d$'\t')          # cifs- oder nfs-Share
		SHARELETTER=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 2 -d$'\t' | \
					sed 's/://g')					# Laufwerksbuchstabe ohne :
		SHARENAME=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 3 -d$'\t' | sed 's/ /_/g')	# Leerzeichen raus.
		SHAREUSER=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 4 -d$'\t')		# Username, bei Userhome nicht vorhanden
		SHAREPASS=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 5 -d$'\t')		# User-PW, bei Userhome nicht vorhanden

		# Sharetyp bestimmen:
		if [ "${SHAREPATH:0:2}" == '\\' ]  || [ "${SHAREPATH:0:2}" == '//' ]; then
			USER=$(echo "$SHAREUSER"|cut -d '\' -f 2)
			SHAREPATH="${SHAREPATH//\\//}"					# '\' --> `/` :-)
			MOUNTOPTS="$MOUNTOPTSCIFS"
		else
			MOUNTOPTS="$MOUNTOPTSNFS"
		fi

		# User-Homeverzeichnis?
		if [ "${SHARENAME:0:5}" == "Home-" ]; then
			logger "openslx sharemapper: home share \"$SHARENAME\" found (for PERSISTENT)."
			export USER="${GLOBALUSER}"
			export PASSWD="${PW}"
			mounter "${MOUNTOPTS}" "${SHAREPATH}" "${USERHOMEDIR}" 2>/dev/null 1>&2
			unset USER
			unset PASSWD
		else
			if [ -z "${SHARELETTER}" ]; then
				logger "openslx sharemapper: $SHARELETTER not found. Do not know where to mount."
				continue
			else
				USERSHAREDIR="${USERHOME}"/SHARE_"${CONFIGROW}"	# ROHSHARES: Zeilennummer; Shares >=1
				if [ ! -d "$USERSHAREDIR" ]; then
					mkdir -p "$USERSHAREDIR" 2>/dev/null
					chown "$LOCALUSER":$(id --group "$LOCALUSER") "$USERSHAREDIR"
					chmod 700 "$USERSHAREDIR"
					logger "openslx sharemapper: share mount dir $USERSHAREDIR created."
				fi
			fi
			# Wenn kein Homeverzeichnis, dann share zuerst mit den Credentials aus der share-Konfig
			# versuchen zu mounten; wenn nicht, dann mit den Hauptcredentials nachversuchen.
			logger "openslx sharemapper: non-home share \"$SHARENAME\" (${CONFIGROW}) found."
			export USER="${SHAREUSER}"
			export PASSWD="${SHAREPASS}"
			mounter "${MOUNTOPTS}" ${SHAREPATH} ${USERSHAREDIR} 2>/dev/null 1>&2
			ERR=$?
			unset USER
			unset PASSWD
			if [ "$ERR" -eq 1 ]; then
				export USER="${GLOBALUSER}"
				export PASSWD="${PW}"
				logger "openslx sharemapper: Could not mount ${USERSHAREDIR}, now trying using user credentials."
				mounter "${MOUNTOPTS}" ${SHAREPATH} ${USERSHAREDIR} 2>/dev/null 1>&2 
				ERR=$?				# ERR merken wg. Links aus USERSHAREDIR
				if [ "$ERR" -eq 1 ]; then
					logger "openslx sharemapper: Could not mount ${USERSHAREDIR} even using user credentials; giving up."
				fi
				unset USER
				unset PASSWD
			fi
			if [ "$ERR" -eq 0 ]; then
				logger "openslx sharemapper: Linking ${SHARELETTER} and $SHARENAME, if possible."
				[ -n "${SHARELETTER}" ] && ln -s "$USERSHAREDIR" "${USERHOME}"/"$SHARELETTER"
				[ -n "${SHARELETTER}" ] && ln -s "$USERSHAREDIR" "${USERHOME}"/"$SHARENAME"
			fi
		fi
	done
}