OpenSolaris_b135/cmd/allocate/st_clean.sh

#! /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
# 

PROG=`basename $0`
PATH="/usr/sbin:/usr/bin"
TEXTDOMAIN="SUNW_OST_OSCMD"
export TEXTDOMAIN

USAGE=`gettext "%s [-I|-s|-f|-i] device"`

#
# 		*** Shell Function Declarations ***
#


con_msg() {
    form=`gettext "%s: Media in %s is ready.  Please, label and store safely."`
    if [ "$silent" != "y" ] ; then
	printf "${form}\n" $PROG $DEVICE > /dev/console
    fi
}

e_con_msg() {
    form=`gettext "%s: Error cleaning up device %s."`
    if [ "$silent" != "y" ] ; then
	printf "${form}\n" $PROG $DEVICE > /dev/console
    fi
}

user_msg() {
    form=`gettext "%s: Media in %s is ready.  Please, label and store safely."`
    if [ "$silent" != "y" ] ; then
	printf "${form}\n" $PROG $DEVICE > /dev/tty
    fi
}

e_user_msg() {
    form=`gettext "%s: Error cleaning up device %s."`
    if [ "$silent" != "y" ] ; then
	printf "${form}" $PROG $DEVICE > /dev/tty
	gettext "Please inform system administrator.\n" > /dev/tty
    fi
}

mk_error() {
   chown bin /etc/security/dev/$1
   chmod 0100 /etc/security/dev/$1
}

silent=n

while getopts Iifs c
do
   case $c in
   I)	FLAG=i
	silent=y;;
   i)   FLAG=$c;;
   f)   FLAG=$c;;
   s)   FLAG=$c;;
   \?)   printf "${USAGE}\n" $PROG >/dev/tty
      exit 1 ;;
   esac
done
shift `expr $OPTIND - 1`

# get the map information

TAPE=$1
MAP=`dminfo -v -n $TAPE`
DEVICE=`echo $MAP | cut -f1 -d:`
TYPE=`echo $MAP | cut -f2 -d:`
FILES=`echo $MAP | cut -f3 -d:`
DEVFILE=`echo $FILES | cut -f1 -d" "`

#if init then do once and exit

if [ "$FLAG" = "i" ] ; then
   x="`mt -f $DEVFILE rewoffl 2>&1`"
   z="$?"   

   case $z in
   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 ; then  
         con_msg
         exit 0
      else 
         e_con_msg
         mk_error $DEVICE
         exit 1
      fi;;
   1) 
   
   # only one error mesage is satisfactory

      if echo $x | grep "no tape loaded" >/dev/null ; then
         con_msg
         exit 0
      else
         e_con_msg
         mk_error $DEVICE
         exit 1
      fi;;

   2) 

   # clean up failed exit with error

      e_con_msg
      mk_error $DEVICE
      exit 1;;

   esac
else
# interactive clean up
   x="`mt -f $DEVFILE rewoffl 2>&1`"
   z="$?"

   case $z in
   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 ; then
         user_msg
         exit 0
      else
         while true
         do
            if mt -f $DEVFILE status 2>&1 | grep "no tape loaded" > /dev/null ; then
                user_msg
                exit 0
            else
		form=`gettext "Please remove the tape from the %s."`
		if [ "$silent" != "y" ] ; then
                	printf "${form}\n" $DEVICE  >/dev/tty
                	/usr/5bin/echo \\007 >/dev/tty
		fi
                sleep 3
            fi
         done
      fi;;
   1)

   # only one error mesage is satisfactory

      if echo $x | grep "no tape loaded" > /dev/null ; then
         user_msg
         exit 0
      else
         e_user_msg
         mk_error $DEVICE
         exit 1
      fi;;

   2)

   # clean up failed exit with error

      e_user_msg
      mk_error $DEVICE
      exit 1;;

   esac
fi
exit 2