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