summaryrefslogblamecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
blob: 8b3943347461ea5bf2128841ab3548da01bbcbac (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12

                                                   

                                                   
              






                                                                         












                                                                    




                       
                                                                                
                                   

                                 
                                                                         

                                


                                         
                                                                                                                      


                                                                                                                                                    
                                                         
                                                                                                                                                                                

                                                     
                                                
                                    
                                                                                                                                        
                                  
                                                                                                       
                                                                
                                           
                                                 
                                                                                                                                           

                                                                                                                                                             

                                                                       
                                                                                                                                                                                      

                                                             
                                                        


                                                                     
                                                                                                                                                               
                                  



                                                                                                                                                            

                                                               
                                                                                                                                                                                  

                                                     
                                                


                                                 


                                                                                         



                       

                      

                                                                                               






















                                                                                                                             
                                                                                                                                     




                                 
                                                                                


                                                                           
                                                                        


                                                                             
                                                                          


                                                                                                             





                                                                                                        




























                                                                                                                           

                                                   
              












                                                                                                                                      

                                                   
### Funktionen ####################################

### Funktionen Mounter ############################

function xor()
{	local RES=($(echo "$1" | sed "s/../0x& /g"))
	local ONE=($(echo "$2" | sed "s/../0x& /g"))
	local COUNT1=${#RES[@]}
	local COUNT2=${#ONE[@]}
	for (( i = 0; i < $COUNT1; i++ )); do
		RES[$i]=$((${ONE[$(( i % COUNT2 ))]:-0} ^ ${RES[$i]:-0}))
	done
	printf "%02x" "${RES[@]}"
}

function already_mounted()
{
	# Ausgabe: gemountet = true = 0, nicht gemountet = false = 1
	local AUSGANG
	mount | grep -q " ${1} " && AUSGANG=0 || AUSGANG=1 
	return $AUSGANG
}

function mounter()
{
	MOUNTPARAM="$1"
	MOUNTOPTS="$2"
	SHAREPATH="$3"
	MOUNTDIR="$4"

	# Ausgabe: konnte mounten: 0, konnte nicht mounten: 1, schon gemountet 2
	already_mounted "$MOUNTDIR"
	ERR=$?
	if [ "$ERR" -eq 0 ]; then
		logger "openslx sharemapper: $SHAREPATH already mounted."
		AUSGANG=2	
	else	
		case "$MOUNTER" in 
			nfs)	AUSGANG=0
				x=2
				while ! mount $MOUNTPARAM "${MOUNTOPTS}" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do
					logger "openslx sharemapper: nfs: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited $x seconds, retrying."
					let x=x+2
					if [ "$x" -gt 4 ]; then
						AUSGANG=1
						logger "openslx sharemapper: nfs: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR} using ${MOUNTOPTS}. mount.nfs installed?"
						break
					fi
					sleep $x
				done
				[ "$AUSGANG" -eq 0 ] 	&& logger "openslx sharemapper: nfs: ${SHAREPATH} mounted to ${MOUNTDIR} (nfs)."
				;;
			cifs)	[ -n "$GLOBALDOMAIN" ] && MOUNTOPTS="${MOUNTOPTS},domain=$GLOBALDOMAIN"
				for VERSION in $CIFSVERSIONS; do
					x=0
					AUSGANG=0
					while ! mount $MOUNTPARAM "${VERSION}","${MOUNTOPTS}" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do
						logger "openslx sharemapper: cifs: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited $x seconds, retrying."
						let x=x+2
						if [ "$x" -gt 4 ]; then
							AUSGANG=1
							logger "openslx sharemapper: cifs: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR} using ${MOUNTOPTS}, cifs v${VERSION}."
							break
						fi
						sleep $x
					done
					[ "$AUSGANG" -eq 0 ] && break
				done
				[ "$AUSGANG" -eq 0 ]    && logger "openslx sharemapper: ${SHAREPATH} mounted to ${MOUNTDIR} using ${MOUNTOPTS}, cifs $VERSION."
				;;
			dav)    while ! echo -e "${USER}\n${PASSWD}" | mount $MOUNTPARAM "$MOUNTOPTS" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do
					x=2
					AUSGANG=0
					logger "openslx sharemapper: dav: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying."
					if [ "$x" -gt 4 ]; then
						AUSGANG=1
						logger "openslx sharemapper: dav: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR} using ${MOUNTOPTS}. mount.davfs installed?"
						break
					fi
					sleep $x
					let x=x+2
				done
				;;
			*)	logger "openslx sharemapper: unknown mounter ${MOUNTER}!"
				;;
		esac
	fi
	return $AUSGANG
}

function mount_share()
{
	# USERSHAREDIR="${USERHOME}"/SHARE_"${CONFIGROW}" # ROHSHARES: Zeilennummer; Shares >=1
	USERSHAREDIR="${USERHOME}"/"${SHARENAME}"
	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
	# 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 "${MOUNTPARAM}" "${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 "${MOUNTPARAM}" "${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."
			echo "Konnte Laufwerk ${SHAREPATH} nicht einhängen. mount.cifs / mount.davfs installiert?" >> "$USERLOGFILE"
		fi
		unset USER
		unset PASSWD
	fi
	if [ "$ERR" -eq 0 ]; then
		logger "openslx sharemapper: Linking ${SHARENAME}, if possible."

		if [ -n "${SHARENAME}" ]; then
			ln -s "$USERSHAREDIR" "${USERDESKTOP}"/"$SHARENAME"
			chown "$LOCALUSER" "${USERDESKTOP}"/"$SHARENAME"
			logger "openslx sharemapper: ${SHARENAME} linked."
		elif [ -n "${SHARELETTER}" ]; then
			ln -s "$USERSHAREDIR" "${USERDESKTOP}"/"$SHARELETTER"
			chown "$LOCALUSER" "${USERDESKTOP}"/"$SHARELETTER"
			logger "openslx sharemapper: No sharename found, share letter ${SHARELETTER} linked."
		fi

	else
		logger "openslx sharemapper: deleting previously creates share mount dir $USERSHAREDIR."
		rmdir "$USERSHAREDIR" 2>/dev/null
	fi
}

function mount_home()
{
	logger "openslx sharemapper: home share \"$SHARENAME\" found (for PERSISTENT)."
	export USER="${GLOBALUSER}"
	export PASSWD="${PW}"
	ERRORMSG=""
	mounter "${MOUNTPARAM}" "${MOUNTOPTS}" "${SHAREPATH}" "${USERHOMEDIR}" 2>/dev/null 1>&2
	ERR=$?
	unset USER
	unset PASSWD
	
	case $ERR in	1)	logger "openslx sharemapper: could not mount home share."
				echo "Konnte Home-Laufwerk nicht einhängen!" >> "$USERLOGFILE"
				;;
			2)      logger "openslx sharemapper: home share seems to be already mounted."
				;;
			0)	logger "openslx sharemapper: Linking ${USERDESKTOP}/$(basename $USERHOMEDIR), if possible."
				# Changed: Link on Desktop no longer "Home-verz.", but same
				# name as last part of $USERHOMEDIR (-->PERSISTENT)
				# ln -s "$USERHOMEDIR" "${USERDESKTOP}"/"$SHARENAME"
				ln -s "$USERHOMEDIR" "${USERDESKTOP}"/$(basename "$USERHOMEDIR")
				chown "$LOCALUSER" "${USERDESKTOP}"/$(basename "$USERHOMEDIR")
				logger "openslx sharemapper: "${USERDESKTOP}"/$(basename "$USERHOMEDIR") linked."
				;;
			*)      logger "openslx sharemapper: Unknown error level mounting home share."
			;;
	esac
}

### Funktionen Mounter Ende #######################

set_userpart()
{
	case "$SCRIPTUSER" in
		0)      USERPART=""
			;;
		1)      USERPART=" su -c - $LOCALUSER "
			;;
		*)      logger "openslx utility: runscript: Unknown script user or script user not set. Running as user ${LOCALUSER}."
			# USERPART=""   # old default: Running as root
			USERPART=" su -c - $LOCALUSER "
			;;
	esac
}

### Funktionen Ende ###############################