mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
707012ab5f
Karolin
(This used to be commit be5ee4999e
)
116 lines
2.5 KiB
Bash
116 lines
2.5 KiB
Bash
#!/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[@]}"
|