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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
### 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()
{
# 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}. mount.nfs installed?"
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
}
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."
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"
logger "openslx sharemapper: ${SHARENAME} linked."
elif [ -n "${SHARELETTER}" ]; then
ln -s "$USERSHAREDIR" "${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
}
### Funktionen Mounter Ende #######################
### Funktionen Ende ###############################
|