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 32PROG=`basename $0` 33PATH="/usr/sbin:/usr/bin" 34TEXTDOMAIN="SUNW_OST_OSCMD" 35export TEXTDOMAIN 36 37USAGE=`gettext "%s [-I|-s|-f|-i] device"` 38 39# 40# *** Shell Function Declarations *** 41# 42 43 44con_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 51e_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 58user_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 65e_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 73mk_error() { 74 chown bin /etc/security/dev/$1 75 chmod 0100 /etc/security/dev/$1 76} 77 78silent=n 79 80while getopts Iifs c 81do 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 91done 92shift `expr $OPTIND - 1` 93 94# get the map information 95 96TAPE=$1 97MAP=`dminfo -v -n $TAPE` 98DEVICE=`echo $MAP | cut -f1 -d:` 99TYPE=`echo $MAP | cut -f2 -d:` 100FILES=`echo $MAP | cut -f3 -d:` 101DEVFILE=`echo $FILES | cut -f1 -d" "` 102 103#if init then do once and exit 104 105if [ "$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 145else 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 197fi 198exit 2 199