1 #! /sbin/sh
   2 #
   3 #
   4 # CDDL HEADER START
   5 #
   6 # The contents of this file are subject to the terms of the
   7 # Common Development and Distribution License (the "License").
   8 # You may not use this file except in compliance with the License.
   9 #
  10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  11 # or http://www.opensolaris.org/os/licensing.
  12 # See the License for the specific language governing permissions
  13 # and limitations under the License.
  14 #
  15 # When distributing Covered Code, include this CDDL HEADER in each
  16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  17 # If applicable, add the following below this CDDL HEADER, with the
  18 # fields enclosed by brackets "[]" replaced with your own identifying
  19 # information: Portions Copyright [yyyy] [name of copyright owner]
  20 #
  21 # CDDL HEADER END
  22 #
  23 # Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
  24 #
  25 
  26 . /lib/svc/share/smf_include.sh
  27 
  28 DEVALLOC=/etc/security/device_allocate
  29 DEVMAPS=/etc/security/device_maps
  30 DEVFSADM=/usr/sbin/devfsadm
  31 MKDEVALLOC=/usr/sbin/mkdevalloc
  32 MKDEVMAPS=/usr/sbin/mkdevmaps
  33 HALFDI=/etc/hal/fdi/policy/30user/90-solaris-device-allocation.fdi
  34 
  35 # dev_allocation_convert
  36 #       All the real work gets done in this function
  37 
  38 dev_allocation_convert()
  39 {
  40 #
  41 # If allocation already configured, just return
  42 #
  43 if [ -f ${HALFDI} -a -f ${DEVALLOC} -a -f ${DEVMAPS} ]; then
  44     return
  45 fi
  46 
  47 # Prevent automount of removable and hotpluggable volume
  48 # by forcing volume.ignore HAL property on all such volumes.
  49 if [ ! -f ${HALFDI} ]; then
  50         cat > ${HALFDI} <<FDI
  51 <?xml version="1.0" encoding="UTF-8"?>
  52 <deviceinfo version="0.2">
  53   <device>
  54     <match key="info.capabilities" contains="volume">
  55       <match key="@block.storage_device:storage.removable" bool="true">
  56         <merge key="volume.ignore" type="bool">true</merge>
  57       </match>
  58       <match key="@block.storage_device:storage.hotpluggable" bool="true">
  59         <merge key="volume.ignore" type="bool">true</merge>
  60       </match>
  61     </match>
  62   </device>
  63 </deviceinfo>
  64 FDI
  65 fi
  66 
  67 # Initialize device allocation
  68 
  69 
  70 # Need to determine if Trusted Extensions is enabled.
  71 # Check the setting in etc/system (other methods won't work 
  72 # because TX is likely not yet fully active.)
  73 #
  74 grep "^[        ]*set[  ][      ]*sys_labeling[         ]*=[    ]*1" \
  75     /etc/system > /dev/null 2>&1
  76 
  77 if [ $? = 0 ]; then
  78         # Trusted Extensions is enabled (but possibly not yet booted).
  79         ${DEVFSADM} -e
  80 else
  81         if [ ! -f ${DEVALLOC} ]; then
  82                 echo "DEVICE_ALLOCATION=ON" > $DEVALLOC
  83                 ${MKDEVALLOC} >> $DEVALLOC
  84         fi
  85         if [ ! -f ${DEVMAPS} ]; then
  86                 ${MKDEVMAPS} > $DEVMAPS
  87         fi
  88 fi
  89 }
  90 
  91 dev_allocation_unconvert()
  92 {
  93         # Turn off device allocation.
  94         ${DEVFSADM} -d
  95         /usr/bin/rm -f $DEVALLOC $DEVMAPS
  96         # Restore default policy for removable and hotpluggable volumes
  97         /usr/bin/rm -f $HALFDI
  98 }
  99 
 100 case "$1" in
 101 'start')
 102         dev_allocation_convert
 103         deallocate -Is
 104         ;;
 105 'stop')
 106         state=`/usr/bin/svcprop -c -p general/enabled $SMF_FMRI 2>/dev/null`
 107         if [ "$state" = "true" ] ; then
 108                 exit $SMF_EXIT_OK
 109         fi
 110         dev_allocation_unconvert
 111         ;;
 112 esac
 113 
 114 exit $SMF_EXIT_OK