Improved checking for already mounted devices. More readable log format. Added logging of fsck(8) output. Added adding setuid also to /sbin/mount* when USERUMOUNT set to YES. Added error logging of failed mounts.
This commit is contained in:
parent
8a9e8d24f8
commit
2f2e95942e
141
automount
141
automount
|
|
@ -124,30 +124,23 @@ fi
|
|||
|
||||
if [ "${USERUMOUNT}" = YES ]
|
||||
then
|
||||
chmod u+s /sbin/umount # WHEEL group member
|
||||
sysctl vfs.usermount=1 # allow USER to mount
|
||||
chmod u+s /sbin/umount 1> /dev/null 2> /dev/null # WHEEL group member
|
||||
chmod u+s /sbin/mount* 1> /dev/null 2> /dev/null # WHEEL group member
|
||||
sysctl vfs.usermount=1 1> /dev/null 2> /dev/null # allow USER to mount
|
||||
fi
|
||||
|
||||
__create_mount_point() { # 1=DEV
|
||||
mkdir -p ${MNT}
|
||||
if ! [ "${USER}" = 0 ]
|
||||
if [ "${USER}" != 0 ]
|
||||
then
|
||||
chown ${USER}:$( id -g -n ${USER} ) ${MNT}
|
||||
fi
|
||||
}
|
||||
|
||||
__check_already_mounted() { # 1=MNT
|
||||
if mount | grep " ${1} " 1> /dev/null 2> /dev/null
|
||||
then
|
||||
__log "${DEV}:already mounted (ntfs)"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
__state_add() { # 1=DEV 2=PROVIDER 3=MNT
|
||||
if grep -E "${3}$" ${STATE} 1> /dev/null 2> /dev/null
|
||||
then
|
||||
__log "${1}:duplicated '${STATE}'"
|
||||
__log "${1}: duplicated '${STATE}'"
|
||||
exit 0
|
||||
fi
|
||||
echo "${1} ${2} ${3}" >> ${STATE}
|
||||
|
|
@ -161,12 +154,34 @@ __state_remove() { # 1=MNT
|
|||
__remove_dir() { # 1=TARGET
|
||||
if [ "${REMOVEDIRS}" = YES ]
|
||||
then
|
||||
find "${1}" -type d -empty -maxdepth 1 -exec rm -r {} '+'
|
||||
find "${1}" -type d -empty -maxdepth 1 -exec rm -r {} '+' 2> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
__log() { # @=MESSAGE
|
||||
echo $( date +"${DATEFMT}" ) ${@} >> ${LOG}
|
||||
echo $( date +"${DATEFMT}" ) "${@}" >> ${LOG}
|
||||
}
|
||||
|
||||
__check_already_mounted() { # 1=(-d|-m) 2=(DEV|MNT)
|
||||
local MOUNT="$( mount )"
|
||||
case ${1} in
|
||||
(-d)
|
||||
if echo "${MOUNT}" | grep -q "^${2} on "
|
||||
then
|
||||
local MOUNT="$( echo "${MOUNT}" | grep "^${2} on " | cut -d ' ' -f 3-255 | cut -d '(' -f 1 | sed s/.$// )"
|
||||
__log "${DEV}: -d already mounted on '${MOUNT}' mount point"
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
(-m)
|
||||
if echo "${MOUNT}" | grep -q " on ${2} "
|
||||
then
|
||||
local DEVICE="$( echo "${MOUNT}" | grep " on ${2} " | awk '{print $1}' )"
|
||||
__log "${DEVICE}: -m already mounted on '${2}' mount point"
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
DEV=/dev/${1}
|
||||
|
|
@ -175,25 +190,33 @@ case ${2} in
|
|||
(attach)
|
||||
ADD=0
|
||||
MNT="${MNTPREFIX}/${1}"
|
||||
__check_already_mounted ${MNT}
|
||||
__check_already_mounted -d ${DEV}
|
||||
__check_already_mounted -m ${MNT}
|
||||
if [ "${ATIME}" = NO ]
|
||||
then
|
||||
OPTS="noatime"
|
||||
fi
|
||||
while ! head -c 1 ${DEV} 1> /dev/null 2> /dev/null
|
||||
do
|
||||
sleep 1
|
||||
sleep 0.2
|
||||
done
|
||||
case $( file -b -L -s ${DEV} | sed -E 's/label:\ \".*\"//g' ) in
|
||||
(*FAT*) # must be before NTFS section: newfs_msdos -O NTFS -L NTFS
|
||||
__create_mount_point ${DEV}
|
||||
fsck_msdosfs -y ${DEV}
|
||||
fsck_msdosfs -y ${DEV} \
|
||||
| while read LINE
|
||||
do
|
||||
__log "${DEV}: fsck_msdosfs ${LINE}"
|
||||
done
|
||||
if mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} \
|
||||
-m 644 -M 755 ${DEV} ${MNT}
|
||||
-m 644 -M 755 ${DEV} ${MNT}
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (fat) 'mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} -m 644 -M 755 ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
__log "${DEV}:mount (fat)"
|
||||
__log "${DEV}: mount (fat)"
|
||||
;;
|
||||
(*NTFS*) # must be after FAT section: newfs_msdos -O NTFS -L NTFS
|
||||
__create_mount_point ${DEV}
|
||||
|
|
@ -202,6 +225,9 @@ case ${2} in
|
|||
if ntfs-3g -o ${OPTS} ${DEV} ${MNT}
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (ntfs) 'ntfs-3g -o ${OPTS} ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if ! [ "${USER}" = 0 ]
|
||||
|
|
@ -211,45 +237,76 @@ case ${2} in
|
|||
if mount_ntfs ${OPTS} -o noatime ${DEV} ${MNT}
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (ntfs) 'ntfs-3g -o ${OPTS} ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
__log "${DEV}:mount (ntfs)"
|
||||
__log "${DEV}: mount (ntfs)"
|
||||
;;
|
||||
(*ext2*)
|
||||
__create_mount_point ${DEV}
|
||||
fsck.ext2 -y ${DEV}
|
||||
fsck.ext2 -y ${DEV} \
|
||||
| while read LINE
|
||||
do
|
||||
__log "${DEV}: fsck.ext2 ${LINE}"
|
||||
done
|
||||
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (ext2) 'mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
__log "${DEV}:mount (ext2)"
|
||||
__log "${DEV}: mount (ext2)"
|
||||
;;
|
||||
(*ext3*)
|
||||
__create_mount_point ${DEV}
|
||||
fsck.ext3 -y ${DEV}
|
||||
fsck.ext3 -y ${DEV} \
|
||||
| while read LINE
|
||||
do
|
||||
__log "${DEV}: fsck.ext3 ${LINE}"
|
||||
done
|
||||
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (ext3) 'mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
__log "${DEV}:mount (ext3)"
|
||||
__log "${DEV}: mount (ext3)"
|
||||
;;
|
||||
(*ext4*)
|
||||
__create_mount_point ${DEV}
|
||||
fsck.ext4 -y ${DEV}
|
||||
fsck.ext4 -y ${DEV} \
|
||||
| while read LINE
|
||||
do
|
||||
__log "${DEV}: fsck.ext4 ${LINE}"
|
||||
done
|
||||
if ext4fuse ${DEV} ${MNT} # sysutils/fusefs-ext4fuse
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (ext4) 'ext4fuse ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
__log "${DEV}:mount (ext4)"
|
||||
__log "${DEV}: mount (ext4)"
|
||||
;;
|
||||
(*Unix\ Fast\ File*)
|
||||
__create_mount_point ${DEV}
|
||||
fsck_ufs -C -y ${DEV}
|
||||
if mount -o ${OPTS} ${DEV} ${MNT}
|
||||
fsck_ufs -C -y ${DEV} \
|
||||
| while read LINE
|
||||
do
|
||||
__log "${DEV}: fsck_ufs ${LINE}"
|
||||
done
|
||||
if mount -t ufs -o ${OPTS} ${DEV} ${MNT}
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (ufs) 'mount -t ufs -o ${OPTS} ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
__log "${DEV}:mount (ufs)"
|
||||
__log "${DEV}: mount (ufs)"
|
||||
;;
|
||||
(*)
|
||||
case $( dd < ${DEV} count=1 2> /dev/null | strings | head -1 ) in
|
||||
|
|
@ -258,8 +315,11 @@ case ${2} in
|
|||
if mount.exfat -o ${OPTS} ${DEV} ${MNT} # sysutils/fusefs-exfat
|
||||
then
|
||||
ADD=1
|
||||
else
|
||||
__log "${DEV}: mount failed (exfat) 'mount.exfat -o ${OPTS} ${DEV} ${MNT}'"
|
||||
exit 1
|
||||
fi
|
||||
__log "${DEV}:mount (exfat)"
|
||||
__log "${DEV}: mount (exfat)"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
|
@ -271,7 +331,8 @@ case ${2} in
|
|||
__state_add ${DEV} ${PROVIDER} ${MNT}
|
||||
if [ "${USER}" != 0 -a "${FM}" != 0 ]
|
||||
then
|
||||
su - ${USER} -c "env DISPLAY=:0 ${FM} ${MNT} &"
|
||||
# su - ${USER} -c "env DISPLAY=:0 ${FM} ${MNT} &"
|
||||
su - ${USER} -c "env DISPLAY=:0 ${FM} &"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
|
@ -286,25 +347,17 @@ case ${2} in
|
|||
then
|
||||
continue
|
||||
fi
|
||||
( # put entire umount and find/rm block into background
|
||||
( # put entire umount/find/rm block into background
|
||||
umount -f ${TARGET}
|
||||
__remove_dir "${TARGET}"
|
||||
__log "${DEV}:removed '${TARGET}'"
|
||||
__log "${DEV}: removed '${TARGET}'"
|
||||
) &
|
||||
unset TARGET
|
||||
__log "${DEV}:umount"
|
||||
__log "${DEV}: umount"
|
||||
done
|
||||
__log "${DEV}:detach"
|
||||
__log "${DEV}: detach"
|
||||
__remove_dir "${MNTPREFIX}/${1}"
|
||||
__log "${DEV}:removed '${MNTPREFIX}/${1}'"
|
||||
__log "${DEV}: mount point '${MNTPREFIX}/${1}' removed"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# camcontrol devlist
|
||||
# <INTEL SSDSA2M160G2GC 2CV102HD> at scbus0 target 0 lun 0 (ada0,pass0)
|
||||
# <HTC Android Phone 0100> at scbus4 target 0 lun 0 (pass1,da0)
|
||||
|
||||
# camcontrol devlist | grep -E -o "<.*>" | tr ' ' '-' | tr -d '<>'
|
||||
# INTEL-SSDSA2M160G2GC-2CV102HD
|
||||
# HTC-Android-Phone-0100
|
||||
|
|
|
|||
Loading…
Reference in New Issue