### Funktionen #################################### function xor() { local RES=($(echo "$1" | sed "s/../0x& /g")) shift 1 while [[ "$1" ]]; do local ONE=($(echo "$1" | 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 shift 1 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() { # Ausgabe: konnte mounten: 0, konnte nicht mounten: 1, schon gemountet 2 already_mounted "$4" ERR=$? if [ "$ERR" -eq 0 ]; then logger "openslx sharemapper: $3 already mounted." AUSGANG=2 else case "$MOUNTER" in nfs) AUSGANG=0 x=2 while ! mount $1 $2 $3 $4 2>/dev/null 1>&2; do logger "openslx sharemapper: could not mount ${3} to ${4}, waited another $x seconds, retrying." sleep $x if [ "$x" -gt 6 ]; then AUSGANG=1 logger "openslx sharemapper: timeout, could not mount ${3} to ${4}." break fi let x=x+2 done [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${3} mounted to ${4} (nfs)." # Todo: Schöner schreiben:) ;; cifs) AUSGANG=0 x=2 for VERSION in $CIFSVERSIONS; do AUSGANG=0 while ! mount $1 vers="$VERSION",${2} $3 $4 2>/dev/null 1>&2; do logger "openslx sharemapper: could not mount ${3} to ${4}, waited another $x seconds, retrying." sleep $x if [ "$x" -gt 4 ]; then AUSGANG=1 logger "openslx sharemapper: timeout, could not mount ${3} to ${4} cifs v${VERSION}." break fi let x=x+2 done [ "$AUSGANG" -eq 0 ] && break done [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${3} mounted to ${4} (cifs $VERSION)." ;; *) logger "openslx sharemapper: unknown mounter ${MOUNTER}!" ;; esac fi return $AUSGANG } ### Funktionen Ende ###############################