1 #! /bin/sh 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License, Version 1.0 only 7 # (the "License"). You may not use this file except in compliance 8 # 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 # 24 # Copyright (c) 1992-1993, 1997-2001 by Sun Microsystems, Inc. 25 # All rights reserved. 26 # 27 #ident "%Z%%M% %I% %E% SMI" 28 # 29 # This a clean script for the floppy drive 30 # 31 32 PROG=`basename $0` 33 PATH="/usr/sbin:/usr/bin" 34 TEXTDOMAIN="SUNW_OST_OSCMD" 35 export TEXTDOMAIN 36 37 USAGE=`gettext "%s [-I|-s|-f|-i] device"` 38 39 # 40 # *** Shell Function Declarations *** 41 # 42 43 con_msg() { 44 form=`gettext "%s: Media in %s is ready. Please, label and store safely."` 45 if [ "$silent" != "y" ] ; then 46 printf "${form}\n" $PROG $DEVICE > /dev/console 47 fi 48 } 49 50 e_con_msg() { 51 form=`gettext "%s: Error cleaning up device %s."` 52 if [ "$silent" != "y" ] ; then 53 printf "${form}\n" $PROG $DEVICE > /dev/console 54 fi 55 } 56 57 user_msg() { 58 form=`gettext "%s: Media in %s is ready. Please, label and store safely."` 59 if [ "$silent" != "y" ] ; then 60 printf "${form}\n" $PROG $DEVICE > /dev/tty 61 fi 62 } 63 64 e_user_msg() { 65 form=`gettext "%s: Error cleaning up device %s."` 66 if [ "$silent" != "y" ] ; then 67 printf "${form}\n" $PROG $DEVICE > /dev/tty 68 gettext "Please inform system administrator.\n" > /dev/tty 69 fi 70 } 71 72 mk_error() { 73 chown bin /etc/security/dev/$1 74 chmod 0100 /etc/security/dev/$1 75 } 76 77 # 78 # *** Begin main program *** 79 # 80 81 silent=n 82 83 # Parse the argumnets 84 85 while getopts Iifs c 86 do 87 case $c in 88 I) FLAG=i 89 silent=y;; 90 i) FLAG=$c;; 91 f) FLAG=$c;; 92 s) FLAG=$c;; 93 \?) printf "${USAGE}\n" $PROG 94 exit 1 ;; 95 esac 96 done 97 shift `expr $OPTIND - 1` 98 99 # get the map information 100 101 FLOPPY=$1 102 MAP=`dminfo -v -n $FLOPPY` 103 DEVICE=`echo $MAP | cut -f1 -d:` 104 TYPE=`echo $MAP | cut -f2 -d:` 105 FILES=`echo $MAP | cut -f3 -d:` 106 DEVFILE=`echo $FILES | cut -f1 -d" "` 107 108 #if init then do once and exit 109 110 lform=`gettext "%s error: %s."` 111 112 if [ "$FLAG" = "i" ] ; then 113 x="`eject -q $DEVFILE 2>&1`" # Determine if there is media in drive 114 z="$?" 115 116 case $z in 117 0) # Media is in the drive. 118 a="`eject -f $DEVFILE 2>&1`" 119 b="$?" 120 121 case $b in 122 0) # Media has been ejected 123 con_msg 124 exit 0;; 125 1) # Media not ejected 126 mk_error $DEVICE 127 if [ "$silent" != "y" ] ; then 128 printf "${lform}\n" $PROG $a >/dev/tty 129 fi 130 e_con_msg 131 exit 1;; 132 2) # Error 133 mk_error $DEVICE 134 if [ "$silent" != "y" ] ; then 135 printf "${lform}\n" $PROG $a >/dev/tty 136 fi 137 e_con_msg 138 exit 1;; 139 3) # Error - Perhaps drive doesn't support ejection 140 mk_error $DEVICE 141 if [ "$silent" != "y" ] ; then 142 printf "${lform}\n" $PROG $a >/dev/tty 143 fi 144 e_con_msg 145 exit 1;; 146 esac;; 147 1) # No media in drive 148 con_msg 149 exit 0;; 150 2) # Error 151 mk_error $DEVICE 152 if [ "$silent" != "y" ] ; then 153 printf "${lform}\n" $PROG $x >/dev/tty 154 fi 155 e_con_msg 156 exit 1;; 157 3) # Error 158 mk_error $DEVICE 159 if [ "$silent" != "y" ] ; then 160 printf "${lform}\n" $PROG $x >/dev/tty 161 fi 162 e_con_msg 163 exit 1;; 164 esac 165 else 166 # interactive clean up 167 x="`eject -q $DEVFILE 2>&1`" # Determine if there is media in drive 168 z="$?" 169 170 case $z in 171 0) # Media is in the drive. 172 a="`eject -f $DEVFILE 2>&1`" 173 b="$?" 174 case $b in 175 0) # Media has been ejected 176 user_msg 177 exit 0;; 178 1) # Media didn't eject 179 mk_error $DEVICE 180 if [ "$silent" != "y" ] ; then 181 printf "${lform}\n" $PROG $a >/dev/tty 182 fi 183 e_user_msg 184 exit 1;; 185 2) # Other Error 186 mk_error $DEVICE 187 if [ "$silent" != "y" ] ; then 188 printf "${lform}\n" $PROG $a >/dev/tty 189 fi 190 e_user_msg 191 exit 1;; 192 3) 193 194 if echo $a | grep "failed" >/dev/null ; then 195 while true # Drive doesn't support eject, so loop 196 do 197 c="`eject -q $DEVFILE 2>&1`" # Is floppy in drive? 198 d="$?" 199 if [ $d -eq 0 ] ; then # Yes, Floppy in drive 200 form=`gettext "Please remove the floppy from %s."` 201 if [ "$silent" != "y" ] ; then 202 printf "${form}\n" $DEVICE >/dev/tty 203 /usr/5bin/echo \\007 > /dev/tty 204 fi 205 sleep 3 206 elif echo $c | grep "NOT" > /dev/null ; then 207 # No,Floppy NOT in drive 208 user_msg 209 exit 0 210 else # Error occurred 211 mk_error $DEVICE 212 if [ "$silent" != "y" ] ; then 213 printf "${lform}\n" $PROG $a >/dev/tty 214 fi 215 e_user_msg 216 exit 1 217 fi 218 done 219 else # Some other failure 220 if [ "$silent" != "y" ] ; then 221 printf "${lform}\n" $PROG $a >/dev/tty 222 fi 223 e_user_msg 224 mk_error $DEVICE 225 exit 1 226 fi;; 227 228 esac;; 229 1) # No media in the drive 230 user_msg 231 exit 0;; 232 2) 233 mk_error $DEVICE 234 if [ "$silent" != "y" ] ; then 235 printf "${lform}\n" $PROG $x >/dev/tty 236 fi 237 e_user_msg 238 exit 1;; 239 3) 240 mk_error $DEVICE 241 if [ "$silent" != "y" ] ; then 242 printf "${lform}\n" $PROG $x >/dev/tty 243 fi 244 e_user_msg 245 exit 1;; 246 esac 247 fi 248 exit 2 249