#!/bin/sh # Wrapper script for FreeBSD and PC-BSD, which takes calls from HAL # for running mount_ntfs, and performs it with a given FUSE helper. ################################################################### ## Modify this next variable to point to the correct FUSE helper. FUSE_HELPER="ntfs-3g" ## DO NOT modify anything below this. FUSEDB="/tmp" if [ -n "${TMPDIR}" ] then FUSEDB=${TMPDIR} fi FUSEDB="${FUSEDB}/.fuse-mnts" MNTSTRING="" OPTIONS="" FOUNDOPT="0" FOUNDU="0" FOUNDG="0" FOUNDBADARG="0" HWDEV="" FOUNDDEV="0" for i in $@ do if [ "$FOUNDOPT" = "1" ] then OPTIONS="${OPTIONS} -o ${i}" elif [ "${FOUNDU}" = "1" ] then OPTIONS="${OPTIONS} -o uid=${i}" elif [ "${FOUNDG}" = "1" ] then OPTIONS="${OPTIONS} -o gid=${i}" elif [ "${FOUNDBADARG}" = "1" ] then # We have an invalid argument flag, so ignore it and following argument FOUNDBADARG="0" else if [ "${FOUNDDEV}" = "1" ] then # Save the mount-point, will be used later MNTPOINT="${i}" FOUNDDEV="2" fi echo ${i}| grep -q "/dev" 2>/dev/null if [ "$?" = "0" -a "${FOUNDDEV}" = "0" ] then FOUNDDEV="1" # Lets check if we were given a fuse[] device # or a real device name echo "${i}" | grep -q "fuse" 2>/dev/null if [ "$?" = "0" ] then # Lets save the old fuse device name we had saved OLDFUSE="${i}" # Lets get the *real* device name for FUSE helper REALHWDEV="`cat ${FUSEDB} | grep ${i} | cut -d '=' -f 2`" # Now lets change the string we will be saving i="${REALHWDEV}" else # We are doing a first time mount of this device # Set the real device name for mounting REALHWDEV="${i}" fi fi # Add the value to our mount string if it isn't any invalid flag if [ "${i}" != "-o" -a "${i}" != "-u" -a "${i}" != "-C" -a "${i}" != "-g" -a "${i}" != "-m" -a "${i}" != "-a" -a "${i}" != "-i" -a "${i}" -a "-W" ] then MNTSTRING="${MNTSTRING} ${i}" fi fi # Check if we are on a -u user id flag now if [ "${i}" = "-u" ] then FOUNDU="1" else FOUNDU="0" fi # Check if we are on a -g group id flag now if [ "${i}" = "-g" ] then FOUNDG="1" else FOUNDG="0" fi # Check if we are on a -o option if [ "${i}" = "-o" ] then FOUNDOPT="1" else FOUNDOPT="0" fi # Check if we are on some other invalid flag if [ "${i}" = "-C" -o "${i}" = "-m" -o "${i}" = "-W" ] then FOUNDBADARG="1" else FOUNDBADARG="0" fi done # Save our final string which our FUSE helper will use FINALSTRING="${MNTSTRING} ${OPTIONS}" # Check that fuse.ko is loaded kldstat | grep -q fuse 2>/dev/null if [ "$?" != "0" ] then kldload /usr/local/modules/fuse.ko fi # Run the FUSE helper command now, with the options in the right order ${FUSE_HELPER} ${FINALSTRING} # If we have an OLDFUSE variable, lets clear it from the list if [ ! -z "${OLDFUSE}" -a -e ${FUSEDB} ] then cat ${FUSEDB} | grep -v "${OLDFUSE}=" > /tmp/.newfuse mv /tmp/.newfuse ${FUSEDB} fi # Now lets figure out which fuse device was used and save it to DB NEWFUSE="`mount | tr -s ' ' | grep \" ${MNTPOINT} \" | cut -d ' ' -f 1`" # Make sure we don't already have this fuse device listed if [ -e ${FUSEDB} ] then cat ${FUSEDB} | grep -v "${NEWFUSE}=" > /tmp/.newfuse mv /tmp/.newfuse ${FUSEDB} else touch ${FUSEDB} fi # Save the fuse device to our DB echo "${NEWFUSE}=${REALHWDEV}" >> ${FUSEDB} # Finished! exit 0