#!/bin/sh
# ltspfs_entry
# place in /lib/udev
# $1 = mode (add/remove)
# $2 = devicename
# $3 = fstype (optional)

ROOT=/var/run/drives
FSTAB=/var/run/ltspfs_fstab

call_ltspfsmounter()
{
    action="$1"
    MOUNTPOINT=$2
    for LDM_SOCKET in /var/run/ldm_socket_*; do
        if [ -S ${LDM_SOCKET} ]; then
            SERVER=${LDM_SOCKET##*_}
            SSH_OPTS="-X"
            # see if we have a command with DISPLAY matching our socket
            IS_DIRECTX=$(pgrep -f -l ${LDM_SOCKET}.*DISPLAY)

            unset DISPLAY_INFO
            # get the DISPLAY info for ltspfsmounter
            if [ -n "${IS_DIRECTX}" ];then
                unset SSH_OPTS
                for line in $IS_DIRECTX ; do
                    case $line in
                        DISPLAY*)
                            DISPLAY_INFO="${line}"
                        ;;
                    esac
                done
            fi

            /usr/bin/ssh $SSH_OPTS -S ${LDM_SOCKET} ${SERVER} \
                "$DISPLAY_INFO /usr/sbin/ltspfsmounter ${MOUNTPOINT} $action"
        fi
    done
}

remove_device()
{
    DEVICENAME="$1"
    while read DEV MOUNTPOINT TYPE OPTIONS DUMP PASS; do
        if [ "${DEV}" = "/dev/${DEVICENAME}" ]; then
            umount -l ${MOUNTPOINT}
            rmdir ${MOUNTPOINT}
            call_ltspfsmounter remove ${MOUNTPOINT}
            sed -i -e "\@ ${MOUNTPOINT} @d" ${FSTAB}
            exit 0
        fi
    done < ${FSTAB}
}

add_device() {
    DEVICENAME="$1"
    if [ -x /sbin/udevadm ]; then
        udevinfo="/sbin/udevadm info"
    else
        udevinfo=udevinfo
    fi
    export $($udevinfo -qenv -n ${DEVICENAME})
    
    # Make sure we have a valid FSTYPE
    [ -z "${FSTYPE}" ] && FSTYPE="${ID_FS_TYPE}"   # Use udevinfo ID_FS_TYPE
    [ -z "${FSTYPE}" ] && exit 1                   # That's empty too, die.
    
    LABEL=${ID_FS_LABEL_SAFE}
    BASEDEV=${DEVICENAME%%[0-9]*}
    
    [ "${BASEDEV}" = "fd" ] && LABEL="floppy${DEVICENAME##fd}"
    [ -z "${LABEL}" ] && LABEL="${ID_BUS}${ID_TYPE}-${DEVICENAME}"
    
    # Invent $MOUNTPOINT
    MOUNTPOINT=$ROOT/$LABEL
    mkdir -p ${MOUNTPOINT}
    
    echo "/dev/${DEVICENAME} ${MOUNTPOINT} ${FSTYPE} defaults 0 0" >> ${FSTAB}
    
    call_ltspfsmounter add ${MOUNTPOINT}
}

if [ "$1" = "add" ] || [ "$1" = "remove" ]; then
    MODE=$1
    shift
else
    # backwards compatibility:
    # called as add_fstab_entry or remove_fstab_entry
    MODE=$(basename $0)
fi

DEVICENAME=$(basename $1)
FSTYPE=$2

case $MODE in
    add*) add_device $DEVICENAME ;;
    remove*) remove_device $DEVICENAME ;;
    *) exit 1 ;;
esac
