1 #!/bin/bash 2 # 3 # Copyright (c) International Business Machines Corp., 2005 4 # Author: Avantika Mathur (mathurav (at] us.ibm.com) 5 # 6 # This library is free software; you can redistribute it and/or 7 # modify it under the terms of the GNU Lesser General Public 8 # License as published by the Free Software Foundation; either 9 # version 2.1 of the License, or (at your option) any later version. 10 # 11 # This library is distributed in the hope that it will be useful, 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 # Lesser General Public License for more details. 15 # 16 # You should have received a copy of the GNU Lesser General Public 17 # License along with this library; if not, write to the Free Software 18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 # 20 21 mflags="" 22 #mflags="-n" # Don't futz with mtab 23 24 flag=y 25 while getopts "n" arg "$@" 26 do 27 case "$arg" in 28 n) flag=n 29 shift 30 ;; 31 esac 32 done 33 34 bind_type="$1" 35 dir="$2" 36 37 38 if [ ! -d "$dir" ] 39 then 40 if [ -e "$dir" ]; then 41 echo "ERROR: a file by the name \"$dir\" exists" 42 exit 1 43 fi 44 mkdir -p "$dir" 45 echo "mkdir -p \"$dir\"" 46 fi 47 48 49 if [ "$flag" = "y" ] && [ "$bind_type" != slave ] 50 then 51 mount $mflags --bind "$dir" "$dir" || exit $? 52 echo "mount $mflags --bind \"$dir\" \"$dir\"" 53 fi 54 55 # Try to use native mount, else fallback to included smount binary 56 case "$bind_type" in 57 share) 58 echo "mount $mflags --make-rshared \"$dir\"" 59 mount $mflags --make-rshared "$dir" 2> /dev/null || \ 60 smount "$dir" rshared || exit $? 61 ;; 62 priv) 63 echo "mount $mflags --make-rprivate \"$dir\"" 64 mount $mflags --make-rprivate "$dir" 2> /dev/null || \ 65 smount "$dir" rprivate || exit $? 66 ;; 67 slave) 68 echo "mount $mflags --make-rslave \"$dir\"" 69 mount $mflags --make-rslave "$dir" 2> /dev/null || \ 70 smount "$dir" rslave || exit $? 71 ;; 72 unclone) 73 echo "mount $mflags --make-runbindable \"$dir\"" 74 mount $mflags --make-runbindable "$dir" 2> /dev/null || \ 75 smount "$dir" runclone || exit $? 76 ;; 77 nshare) 78 echo "mount $mflags --make-shared \"$dir\"" 79 mount $mflags --make-shared "$dir" 2> /dev/null || \ 80 smount "$dir" shared || exit $? 81 ;; 82 npriv) 83 echo "mount $mflags --make-private \"$dir\"" 84 mount $mflags --make-private "$dir" 2> /dev/null || \ 85 smount "$dir" private || exit $? 86 ;; 87 nslave) 88 echo "mount $mflags --make-slave \"$dir\"" 89 mount $mflags --make-slave "$dir" 2> /dev/null || \ 90 smount "$dir" slave || exit $? 91 ;; 92 nunclone) 93 echo "mount $mflags --make-unbindable \"$dir\"" 94 mount $mflags --make-unbindable "$dir" 2> /dev/null || \ 95 smount "$dir" unclone || exit $? 96 ;; 97 *) 98 echo "$0: unrecognized bind type (1st arg): $bind_type" 1>&2 99 exit 1 100 ;; 101 esac 102