OpenSolaris_b135/cmd/allocate/sr_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 the CD_ROM
# 

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

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

#
# 			*** Shell Function Definitions ***
#

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" `basename $0` $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}\n" $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
}

#
#			*** Begin Main Program ***
#
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

FLOPPY=$1
MAP=`dminfo -v -n $FLOPPY`
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

lform=`gettext "%s error: %s."`

if [ "$FLAG" = "i" ] ; then
   x="`eject -q $DEVFILE 2>&1`"		# Determine if there is media in drive
   z="$?"   

   case $z in
   0) 					# Media is in the drive.
	a="`eject -f $DEVFILE 2>&1`"
	b="$?"

	case $b in
	0)				# Media has been ejected 
		con_msg
		exit 0;;
	1)				# Media not ejected
		mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $a >/dev/tty
		fi
		e_con_msg
		exit 1;;
	2)			# Error 
		mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $a >/dev/tty
		fi
		e_con_msg
		exit 1;;
	3)			# Error - Perhaps drive doesn't support ejection
		mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $a >/dev/tty
		fi
		e_con_msg
		exit 1;;
	esac;;
   1) 		# No media in drive
	con_msg
	exit 0;;	
   2)			# Error 
		mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $x >/dev/tty
		fi
		e_con_msg
		exit 1;;
   3)			# Error 
		mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $x >/dev/tty
		fi
		e_con_msg
		exit 1;;
   esac
else
# interactive clean up
   x="`eject -q $DEVFILE 2>&1`"		# Determine if there is media in drive
   z="$?"   

   case $z in
   0)					# Media is in the drive.
	a="`eject -f $DEVFILE 2>&1`"
	b="$?"
	case $b in
	0)				# Media has been ejected
		user_msg
		exit 0;;
	1)				# Media not ejected
         	mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $a >/dev/tty
		fi
         	e_user_msg
         	exit 1;;
	2)				# Other Error 
		mk_error $DEVICE
		if [ "$silent" != "y" ] ; then
			printf "${lform}\n" $PROG $a >/dev/tty
		fi
		e_user_msg
         	exit 1;;
	3)				
	
		if echo $a | grep "failed" >/dev/null ; then
         	while true 		# Drive doesn't support eject, so loop	
         	    do
			c="`eject -q $DEVFILE 2>&1`"	# Is caddy in drive?
			d="$?"
            		if [ $d -eq 0 ] ; then		# Yes, Caddy in drive
				form=`gettext "Please remove the caddy from %s."`
				if [ "$silent" != "y" ] ; then
               				printf "${form}\n" $DEVICE  >/dev/tty
               				/usr/5bin/echo \\007 >/dev/tty
				fi
               			sleep 3
            		elif echo $c | grep "NOT" > /dev/null ; then
							# No,Caddy NOT in drive
               			user_msg
               			exit 0
			else				# Error occurred
         			mk_error $DEVICE
				if [ "$silent" != "y" ] ; then
					printf "${lform}\n" $PROG $a >/dev/tty
				fi
				e_user_msg
         			exit 1
            		fi
         	    done
		else 					# Some other failure
			if [ "$silent" != "y" ] ; then
				printf "${lform}\n" $PROG $a >/dev/tty
			fi
         		e_user_msg
         		mk_error $DEVICE
         		exit 1
		fi;;
			
	esac;;
   1)							# No media in the drive
         user_msg
         exit 0;;
   2)
       	mk_error $DEVICE
	if [ "$silent" != "y" ] ; then
		printf "${lform}\n" $PROG $x >/dev/tty
	fi
	e_user_msg
       	exit 1;;
   3)
       	mk_error $DEVICE
	if [ "$silent" != "y" ] ; then
		printf "${lform}\n" $PROG $x >/dev/tty
	fi
	e_user_msg
       	exit 1;;
   esac
fi
exit 2