#! /bin/sh # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 1992-1993, 1997-2001 by Sun Microsystems, Inc. # All rights reserved. # #ident "%Z%%M% %I% %E% SMI" # # This a clean script for all tape drives # setvar PROG = $(basename $0) setvar PATH = ""/usr/sbin:/usr/bin"" setvar TEXTDOMAIN = ""SUNW_OST_OSCMD"" export TEXTDOMAIN setvar USAGE = $(gettext "%s [-I|-s|-f|-i] device) # # *** Shell Function Declarations *** # proc con_msg { setvar form = $(gettext "%s: Media in %s is ready. Please, label and store safely.) if test $silent != "y" { printf "${form}\n" $PROG $DEVICE > /dev/console } } proc e_con_msg { setvar form = $(gettext "%s: Error cleaning up device %s.) if test $silent != "y" { printf "${form}\n" $PROG $DEVICE > /dev/console } } proc user_msg { setvar form = $(gettext "%s: Media in %s is ready. Please, label and store safely.) if test $silent != "y" { printf "${form}\n" $PROG $DEVICE > /dev/tty } } proc e_user_msg { setvar form = $(gettext "%s: Error cleaning up device %s.) if test $silent != "y" { printf ${form} $PROG $DEVICE > /dev/tty gettext "Please inform system administrator.\n" > /dev/tty } } proc mk_error { chown bin /etc/security/dev/$1 chmod 0100 /etc/security/dev/$1 } setvar silent = 'n' while getopts Iifs c { match $c { with I setvar FLAG = 'i' setvar silent = 'y' with i setvar FLAG = "$c" with f setvar FLAG = "$c" with s setvar FLAG = "$c" with \? printf "${USAGE}\n" $PROG >/dev/tty exit 1 } } shift $(expr $OPTIND - 1) # get the map information setvar TAPE = "$1" setvar MAP = $(dminfo -v -n $TAPE) setvar DEVICE = $(echo $MAP | cut -f1 -d:) setvar TYPE = $(echo $MAP | cut -f2 -d:) setvar FILES = $(echo $MAP | cut -f3 -d:) setvar DEVFILE = $(echo $FILES | cut -f1 -d" ) #if init then do once and exit if test $FLAG = "i" { setvar x = "$(mt -f $DEVFILE rewoffl )" setvar z = ""$Status"" match $z { with 0 # if this is a open reel tape than we a sucessful # else must be a cartrige tape we failed if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" >/dev/null { con_msg exit 0 } else { e_con_msg mk_error $DEVICE exit 1 } with 1 # only one error mesage is satisfactory if echo $x | grep "no tape loaded" >/dev/null { con_msg exit 0 } else { e_con_msg mk_error $DEVICE exit 1 } with 2 # clean up failed exit with error e_con_msg mk_error $DEVICE exit 1 } } else { # interactive clean up setvar x = "$(mt -f $DEVFILE rewoffl )" setvar z = ""$Status"" match $z { with 0 # if this is a open reel tape than we a sucessful # else must be a cartrige tape we must retry until user removes tape if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" > /dev/null { user_msg exit 0 } else { while true { if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" > /dev/null { user_msg exit 0 } else { setvar form = $(gettext "Please remove the tape from the %s.) if test $silent != "y" { printf "${form}\n" $DEVICE >/dev/tty /usr/5bin/echo '\'007 >/dev/tty } sleep 3 } } } with 1 # only one error mesage is satisfactory if echo $x | grep "no tape loaded" > /dev/null { user_msg exit 0 } else { e_user_msg mk_error $DEVICE exit 1 } with 2 # clean up failed exit with error e_user_msg mk_error $DEVICE exit 1 } } exit 2