home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / hal / scripts / hal-system-storage-eject < prev    next >
Encoding:
Text File  |  2006-08-30  |  2.2 KB  |  68 lines

  1. #!/bin/bash
  2.  
  3. # Copyright (C) 2005, Kay Sievers <kay.sievers@vrfy.org>
  4. # Copyright (C) 2006, David Zeuthen <david@fubar.dk>
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License version 2.
  8. #
  9. # Check for environment variables
  10. if [ "$HAL_PROP_BLOCK_DEVICE" == "" ] || [ "$HAL_PROP_INFO_UDI" == "" ] ; then
  11.     echo "Missing or empty environment variable(s)." >&2
  12.     echo "This script should be started by hald." >&2
  13.     exit 1
  14. fi
  15.  
  16. if [ "$HAL_METHOD_INVOKED_BY_UID" != "0" ]; then
  17.     if [ "$HAL_PROP_INFO_HAL_MOUNT_CREATED_MOUNT_POINT" != "" ]; then
  18.     if [ "$HAL_METHOD_INVOKED_BY_UID" != "$HAL_PROP_INFO_HAL_MOUNT_MOUNTED_BY_UID" ]; then
  19.         echo "org.freedesktop.Hal.Device.Volume.PermissionDenied" >&2
  20.         echo "Volume mounted by uid $HAL_PROP_INFO_HAL_MOUNT_MOUNTED_BY_UID cannot be ejected by uid $HAL_METHOD_INVOKED_BY_UID." >&2
  21.         exit 1
  22.     fi
  23.     fi
  24. fi
  25.  
  26. # read parameters
  27. # "<option1>\t<option2>\n"
  28. # Only allow ^a-zA-Z0-9_= in the string because otherwise someone may
  29. # pass e.g. umask=0600,suid,dev or umask=`/bin/evil`
  30.  
  31. read GIVEN_EJECTOPTIONS
  32. GIVEN_EJECTOPTIONS=${GIVEN_EJECTOPTIONS//[^a-zA-Z0-9_=[:space:]]/_}
  33.  
  34. # check validity of user id
  35. if [ "$HAL_METHOD_INVOKED_BY_UID" = "0" ]; then
  36.     echo "Script was called with HAL_METHOD_INVOKED_BY_UID=0, aborting." >&2
  37.     exit 1
  38. fi
  39. PWD=`getent passwd "$HAL_METHOD_INVOKED_BY_UID"` || {
  40.     echo "User id $HAL_METHOD_INVOKED_BY_UID does not exist." >&2
  41.     exit 1
  42. }
  43. USER="`echo "$PWD" | cut -f 1 -d: | head -n 1`"
  44.  
  45. RESULT=$(su -c "eject '$HAL_PROP_BLOCK_DEVICE'" "$USER" 2>&1)
  46. if [ $? -ne 0 ]; then
  47.     case "$RESULT" in
  48.     *busy*)
  49.         echo "org.freedesktop.Hal.Device.Volume.Busy" >&2
  50.         echo "Device is busy." >&2
  51.         ;;
  52.     *)
  53.         echo "org.freedesktop.Hal.Device.Volume.UnknownFailure" >&2
  54.         echo "Unknown failure." >&2
  55.     esac
  56.     exit 1
  57. fi
  58.  
  59. if [ "$HAL_PROP_INFO_HAL_MOUNT_CREATED_MOUNT_POINT" != "" ]; then
  60.     # remove directory only if HAL has created it
  61.     if [ -e $HAL_PROP_INFO_HAL_MOUNT_CREATED_MOUNT_POINT/.created-by-hal ]; then
  62.     rm -f $HAL_PROP_INFO_HAL_MOUNT_CREATED_MOUNT_POINT/.created-by-hal
  63.     rmdir --ignore-fail-on-non-empty "$HAL_PROP_INFO_HAL_MOUNT_CREATED_MOUNT_POINT"
  64.     fi
  65. fi
  66.  
  67. exit 0
  68.