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
|
#!/bin/bash
# Debian mount.smbfs compatibility wrapper
# Copyright 2007, Steve Langasek <vorlon at debian.org>
# Licensed under the GNU General Public License, version 2. See the
# file /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
# This script accepts all documented mount options for mount.smbfs,
# passing through those that are also recognized by mount.cifs,
# converting those that are not recognized but map to available cifs
# options, and warning about the use of options for which no equivalent
# exists.
# known bugs: quoted spaces in arguments are not passed intact
set -e
# reverse the order of username and password in a "username" parameter,
# taking care to leave any "%password" bit intact
reverse_username_workgroup() {
local workgroup password username
username="$1"
case "$username" in
*%*) password="${username#*%}"
username="${username%%%*}"
;;
*) ;;
esac
case "$username" in
*/*) workgroup="${username#*/}"
username="${username%%/*}"
;;
*) ;;
esac
if [ -n "$workgroup" ]; then
username="$workgroup\\$username"
fi
if [ -n "$password" ]; then
username="$username%$password"
fi
echo "$username"
}
# parse out the mount options that have been specified using -o, and if
# necessary, convert them for use by mount.cifs
parse_mount_options () {
local OLD_IFS IFS options option username
OLD_IFS="$IFS"
IFS=","
options=""
workgroup=""
password=""
for option in $@; do
case "$option" in
sockopt=* | scope=* | codepage=* | ttl=* | debug=*)
echo "Warning: ignoring deprecated smbfs option '$option'" >&2
;;
krb)
options="$options${options:+,}sec=krb5"
;;
guest)
echo "Warning: mapping 'guest' to 'guest,sec=none'" >&2
options="$options${options:+,}guest,sec=none"
;;
# username and workgroup are reversed in username= arguments,
# so need to be parsed out
username=*/*)
IFS="$OLD_IFS"
username="${option#username=}"
username="$(reverse_username_workgroup "$username")"
IFS=","
options="$options${options:+,}username=$username"
;;
*)
options="$options${options:+,}$option"
;;
esac
done
IFS="$OLD_IFS"
echo $options
}
args=()
while [ "$#" -gt 0 ]; do
case "$1" in
-o*)
arg=${1#-o}
shift
if [ -z "$arg" ]; then
arg=$1
shift
fi
arg="$(parse_mount_options "$arg")"
if [ -n "$arg" ]; then
args=("${args[@]}" "-o" "$arg")
fi
;;
*)
args=("${args[@]}" "$1")
shift
;;
esac
done
USER="$(reverse_username_workgroup "$USER")"
exec /sbin/mount.cifs "${args[@]}"
|