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 the CD_ROM
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 Definitions ***
41#
42
43con_msg() {
44    form=`gettext "%s: Media in %s is ready.  Please, label and store safely."`
45    if [ "$silent" != "y" ] ; then
46	printf "${form}\n" $PROG $DEVICE > /dev/console
47    fi
48}
49
50e_con_msg() {
51    form=`gettext "%s: Error cleaning up device %s."`
52    if [ "$silent" != "y" ] ; then
53	printf "${form}\n" `basename $0` $DEVICE > /dev/console
54    fi
55}
56
57user_msg() {
58    form=`gettext "%s: Media in %s is ready.  Please, label and store safely."`
59    if [ "$silent" != "y" ] ; then
60	printf "${form}\n" $PROG $DEVICE > /dev/tty
61    fi
62}
63
64e_user_msg() {
65    form=`gettext "%s: Error cleaning up device %s."`
66    if [ "$silent" != "y" ] ; then
67	printf "${form}\n" $PROG $DEVICE > /dev/tty
68	gettext "Please inform system administrator.\n" > /dev/tty
69    fi
70}
71
72mk_error() {
73   chown bin /etc/security/dev/$1
74   chmod 0100 /etc/security/dev/$1
75}
76
77#
78#			*** Begin Main Program ***
79#
80silent=n
81
82while getopts Iifs c
83do
84   case $c in
85   I)	FLAG=i
86	silent=y;;
87   i)   FLAG=$c;;
88   f)   FLAG=$c;;
89   s)   FLAG=$c;;
90   \?)   printf "${USAGE}\n" $PROG >/dev/tty
91      exit 1 ;;
92   esac
93done
94shift `expr $OPTIND - 1`
95
96# get the map information
97
98FLOPPY=$1
99MAP=`dminfo -v -n $FLOPPY`
100DEVICE=`echo $MAP | cut -f1 -d:`
101TYPE=`echo $MAP | cut -f2 -d:`
102FILES=`echo $MAP | cut -f3 -d:`
103DEVFILE=`echo $FILES | cut -f1 -d" "`
104
105#if init then do once and exit
106
107lform=`gettext "%s error: %s."`
108
109if [ "$FLAG" = "i" ] ; then
110   x="`eject -q $DEVFILE 2>&1`"		# Determine if there is media in drive
111   z="$?"   
112
113   case $z in
114   0) 					# Media is in the drive.
115	a="`eject -f $DEVFILE 2>&1`"
116	b="$?"
117
118	case $b in
119	0)				# Media has been ejected 
120		con_msg
121		exit 0;;
122	1)				# Media not ejected
123		mk_error $DEVICE
124		if [ "$silent" != "y" ] ; then
125			printf "${lform}\n" $PROG $a >/dev/tty
126		fi
127		e_con_msg
128		exit 1;;
129	2)			# Error 
130		mk_error $DEVICE
131		if [ "$silent" != "y" ] ; then
132			printf "${lform}\n" $PROG $a >/dev/tty
133		fi
134		e_con_msg
135		exit 1;;
136	3)			# Error - Perhaps drive doesn't support ejection
137		mk_error $DEVICE
138		if [ "$silent" != "y" ] ; then
139			printf "${lform}\n" $PROG $a >/dev/tty
140		fi
141		e_con_msg
142		exit 1;;
143	esac;;
144   1) 		# No media in drive
145	con_msg
146	exit 0;;	
147   2)			# Error 
148		mk_error $DEVICE
149		if [ "$silent" != "y" ] ; then
150			printf "${lform}\n" $PROG $x >/dev/tty
151		fi
152		e_con_msg
153		exit 1;;
154   3)			# Error 
155		mk_error $DEVICE
156		if [ "$silent" != "y" ] ; then
157			printf "${lform}\n" $PROG $x >/dev/tty
158		fi
159		e_con_msg
160		exit 1;;
161   esac
162else
163# interactive clean up
164   x="`eject -q $DEVFILE 2>&1`"		# Determine if there is media in drive
165   z="$?"   
166
167   case $z in
168   0)					# Media is in the drive.
169	a="`eject -f $DEVFILE 2>&1`"
170	b="$?"
171	case $b in
172	0)				# Media has been ejected
173		user_msg
174		exit 0;;
175	1)				# Media not ejected
176         	mk_error $DEVICE
177		if [ "$silent" != "y" ] ; then
178			printf "${lform}\n" $PROG $a >/dev/tty
179		fi
180         	e_user_msg
181         	exit 1;;
182	2)				# Other Error 
183		mk_error $DEVICE
184		if [ "$silent" != "y" ] ; then
185			printf "${lform}\n" $PROG $a >/dev/tty
186		fi
187		e_user_msg
188         	exit 1;;
189	3)				
190	
191		if echo $a | grep "failed" >/dev/null ; then
192         	while true 		# Drive doesn't support eject, so loop	
193         	    do
194			c="`eject -q $DEVFILE 2>&1`"	# Is caddy in drive?
195			d="$?"
196            		if [ $d -eq 0 ] ; then		# Yes, Caddy in drive
197				form=`gettext "Please remove the caddy from %s."`
198				if [ "$silent" != "y" ] ; then
199               				printf "${form}\n" $DEVICE  >/dev/tty
200               				/usr/5bin/echo \\007 >/dev/tty
201				fi
202               			sleep 3
203            		elif echo $c | grep "NOT" > /dev/null ; then
204							# No,Caddy NOT in drive
205               			user_msg
206               			exit 0
207			else				# Error occurred
208         			mk_error $DEVICE
209				if [ "$silent" != "y" ] ; then
210					printf "${lform}\n" $PROG $a >/dev/tty
211				fi
212				e_user_msg
213         			exit 1
214            		fi
215         	    done
216		else 					# Some other failure
217			if [ "$silent" != "y" ] ; then
218				printf "${lform}\n" $PROG $a >/dev/tty
219			fi
220         		e_user_msg
221         		mk_error $DEVICE
222         		exit 1
223		fi;;
224			
225	esac;;
226   1)							# No media in the drive
227         user_msg
228         exit 0;;
229   2)
230       	mk_error $DEVICE
231	if [ "$silent" != "y" ] ; then
232		printf "${lform}\n" $PROG $x >/dev/tty
233	fi
234	e_user_msg
235       	exit 1;;
236   3)
237       	mk_error $DEVICE
238	if [ "$silent" != "y" ] ; then
239		printf "${lform}\n" $PROG $x >/dev/tty
240	fi
241	e_user_msg
242       	exit 1;;
243   esac
244fi
245exit 2
246