diff --git a/README b/README index 7dfa480..892d602 100644 --- a/README +++ b/README @@ -32,7 +32,7 @@ Now plugin Your USB thumb drive ;) Have Fun ;) vermaden ----------- +------------------------------------------------------------------------------- Latest changes ... @@ -70,3 +70,16 @@ https://github.com/vermaden/automount Regards, vermaden +------------------------------------------------------------------------------- + +Latest changes ... + +FAT/NTFS detection improvements. +The 'chown' now uses sets user's group. +MSDOS filesystem is now mounted with -m 644 -M 755 options by default. +Removed POPUP=YES option, just use USER + FM for simplicity. +NTFS filesystem, when mounted by mount_ntfs(8) uses -u and -g options by default. +Even more simplified 'detach' section. + +Regards, +vermaden diff --git a/automount.conf b/automount.conf index f1c0a2b..a2d89cd 100644 --- a/automount.conf +++ b/automount.conf @@ -1,5 +1,4 @@ USERUMOUNT=YES -POPUP=YES FM="nautilus --browser --no-desktop" USER=vermaden ENCODING=pl_PL.ISO8859-2 diff --git a/automount.sh b/automount.sh index ad80929..4e8db72 100755 --- a/automount.sh +++ b/automount.sh @@ -1,10 +1,10 @@ #! /bin/sh -# Copyright (c) 2011 Slawomir Wojciech Wojtczak (vermaden) +# Copyright (c) 2012 Slawomir Wojciech Wojtczak (vermaden) # All rights reserved. # # Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: +# modification, are permitted provided that following conditions are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright @@ -14,7 +14,7 @@ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS 'AS IS' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND @@ -26,32 +26,31 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin [ -f /usr/local/etc/automount.conf ] && . /usr/local/etc/automount.conf -: ${MNTPREFIX="/media"} -: ${LOG="/var/log/automount.log"} -: ${STATE="/var/run/automount.state"} -: ${ENCODING="en_US.ISO8859-1"} # /* US/Canada */ -: ${CODEPAGE="cp437"} # /* US/Canada */ -: ${DATEFMT="%Y-%m-%d %H:%M:%S"} # /* 2012-02-20 07:49:09 */ -: ${USERUMOUNT="NO"} # /* when YES add suid bit to umount(8) */ -: ${POPUP="NO"} # /* display file manager window */ -: ${USER="0"} # /* which user to use for popup */ -: ${FM="0"} # /* which file manager to use */ +: ${MNTPREFIX="/media"} # mount prefix +: ${LOG="/var/log/automount.log"} # log file +: ${STATE="/var/run/automount.state"} # current state file +: ${ENCODING="en_US.ISO8859-1"} # US/Canada +: ${CODEPAGE="cp437"} # US/Canada +: ${DATEFMT="%Y-%m-%d %H:%M:%S"} # 2012-02-20 07:49:09 +: ${USERUMOUNT="NO"} # when YES add suid bit to umount(8) +: ${USER="0"} # which user to use for popup +: ${FM="0"} # which file manager to use -[ "${USERUMOUNT}" = "YES" ] && chmod u+s /sbin/umount # /* WHEEL group member */ +[ "${USERUMOUNT}" = YES ] && chmod u+s /sbin/umount # WHEEL group member -__create_mount_point() { # /* 1=DEV */ +__create_mount_point() { # 1=DEV mkdir -p ${MNT} - [ "${USER}" != 0 ] && chown ${USER} ${MNT} + [ "${USER}" = 0 ] || chown ${USER}:$( id -g -n ${USER} ) ${MNT} } -__check_already_mounted() { # /* 1=MNT */ +__check_already_mounted() { # 1=MNT mount | grep " ${1} " 1> /dev/null 2> /dev/null && { __log "${DEV}:already mounted (ntfs)" exit 0 } } -__state_add() { # /* 1=DEV 2=PROVIDER 3=MNT */ +__state_add() { # 1=DEV 2=PROVIDER 3=MNT grep -E "${3}$" ${STATE} 1> /dev/null 2> /dev/null && { __log "${1}:duplicated '${STATE}'" exit 0 @@ -59,12 +58,12 @@ __state_add() { # /* 1=DEV 2=PROVIDER 3=MNT */ echo "${1} ${2} ${3}" >> ${STATE} } -__state_remove() { # /* 1=MNT 2=STATE */ - BSMNT=$( echo ${1} | sed 's/\//\\\//g' ) # /* backslash the slashes ;) */ - sed -i '' "/${BSMNT}\$/d" ${2} +__state_remove() { # 1=MNT + BSMNT=$( echo ${1} | sed 's/\//\\\//g' ) # backslash the slashes ;) + sed -i '' "/${BSMNT}\$/d" ${STATE} } -__log() { # /* @=MESSAGE */ +__log() { # @=MESSAGE echo $( date +"${DATEFMT}" ) ${@} >> ${LOG} } @@ -73,28 +72,30 @@ DEV=/dev/${1} case ${2} in (attach) ADD=0 - MNT="${MNTPREFIX}/$( basename ${1} )" + MNT="${MNTPREFIX}/${1}" __check_already_mounted ${MNT} __create_mount_point ${DEV} case $( file -b -L -s ${DEV} | sed -E 's/label:\ \".*\"//g' ) in - (*NTFS*) - dd < ${DEV} count=1 2> /dev/null | strings | head -1 | grep -q "NTFS" && { - which ntfsfix 1> /dev/null 2> /dev/null && { - ntfsfix ${DEV} # /* sysutils/ntfsprogs */ - } - which ntfs-3g 1> /dev/null 2> /dev/null && { - ntfs-3g -o noatime ${DEV} ${MNT} && ADD=1 # /* sysutils/fusefs-ntfs */ - } || { - mount_ntfs -o noatime ${DEV} ${MNT} && ADD=1 - } - __log "${DEV}:mount (ntfs)" + (*FAT*) # must be before NTFS section: newfs_msdos -O NTFS -L NTFS + dd < ${DEV} count=1 2> /dev/null | strings | grep "FAT32" && { + fsck_msdosfs -y ${DEV} + mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} \ + -m 644 -M 755 ${DEV} ${MNT} && ADD=1 + __log "${DEV}:mount (fat)" } ;; - (*FAT*) - dd < ${DEV} count=1 2> /dev/null | strings | grep -q "FAT32" && { - fsck_msdosfs -y ${DEV} - mount_msdosfs -o large -L ${ENCODING} -D ${CODEPAGE} ${DEV} ${MNT} && ADD=1 - __log "${DEV}:mount (fat)" + (*NTFS*) # must be after FAT section: newfs_msdos -O NTFS -L NTFS + dd < ${DEV} count=1 2> /dev/null | strings | head -1 | grep "NTFS" && { + which ntfsfix 1> /dev/null 2> /dev/null && { + ntfsfix ${DEV} # sysutils/ntfsprogs + } + which ntfs-3g 1> /dev/null 2> /dev/null && { + ntfs-3g -o noatime ${DEV} ${MNT} && ADD=1 # sysutils/fusefs-ntfs + } || { + [ "${USER}" = 0 ] || OPTS="-u ${USER} -g $( id -g -n ${USER} )" + mount_ntfs ${OPTS} -o noatime ${DEV} ${MNT} && ADD=1 + } + __log "${DEV}:mount (ntfs)" } ;; (*ext2*) @@ -109,7 +110,7 @@ case ${2} in ;; (*ext4*) fsck.ext4 -y ${DEV} - ext4fuse ${DEV} ${MNT} && ADD=1 # /* sysutils/fusefs-ext4fuse */ + ext4fuse ${DEV} ${MNT} && ADD=1 # sysutils/fusefs-ext4fuse __log "${DEV}:mount (ext4)" ;; (*Unix\ Fast\ File*) @@ -120,28 +121,27 @@ case ${2} in (*) case $( dd < ${DEV} count=1 2> /dev/null | strings | head -1 ) in (EXFAT) - mount.exfat -o noatime ${DEV} ${MNT} && ADD=1 # /* sysutils/fusefs-exfat */ + mount.exfat -o noatime ${DEV} ${MNT} && ADD=1 # sysutils/fusefs-exfat __log "${DEV}:mount (ufs)" ;; esac ;; esac [ ${ADD} -eq 1 ] && { + ADD=0 PROVIDER=$( mount | grep -m 1 " ${MNT} " | awk '{printf $1}' ) __state_add ${DEV} ${PROVIDER} ${MNT} - [ "${POPUP}" = YES ] && [ "${USER}" != 0 ] && [ "${FM}" != 0 ] \ + [ "${USER}" != 0 ] && [ "${FM}" != 0 ] \ && su - ${USER} -c "env DISPLAY=:0 ${FM} ${MNT} &" - ADD=0 } ;; (detach) - M=$( mount ) grep -E "${PREFIX}/${1}$" ${STATE} \ | while read DEV PROVIDER MNT do - TARGET=$( echo "$M" | grep -E "^${PROVIDER} " | awk '{print $3}' ) - __state_remove ${MNT} ${STATE} + TARGET=$( mount | grep -E "^${PROVIDER} " | awk '{print $3}' ) + __state_remove ${MNT} [ -z ${TARGET} ] && continue umount -f ${TARGET} & unset TARGET