mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-25 14:17:41 +00:00
bind hooks
a file bind-hook in the tomb's root indicated directories to be mount -o bind when the tomb is opened. tomb close manages to umount them
This commit is contained in:
parent
0dab10f26c
commit
e6db14dcfc
45
src/tomb
45
src/tomb
@ -193,12 +193,6 @@ exec_as_user() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
func "executing as user '$SUDO_USER': ${(f)@}"
|
func "executing as user '$SUDO_USER': ${(f)@}"
|
||||||
# which gksu > /dev/null
|
|
||||||
# if [ $? = 0 ]; then
|
|
||||||
# func "Using gksu for execution of '${(f)@}' as user $SUDO_USER"
|
|
||||||
# gksu -u $SUDO_USER "${@[@]}"
|
|
||||||
# return $?
|
|
||||||
# fi
|
|
||||||
which sudo > /dev/null
|
which sudo > /dev/null
|
||||||
if [ $? = 0 ]; then
|
if [ $? = 0 ]; then
|
||||||
func "Using sudo for execution of '${(f)@}' as user $SUDO_USER"
|
func "Using sudo for execution of '${(f)@}' as user $SUDO_USER"
|
||||||
@ -587,10 +581,31 @@ mount_tomb() {
|
|||||||
chown $(id -u $ME):$(id -g $ME) ${tombmount}
|
chown $(id -u $ME):$(id -g $ME) ${tombmount}
|
||||||
|
|
||||||
notice "encrypted storage $tombfile succesfully mounted on $tombmount"
|
notice "encrypted storage $tombfile succesfully mounted on $tombmount"
|
||||||
|
exec_bind_hooks ${tombmount}
|
||||||
exec_as_user tomb-status ${mapper} ${tombfile} ${tombmount} &!
|
exec_as_user tomb-status ${mapper} ${tombfile} ${tombmount} &!
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exec_bind_hooks() {
|
||||||
|
mnt=$1 # first argument is where the tomb is mounted
|
||||||
|
if ! [ -r ${mnt}/bind-hooks ]; then return; fi
|
||||||
|
|
||||||
|
# if 'bind-hooks' is found inside the tomb, parse it
|
||||||
|
# every line contains two strings:
|
||||||
|
# the first is a directory existing inside the tomb
|
||||||
|
# the second is the place where it should be mounted (-o bind)
|
||||||
|
hook=`cat ${mnt}/bind-hooks | awk '
|
||||||
|
/^#/ { next }
|
||||||
|
{ if($1 && $2) print "mount -o bind \${mnt}/" $1 " " $2 "; " }
|
||||||
|
'`
|
||||||
|
# restore $HOME for the calling user
|
||||||
|
HOME=/home/${SUDO_USER}
|
||||||
|
|
||||||
|
act "bind hooks found, mounting direcories as requested"
|
||||||
|
# execute the mount commands
|
||||||
|
eval $hook
|
||||||
|
}
|
||||||
|
|
||||||
umount_tomb() {
|
umount_tomb() {
|
||||||
|
|
||||||
if ! [ $1 ]; then
|
if ! [ $1 ]; then
|
||||||
@ -601,7 +616,6 @@ umount_tomb() {
|
|||||||
return 1
|
return 1
|
||||||
elif [ "$how_many_tombs" = "1" ]; then
|
elif [ "$how_many_tombs" = "1" ]; then
|
||||||
mapper=`find /dev/mapper -name 'tomb.*'`
|
mapper=`find /dev/mapper -name 'tomb.*'`
|
||||||
tombfile=`mount | grep $mapper | awk '{print $3}'`
|
|
||||||
else
|
else
|
||||||
error "too many tombs mounted, please specify which to unmount:"
|
error "too many tombs mounted, please specify which to unmount:"
|
||||||
ls /dev/mapper/tomb.*
|
ls /dev/mapper/tomb.*
|
||||||
@ -630,15 +644,28 @@ umount_tomb() {
|
|||||||
else
|
else
|
||||||
error "tomb not found: $1"
|
error "tomb not found: $1"
|
||||||
error "please specify an existing /dev/mapper/tomb.*"
|
error "please specify an existing /dev/mapper/tomb.*"
|
||||||
tomb-notify "My tomb vanished" "Crypto undertaker will rest in peace."
|
tomb-notify "Tomb was already closed." "Undertaker will rest in peace."
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
basemap=`basename $mapper`
|
basemap=`basename $mapper`
|
||||||
tombname=`echo ${basemap} | cut -d. -f2`
|
tombname=`echo ${basemap} | cut -d. -f2`
|
||||||
|
tombmount=`mount | grep $mapper | awk '{print $3}'`
|
||||||
|
|
||||||
|
# check if there are binded dirs and close them first
|
||||||
|
mount | grep "${tombmount}" | grep -v loop 2>&1 > /dev/null
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
act "closing tomb $tombname binded directories"
|
||||||
|
unbind=`mount | grep ${tombmount} | grep -v loop | awk '
|
||||||
|
{ print "umount " $3 "; " }
|
||||||
|
'`
|
||||||
|
eval $unbind
|
||||||
|
func "umount binded dirs:"
|
||||||
|
func "$unbind"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
act "closing tomb $tombname on dm-crypt $basemap"
|
act "closing tomb $tombname on dm-crypt $basemap"
|
||||||
|
|
||||||
mount | grep $mapper 2>&1 >/dev/null
|
mount | grep $mapper 2>&1 >/dev/null
|
||||||
if [ $? = 0 ]; then # still mounted
|
if [ $? = 0 ]; then # still mounted
|
||||||
errno=`umount ${mapper}`
|
errno=`umount ${mapper}`
|
||||||
|
Loading…
Reference in New Issue
Block a user