|
Server : Apache/2.2.2 (Fedora) System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686 User : apache ( 48) PHP Version : 5.2.9 Disable Function : NONE Directory : /proc/self/root/usr/share/hal/scripts/ |
Upload File : |
#!/bin/bash
# Copyright (C) 2005, Kay Sievers <kay.sievers@vrfy.org>
# Copyright (C) 2006, David Zeuthen <david@fubar.dk>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2.
# Check for environment variables
if [ "$HAL_PROP_BLOCK_DEVICE" == "" ] || [ "$HAL_PROP_INFO_UDI" == "" ] ; then
echo "Missing or empty environment variable(s)." >&2
echo "This script should be started by hald." >&2
exit 1
fi
MOUNT_POINT="$HAL_PROP_INFO_HAL_MOUNT_CREATED_MOUNT_POINT"
if [ "$MOUNT_POINT" == "" ]; then
MOUNT_POINT="$HAL_PROP_VOLUME_MOUNT_POINT"
if [ "$MOUNT_POINT" == "" ]; then
echo "org.freedesktop.Hal.Device.Volume.NotMounted" >&2
echo "Cannot figure out where device is mounted." >&2
exit 1
fi
fi
if [ "$HAL_PROP_STORAGE_MEDIA_CHECK_ENABLED" != "false" ]; then
if [ "$HAL_PROP_VOLUME_IS_MOUNTED" != "true" ]; then
echo "org.freedesktop.Hal.Device.Volume.NotMounted" >&2
echo "Device is not mounted." >&2
exit 1
fi
fi
if [ "$HAL_METHOD_INVOKED_BY_UID" != "0" ]; then
if [ "$HAL_METHOD_INVOKED_BY_UID" != "$HAL_PROP_INFO_HAL_MOUNT_MOUNTED_BY_UID" ]; then
UID_MOUNTED="$HAL_PROP_INFO_HAL_MOUNT_MOUNTED_BY_UID"
if [ "$UID_MOUNTED" == "" ]; then
UID_MOUNTED="UNKNOWN"
fi
echo "org.freedesktop.Hal.Device.Volume.PermissionDenied" >&2
echo "Volume mounted by uid $UID_MOUNTED cannot be unmounted by uid $HAL_METHOD_INVOKED_BY_UID." >&2
exit 1
fi
fi
# read parameters
# "lazy\tforce\n"
# Only allow ^a-zA-Z0-9_= in the string because otherwise someone may
# pass e.g. umask=0600,suid,dev or umask=`/bin/evil`
read GIVEN_UNMOUNTOPTIONS
GIVEN_UNMOUNTOPTIONS=${GIVEN_UNMOUNTOPTIONS//[^a-zA-Z0-9_=[:space:]]/_}
if [ "$GIVEN_UNMOUNTOPTIONS" != "" ]; then
for OPTION in $GIVEN_UNMOUNTOPTIONS; do
OPTION_WAS_OK="0"
for VALID_OPTION in $HAL_PROP_VOLUME_UNMOUNT_VALID_OPTIONS; do
if [ "$OPTION" == "$VALID_OPTION" ]; then
OPTION_WAS_OK="1"
break
fi
done
if [ "$OPTION_WAS_OK" == "1" ]; then
case "$OPTION" in
"lazy")
UNMOUNTOPTIONS="$UNMOUNTOPTIONS -l"
OPTION_WAS_OK="1"
;;
"force")
UNMOUNTOPTIONS="$UNMOUNTOPTIONS -f"
OPTION_WAS_OK="1"
;;
*)
echo "org.freedesktop.Hal.Device.Volume.UnsupportedUnmountOption" >&2
echo "The option '$OPTION' is not supported" >&2
exit 1
esac
else
echo "org.freedesktop.Hal.Device.Volume.InvalidUnmountOption" >&2
echo "The option '$OPTION' is invalid" >&2
exit 1
fi
done
fi
RESULT=$(umount $UNMOUNTOPTIONS "$MOUNT_POINT" 2>&1)
if [ $? -ne 0 ]; then
case "$RESULT" in
*busy*)
echo "org.freedesktop.Hal.Device.Volume.Busy" >&2
echo "Device is busy." >&2
;;
*"not mounted"*)
echo "org.freedesktop.Hal.Device.Volume.NotMounted" >&2
echo "Device is not mounted." >&2
;;
*)
echo "org.freedesktop.Hal.Device.Volume.UnknownFailure" >&2
echo "Unknown failure." >&2
esac
exit 1
fi
# remove directory only if HAL has created it
if [ -e "$MOUNT_POINT/.created-by-hal" ]; then
rm -f "$MOUNT_POINT/.created-by-hal"
rmdir --ignore-fail-on-non-empty "$MOUNT_POINT"
fi
hal-set-property --udi $UDI --key info.hal_mount.created_mount_point --remove > /dev/null 2>&1
hal-set-property --udi $UDI --key info.hal_mount.mounted_by_uid --remove > /dev/null 2>&1
exit 0