Skip to content

Commit

Permalink
Add mount.cifs as a wrapper for mount.cifs.
Browse files Browse the repository at this point in the history
Karolin
  • Loading branch information
kseeger committed Feb 28, 2008
1 parent 719527f commit be5ee49
Showing 1 changed file with 115 additions and 0 deletions.
115 changes: 115 additions & 0 deletions examples/scripts/mount/mount.smbfs
Original file line number Diff line number Diff line change
@@ -0,0 +1,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[@]}"

0 comments on commit be5ee49

Please sign in to comment.