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 all tape drives 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 44 con_msg() { 45 form=`gettext "%s: Media in %s is ready. Please, label and store safely."` 46 if [ "$silent" != "y" ] ; then 47 printf "${form}\n" $PROG $DEVICE > /dev/console 48 fi 49 } 50 51 e_con_msg() { 52 form=`gettext "%s: Error cleaning up device %s."` 53 if [ "$silent" != "y" ] ; then 54 printf "${form}\n" $PROG $DEVICE > /dev/console 55 fi 56 } 57 58 user_msg() { 59 form=`gettext "%s: Media in %s is ready. Please, label and store safely."` 60 if [ "$silent" != "y" ] ; then 61 printf "${form}\n" $PROG $DEVICE > /dev/tty 62 fi 63 } 64 65 e_user_msg() { 66 form=`gettext "%s: Error cleaning up device %s."` 67 if [ "$silent" != "y" ] ; then 68 printf "${form}" $PROG $DEVICE > /dev/tty 69 gettext "Please inform system administrator.\n" > /dev/tty 70 fi 71 } 72 73 mk_error() { 74 chown bin /etc/security/dev/$1 75 chmod 0100 /etc/security/dev/$1 76 } 77 78 silent=n 79 80 while getopts Iifs c 81 do 82 case $c in 83 I) FLAG=i 84 silent=y;; 85 i) FLAG=$c;; 86 f) FLAG=$c;; 87 s) FLAG=$c;; 88 \?) printf "${USAGE}\n" $PROG >/dev/tty 89 exit 1 ;; 90 esac 91 done 92 shift `expr $OPTIND - 1` 93 94 # get the map information 95 96 TAPE=$1 97 MAP=`dminfo -v -n $TAPE` 98 DEVICE=`echo $MAP | cut -f1 -d:` 99 TYPE=`echo $MAP | cut -f2 -d:` 100 FILES=`echo $MAP | cut -f3 -d:` 101 DEVFILE=`echo $FILES | cut -f1 -d" "` 102 103 #if init then do once and exit 104 105 if [ "$FLAG" = "i" ] ; then 106 x="`mt -f $DEVFILE rewoffl 2>&1`" 107 z="$?" 108 109 case $z in 110 0) 111 112 # if this is a open reel tape than we a sucessful 113 # else must be a cartrige tape we failed 114 115 if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" >/dev/null ; then 116 con_msg 117 exit 0 118 else 119 e_con_msg 120 mk_error $DEVICE 121 exit 1 122 fi;; 123 1) 124 125 # only one error mesage is satisfactory 126 127 if echo $x | grep "no tape loaded" >/dev/null ; then 128 con_msg 129 exit 0 130 else 131 e_con_msg 132 mk_error $DEVICE 133 exit 1 134 fi;; 135 136 2) 137 138 # clean up failed exit with error 139 140 e_con_msg 141 mk_error $DEVICE 142 exit 1;; 143 144 esac 145 else 146 # interactive clean up 147 x="`mt -f $DEVFILE rewoffl 2>&1`" 148 z="$?" 149 150 case $z in 151 0) 152 153 # if this is a open reel tape than we a sucessful 154 # else must be a cartrige tape we must retry until user removes tape 155 156 if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" > /dev/null ; then 157 user_msg 158 exit 0 159 else 160 while true 161 do 162 if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" > /dev/null ; then 163 user_msg 164 exit 0 165 else 166 form=`gettext "Please remove the tape from the %s."` 167 if [ "$silent" != "y" ] ; then 168 printf "${form}\n" $DEVICE >/dev/tty 169 /usr/5bin/echo \\007 >/dev/tty 170 fi 171 sleep 3 172 fi 173 done 174 fi;; 175 1) 176 177 # only one error mesage is satisfactory 178 179 if echo $x | grep "no tape loaded" > /dev/null ; then 180 user_msg 181 exit 0 182 else 183 e_user_msg 184 mk_error $DEVICE 185 exit 1 186 fi;; 187 188 2) 189 190 # clean up failed exit with error 191 192 e_user_msg 193 mk_error $DEVICE 194 exit 1;; 195 196 esac 197 fi 198 exit 2 199