#!/bin/sh

logmsg() {
    logger "$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

    SCSI_DEV=$DISK_NAME/device/scsi_device:*
    SCSI_HOST=`basename $SCSI_DEV | cut -d : -f 2`
    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

    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"`
 
#    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

    mkdir "$MOUNT_POINT"

    MRES=`mount -o sync,nodev,noexec "/dev/$MDEV" "$MOUNT_POINT" 2>&1`
    if [ $? -ne 0 ] ; then
        if [ $DEV_TYPE == "partition" ] ; then
            logmsg "failed to mount /dev/$MDEV; the filesystem type may not be supported"
        fi
        rmdir "$MOUNT_POINT"
    else
        logmsg "mounted /dev/$MDEV on '$MOUNT_POINT'"
    fi

    return 0
}


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

exit $?
