#!/bin/bash # # Copyright (c) International Business Machines Corp., 2005 # Author: Avantika Mathur (mathurav@us.ibm.com) # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # mflags="" #mflags="-n" # Don't futz with mtab flag=y while getopts "n" arg "$@" do case "$arg" in n) flag=n shift ;; esac done bind_type="$1" dir="$2" if [ ! -d "$dir" ] then if [ -e "$dir" ]; then echo "ERROR: a file by the name \"$dir\" exists" exit 1 fi mkdir -p "$dir" echo "mkdir -p \"$dir\"" fi if [ "$flag" = "y" ] && [ "$bind_type" != slave ] then mount $mflags --bind "$dir" "$dir" || exit $? echo "mount $mflags --bind \"$dir\" \"$dir\"" fi # Try to use native mount, else fallback to included smount binary case "$bind_type" in share) echo "mount $mflags --make-rshared \"$dir\"" mount $mflags --make-rshared "$dir" 2> /dev/null || \ smount "$dir" rshared || exit $? ;; priv) echo "mount $mflags --make-rprivate \"$dir\"" mount $mflags --make-rprivate "$dir" 2> /dev/null || \ smount "$dir" rprivate || exit $? ;; slave) echo "mount $mflags --make-rslave \"$dir\"" mount $mflags --make-rslave "$dir" 2> /dev/null || \ smount "$dir" rslave || exit $? ;; unclone) echo "mount $mflags --make-runbindable \"$dir\"" mount $mflags --make-runbindable "$dir" 2> /dev/null || \ smount "$dir" runclone || exit $? ;; nshare) echo "mount $mflags --make-shared \"$dir\"" mount $mflags --make-shared "$dir" 2> /dev/null || \ smount "$dir" shared || exit $? ;; npriv) echo "mount $mflags --make-private \"$dir\"" mount $mflags --make-private "$dir" 2> /dev/null || \ smount "$dir" private || exit $? ;; nslave) echo "mount $mflags --make-slave \"$dir\"" mount $mflags --make-slave "$dir" 2> /dev/null || \ smount "$dir" slave || exit $? ;; nunclone) echo "mount $mflags --make-unbindable \"$dir\"" mount $mflags --make-unbindable "$dir" 2> /dev/null || \ smount "$dir" unclone || exit $? ;; *) echo "$0: unrecognized bind type (1st arg): $bind_type" 1>&2 exit 1 ;; esac