#!/bin/sh
# Started with file from V7.10.0.0A14
# 02/03/2016 MQ Modified to remove Model and Vendor from folder name
# 02/28/2018 MQ Added rw to the mount command.


logmsg() {
    logger "automount: $1"
}

trimws() {
    echo "$1"
}

rem_dev() {

    MOUNT_POINT=`mount | awk '{if (match($0, /\/dev\/'"$MDEV"' on /)) { \
        s = RLENGTH+1; e = match($0, / type /) - s; \
        print substr($0, s, e) \
    } }'`
    if [ "$MOUNT_POINT" != "" ] ; then
        umount "/dev/$MDEV"
        RC=$?
        rmdir "$MOUNT_POINT"
        if [ $RC -eq 0 ] ; then
            logmsg "unmounted /dev/$MDEV"
        else
            logmsg "failed to unmount /dev/$MDEV"
        fi
    fi
    return 0
}

add_dev() {

    if [ -d /sys/block/$MDEV ] ; then
        DISK_NAME=/sys/block/$MDEV
        DEV_TYPE=disk
    else
        DISK_NAME=`dirname /sys/block/*/$MDEV`
        DEV_TYPE=partition
    fi

    if [ -d $DISK_NAME/device/scsi_device ] ; then
        SCSI_DEV=$DISK_NAME/device/scsi_device/*
        SCSI_HOST=`basename $SCSI_DEV | cut -d : -f 1`
    else
        SCSI_DEV=$DISK_NAME/device/scsi_device:*
        SCSI_HOST=`basename $SCSI_DEV | cut -d : -f 2`
    fi
    SCSI_FILE=/proc/scsi/usb-storage/$SCSI_HOST
    if [ ! -f "$SCSI_FILE" ] ; then
        logmsg "ignoring non-USB storage device /dev/$MDEV"
        return 0
    fi

    MOUNT_POINT=`mount | awk '{if (match($0, /\/dev\/'"$MDEV"' on /)) { \
        s = RLENGTH+1; e = match($0, / type /) - s; \
        print substr($0, s, e) \
    } }'` 
    if [ "$MOUNT_POINT" != "" ] ; then
        # already mounted; for some reason, we get a udev pass from
        # the hotplug partition rescan and the hotplug add disk
        return 0
    fi

# Removed MQ 02/03/2016
#    DRIVE_VENDOR=`awk '{if ($1 ~ /Vendor/) \
#        print gensub(/^ +| +$/, "", "g", substr($0, index($0, $2)))}' "$SCSI_FILE"`
#    DRIVE_MODEL=`awk '{if ($1 ~ /Product/) \
#        print gensub(/^ +| +$/, "", "g", substr($0, index($0, $2)))}' "$SCSI_FILE"`
 
# Added MQ 02/03/2016
    DRIVE_VENDOR="" 
    DRIVE_MODEL=""
 
#    The serial number makes the mount point too long to type out ... 
#    DRIVE_SERIALNO=`awk '{if ($1 ~ /Serial/ && $2 ~ /Number/) \
#        print gensub(/^ +| +$/, "", "g", substr($0, index($0, $3)))}' "$SCSI_FILE"`

    if [[ "$DRIVE_VENDOR" == "" && "$DRIVE_MODEL" == "" ]] ; then
        MOUNT_POINT="/ltrx_user/$MDEV"
    else
        MOUNT_POINT="/ltrx_user/$DRIVE_VENDOR $DRIVE_MODEL $MDEV"
    fi
    MOUNT_POINT=`echo "$MOUNT_POINT" | sed -e "s/ /_/g"`

    if [[ -e $MOUNT_POINT && ! -d $MOUNT_POINT ]] ; then
        logmsg "cannot mount $MDEV; '$MOUNT_POINT' is in the way"
        return 1
    fi

# MQ 02/28/2018 Added rw to the mount command.
    tries=0
    while [ $tries -lt 3 ] ; do
        mkdir "$MOUNT_POINT"
        MRES=`mount -o sync,nodev,noexec,noatime,rw "/dev/$MDEV" "$MOUNT_POINT" 2>&1`
        MRC=$?
        if [ $MRC -ne 0 ] ; then
            if [ $DEV_TYPE == "partition" ] ; then
                logmsg "$MRES"
                logmsg "The file system type on /dev/$MDEV may not be supported"
                tries=$((tries + 1))
                sleep 1
            else
                tries=3
            fi
            rmdir "$MOUNT_POINT"
        else
            logmsg "mounted /dev/$MDEV on '$MOUNT_POINT'"
            tries=3
        fi
    done

    return 0
}

if [ "$ACTION" == "add" ] ; then
    add_dev
elif [ "$ACTION" == "remove" ] ; then
    rem_dev
else
    logmsg "unknown action '$ACTION' for dev '$MDEV'"
fi

exit $?
