source: branches/samba-3.3.x/examples/scripts/mount/mount.smbfs

Last change on this file was 206, checked in by Herwig Bauernfeind, 16 years ago

Import Samba 3.3 branch at 3.0.0 level (psmedley's port)

File size: 2.5 KB
Line 
1#!/bin/bash
2# Debian mount.smbfs compatibility wrapper
3# Copyright 2007, Steve Langasek <vorlon at debian.org>
4# Licensed under the GNU General Public License, version 2. See the
5# file /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
6
7# This script accepts all documented mount options for mount.smbfs,
8# passing through those that are also recognized by mount.cifs,
9# converting those that are not recognized but map to available cifs
10# options, and warning about the use of options for which no equivalent
11# exists.
12
13# known bugs: quoted spaces in arguments are not passed intact
14
15set -e
16
17# reverse the order of username and password in a "username" parameter,
18# taking care to leave any "%password" bit intact
19
20reverse_username_workgroup() {
21 local workgroup password username
22
23 username="$1"
24 case "$username" in
25 *%*) password="${username#*%}"
26 username="${username%%%*}"
27 ;;
28 *) ;;
29 esac
30 case "$username" in
31 */*) workgroup="${username#*/}"
32 username="${username%%/*}"
33 ;;
34 *) ;;
35 esac
36 if [ -n "$workgroup" ]; then
37 username="$workgroup\\$username"
38 fi
39 if [ -n "$password" ]; then
40 username="$username%$password"
41 fi
42 echo "$username"
43}
44
45
46# parse out the mount options that have been specified using -o, and if
47# necessary, convert them for use by mount.cifs
48
49parse_mount_options () {
50 local OLD_IFS IFS options option username
51 OLD_IFS="$IFS"
52 IFS=","
53 options=""
54 workgroup=""
55 password=""
56
57 for option in $@; do
58 case "$option" in
59 sockopt=* | scope=* | codepage=* | ttl=* | debug=*)
60 echo "Warning: ignoring deprecated smbfs option '$option'" >&2
61 ;;
62
63 krb)
64 options="$options${options:+,}sec=krb5"
65 ;;
66
67 guest)
68 echo "Warning: mapping 'guest' to 'guest,sec=none'" >&2
69 options="$options${options:+,}guest,sec=none"
70 ;;
71
72 # username and workgroup are reversed in username= arguments,
73 # so need to be parsed out
74 username=*/*)
75 IFS="$OLD_IFS"
76 username="${option#username=}"
77 username="$(reverse_username_workgroup "$username")"
78 IFS=","
79 options="$options${options:+,}username=$username"
80 ;;
81
82 *)
83 options="$options${options:+,}$option"
84 ;;
85 esac
86 done
87 IFS="$OLD_IFS"
88 echo $options
89}
90
91args=()
92while [ "$#" -gt 0 ]; do
93 case "$1" in
94 -o*)
95 arg=${1#-o}
96 shift
97 if [ -z "$arg" ]; then
98 arg=$1
99 shift
100 fi
101 arg="$(parse_mount_options "$arg")"
102 if [ -n "$arg" ]; then
103 args=("${args[@]}" "-o" "$arg")
104 fi
105 ;;
106 *)
107 args=("${args[@]}" "$1")
108 shift
109 ;;
110 esac
111done
112
113USER="$(reverse_username_workgroup "$USER")"
114
115exec /sbin/mount.cifs "${args[@]}"
Note: See TracBrowser for help on using the repository browser.