disk_clean.sh revision 07a25aa6781390766777765ec1d9fb1c2c68c1c7
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#! /usr/bin/sh
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# CDDL HEADER START
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
d39757aa11b7b514615ceb1ec0388a6d0521a202mlf# The contents of this file are subject to the terms of the
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Common Development and Distribution License (the "License").
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# You may not use this file except in compliance with the License.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# or http://www.opensolaris.org/os/licensing.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# See the License for the specific language governing permissions
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# and limitations under the License.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# When distributing Covered Code, include this CDDL HEADER in each
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# If applicable, add the following below this CDDL HEADER, with the
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# fields enclosed by brackets "[]" replaced with your own identifying
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# information: Portions Copyright [yyyy] [name of copyright owner]
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# CDDL HEADER END
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
0f2c99a46e005b1add7df43157ee8516e585157ayt# Use is subject to license terms.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# This is a clean script for removable disks
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Following is the syntax for calling the script:
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# scriptname [-s|-f|-i|-I] devicename [-A|-D] username zonename zonepath
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# -s for standard cleanup by a user
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# -f for forced cleanup by an administrator
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# -i for boot-time initialization (when the system is booted with -r)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# -I to suppress error/warning messages; the script is run in the '-i'
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# mode
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# $1: devicename - device to be allocated/deallocated, e.g., sr0
9f49ae270d37efd5c5270cb8046b4229b5380021mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# $2: -A if cleanup is for allocation, or -D if cleanup is for deallocation.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# $3: username - run the script as this user, rather than as the caller.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# $4: zonename - zone in which device to be allocated/deallocated
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# $5: zonepath - root path of zonename
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# A clean script for a removable media device should prompt the user to
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# insert correctly labeled media at allocation time, and ensure that the
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# media is ejected at deallocation time.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Unless the clean script is being called for boot-time
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# initialization, it may communicate with the user via stdin and
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# stdout. To communicate with the user via CDE dialogs, create a
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# script or link with the same name, but with ".windowing" appended.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# For example, if the clean script specified in device_allocate is
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# /etc/security/xyz_clean, that script must use stdin/stdout. If a
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# script named /etc/security/xyz_clean.windowing exists, it must use
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# dialogs. To present dialogs to the user, the dtksh script
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# /etc/security/lib/wdwmsg may be used.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# This particular script, disk_clean, will work using stdin/stdout, or
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# using dialogs. A symbolic link disk_clean.windowing points to
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# disk_clean.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# ####################################################
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# ################ Local Functions #################
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# ####################################################
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Set up for windowing and non-windowing messages
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfmsg_init()
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf{
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ `basename $0` != `basename $0 .windowing` ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf WINDOWING="yes"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $VOLUME_MEDIATYPE in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf cdrom) TITLE="CD-ROM";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rmdisk) TITLE="Removable Disk";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf floppy) TITLE="Floppy";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf *) TITLE="Disk";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$MODE" = "allocate" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf TITLE="$TITLE Allocation"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf TITLE="$TITLE Deallocation"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf WINDOWING="no"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Display a message for the user. For windowing, user must press OK button
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# to continue. For non-windowing, no response is required.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfmsg() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$WINDOWING" = "yes" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf $WDWMSG "$*" "$TITLE" OK
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf elif [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf echo "$*" > /dev/${MSGDEV}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfok_msg() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$WINDOWING" = "yes" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf $WDWMSG "$*" "$TITLE" READY
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf form=`gettext "Media in %s is ready. Please store safely."`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf printf "${form}\n" $PROG $DEVICE > /dev/{MSGDEV}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlferror_msg() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$WINDOWING" = "yes" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf $WDWMSG "$*" "$TITLE" ERROR
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf form=`gettext "%s: Error cleaning up device %s."`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf printf "${form}\n" $PROG $DEVICE > /dev/${MSGDEV}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Ask the user an OK/Cancel question. Return 0 for OK, 1 for Cancel.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfokcancel() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$WINDOWING" = "yes" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf $WDWMSG "$*" "$TITLE" OK Cancel
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf elif [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf get_reply "$* (y to continue, n to cancel) \c" y n
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Ask the user an Yes/No question. Return 0 for Yes, 1 for No
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfyesno() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$WINDOWING" = "yes" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf $WDWMSG "$*" "$TITLE" Yes No
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf elif [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf get_reply "$* (y/n) \c" y n
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Display an error message, put the device in the error state, and exit.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlferror_exit() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf msg "$2" "$3" \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf "\n\nDevice has been placed in allocation error state." \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf "\nPlease inform system administrator."
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 1
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# get_reply prompt choice ...
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfget_reply() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf prompt=$1; shift
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf while true
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf do
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf echo $prompt > /dev/tty
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf read reply
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf i=0
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf for choice in $*
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf do
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$choice" = "$reply" ]
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf return $i
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf i=`expr $i + 1`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf done
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf done
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Find the first disk slice containing a file system
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffind_fs()
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf{
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # The list of files in device_maps(4) is in an unspecified order.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # To speed up the fstyp(1M) scanning below in most cases, perform
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # the search for filesystems as follows:
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # 1) Select only block device files of the form "/dev/dsk/*".
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # 2) Sort the list of files in an order more likely to yield
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # matches: first the fdisk(1M) partitions ("/dev/dsk/cNtNdNpN")
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # then the format(1M) slices ("/dev/dsk/cNtNdNsN"), in ascending
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # numeric order within each group.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf DEVall="`echo $FILES | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf /usr/bin/tr ' ' '\n' | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf /usr/bin/sed '/^\/dev\/dsk\//!d; s/\([sp]\)\([0-9]*\)$/ \1 \2/;' | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf /usr/bin/sort -t ' ' -k 2,2d -k 3,3n | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf /usr/bin/tr -d ' '`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf for DEVn in $DEVall ; do
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fstyp_output="`/usr/sbin/fstyp -a $DEVn 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $? = 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FSPATH=$DEVn
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf gen_volume_label="`echo "$fstyp_output" | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf sed -n '/^gen_volume_label: .\(.*\).$/s//\1/p'`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$gen_volume_label" != "" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FSNAME="`echo $gen_volume_label | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf /usr/xpg4/bin/tr '[:upper:] ' '[:lower:]_'`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # For consistency, hsfs filesystems detected at
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # /dev/dsk/*p0 are mounted as /dev/dsk/*s2
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FSTYPE=`echo "$fstyp_output" | /usr/bin/head -1`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$FSTYPE" = hsfs -a \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf `/usr/bin/expr $FSPATH : '.*p0'` -gt 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FSPATH=`echo $FSPATH | /usr/bin/sed 's/p0$/s2/'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf return
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf done
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Find all mountpoints in use for a set of device special files.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Usage: findmounts devpath ...
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffindmounts() {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf nawk -f - -v vold_root="$VOLD_ROOT" -v devs="$*" /etc/mnttab <<\
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf "ENDOFAWKPGM"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf BEGIN {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf split(devs, devlist, " ");
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf for (devN in devlist) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf dev = devlist[devN];
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf realdevlist[dev] = 1;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf sub(/.*\//, "", dev);
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf sub(/s[0-9]$/, "", dev);
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if (vold_root != "") {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf vold_dir[vold_root "/dev/dsk/" dev] = 1;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf vold_dir[vold_root "/dev/rdsk/" dev] = 1;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf for (dev in realdevlist) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if ($1 == dev) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf mountpoint = $2;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf print mountpoint;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf for (dev in vold_dir) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if (substr($1, 1, length(dev)) == dev) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf mountpoint = $2;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf print mountpoint;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf }
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfENDOFAWKPGM
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Allocate a device.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Ask the user to make sure the disk is properly labeled.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Ask if the disk should be mounted.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfdo_allocate()
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf{
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $VOLUME_MEDIATYPE = floppy ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Determine if media is in drive
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_msg="`eject -q $DEVFILE 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_status="$?"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $eject_status in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 1) # Media is not in drive
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf okcancel "Insert disk in $DEVICE."
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $? != 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 0
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 3) # Error
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf error_exit $DEVICE \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf "Error checking for media in drive.";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf okcancel "Insert disk in $DEVICE."
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $? != 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 0
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf yesno "Do you want $DEVICE mounted?"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $? != 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 0
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $VOLUME_MEDIATYPE = cdrom -o $VOLUME_MEDIATYPE = rmdisk ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Get the device path and volume name of a partition
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf find_fs
b3c0e203b148ecc85043c9da9d327d45c6e7c470mlf if [ "$FSPATH" != "" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_PATH=$FSPATH
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$FSNAME" != "" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_NAME=$FSNAME
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_ACTION=insert
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Give ourself write permission on device file so file system gets
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # mounted read/write if possible.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # rmmount only cares about permissions not user...
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf chown $VOLUME_USER $VOLUME_PATH
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf chmod 700 $VOLUME_PATH
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Do the actual mount. VOLUME_* environment variables are inputs to
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # rmmount.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rmmount_msg="`/usr/sbin/rmmount 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rmmount_status="$?"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $rmmount_status -eq 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf EXIT_STATUS=$CLEAN_MOUNT
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf elif [ $rmmount_status -gt 0 -a $VOLUME_MEDIATYPE != cdrom ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Try again in readonly mode. cdrom is always mounted ro, so
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # no need to try again.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf echo "Read-write mount of $DEVICE failed. Mounting read-only."
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_ACTION=remount; export VOLUME_ACTION
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_MOUNT_MODE=ro; export VOLUME_MOUNT_MODE
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf `/usr/sbin/rmmount`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $? -eq 0 ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf EXIT_STATUS=$CLEAN_MOUNT
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Set permissions on directory used by vold, sdtvolcheck, etc.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -d /tmp/.removable ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf chown root /tmp/.removable
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf chmod 777 /tmp/.removable
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfdo_deallocate()
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf{
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ $VOLUME_MEDIATYPE = cdrom -o $VOLUME_MEDIATYPE = rmdisk ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -h /$VOLUME_MEDIATYPE/$DEVICE ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Get the device path and volume name of a partition
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_PATH=`ls -l /$VOLUME_MEDIATYPE/$DEVICE|\
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf cut -d '>' -f2`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_DEVICE=`mount -p|grep $VOLUME_PATH|\
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf cut -d ' ' -f1`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -d "$VOLUME_PATH" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_ACTION=eject
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Do the actual unmount.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # VOLUME_* environment variables are inputs to rmmount.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rmmount_msg="`/usr/sbin/rmmount 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rmmount_status="$?"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Remove symbolic links to mount point
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf for name in /$VOLUME_MEDIATYPE/*; do
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -h $name ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf target=`ls -l $name | awk '{ print $NF; }'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf target_dir=`dirname $target`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf target_device=`echo $target_dir | \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf sed -e 's/^.*-\(.*\)$/\1/'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$target_device" = "$DEVICE" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rm -f $name
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf done
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf rmmount_status=0
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $rmmount_status in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 1) # still mounted
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf error_exit $DEVICE "Error unmounting $DEVICE" "$rmmount_msg";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 0) # not mounted
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # Eject the media
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$FLAG" = "f" ] ; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_msg="`eject -f $DEVICE 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_msg="`eject $DEVICE 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_status="$?"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $eject_status in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 0|1|4) # Media has been ejected
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $VOLUME_MEDIATYPE in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf floppy|cdrom|rmdisk)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf msg "Please remove the disk from $DEVICE.";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 3) # Media didn't eject
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf msg $DEVICE "Error ejecting disk from $DEVICE" \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf "$eject_msg";;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Reclaim a device
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfdo_init()
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf{
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_msg="`eject -f $DEVICE 2>&1`"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf eject_status="$?"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $eject_status in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 0) # Media has been ejected
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf ok_msg
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 0;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 1) # Media not ejected
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf error_msg
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 0;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf 3) # Error
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$silent" != "y" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf error_msg
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf msg $DEVICE "Error ejecting disk from $DEVICE" \
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf "$eject_msg"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 2;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# ####################################################
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# ################ Begin main program ################
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# ####################################################
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlftrap "" INT TERM QUIT TSTP ABRT
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfPATH="/usr/bin:/usr/sbin"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfMODE="allocate"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfSILENT=n
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfWDWMSG="/etc/security/lib/wdwmsg"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfVOLUME_ZONE_PATH="/"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfUSAGE="Usage: disk_clean [-s|-f|-i|-I] devicename -[A|D] [username] [zonename] [zonepath]"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfEXIT_STATUS=0
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfCLEAN_MOUNT=4
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfMACH=`uname -p`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfFLAG=i
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Parse the command line arguments
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfwhile getopts ifsI c
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfdo
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf case $c in
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf i)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FLAG=$c;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf f)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FLAG=$c;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf s)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FLAG=$c;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf I)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf FLAG=i
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf silent=y;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf \?)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf echo $USAGE
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf exit 1;;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf esac
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfdone
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfshift `expr $OPTIND - 1`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfDEVICE=$1
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfMODE="deallocate"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$2" = "-A" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf MODE="allocate"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelif [ "$2" = "-D" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf MODE="deallocate"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#get the device_maps information
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfMAP=`/usr/sbin/list_devices -s -l $DEVICE`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfFILES=`echo $MAP | cut -f4 -d:` # e.g., /dev/dsk/c0t6d0s0 /dev/dsk/c0t6d0s1 ...
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfDEVFILE=`echo $FILES | cut -f1 -d" "` # e.g., "/dev/dsk/c0t6d0s0"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf# Set VOLUME_ variables that are inputs to rmmount
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfVOLUME_DEVICE=`echo $FILES | cut -f2 -d" "` # e.g., "/dev/dsk/c0t6d0s1"
9f49ae270d37efd5c5270cb8046b4229b5380021mlfMEDIATYPE=`echo $MAP | cut -f3 -d: | cut -f2 -d" "`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # e.g., "cdrom" or "floppy"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$MEDIATYPE" = "sr" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_MEDIATYPE="cdrom"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelif [ "$MEDIATYPE" = "fd" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_MEDIATYPE="floppy"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelif [ "$MEDIATYPE" = "rmdisk" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_MEDIATYPE="rmdisk"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfVOLUME_PATH=$DEVFILE # e.g., "/dev/dsk/c0t6d0s0"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$MACH" = "i386" ] && [ "$MEDIATYPE" = "rmdisk" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_PATH=`echo $DEVFILE | sed -e 's/s0/p0/'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfSYMDEV=`echo $DEVICE | sed -e 's/_//'` # e.g., "cdrom" or "floppy"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfSYMNUM=`echo $SYMDEV | sed -e 's/[a-z]*//g'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfSYMDEV=`echo $SYMDEV | sed -e 's/[0-9]*//g'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$SYMDEV" = "sr" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_SYMDEV="cdrom"$SYMNUM
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelif [ "$SYMDEV" = "fd" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_SYMDEV="floppy"$SYMNUM
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelif [ "$SYMDEV" = "rmdisk" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_SYMDEV="rmdisk"$SYMNUM
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelse
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_SYMDEV=$SYMDEV$SYMNUM
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfVOLUME_ZONE_NAME=$4
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfVOLUME_ZONE_PATH=$5
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$MODE" = "allocate" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -n "$3" ]; then # e.g., "joeuser"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_USER=$3
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_USER=`/usr/xpg4/bin/id -u -nr`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelse
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # If there's a directory for the device under /<mediatype>, get the
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # user name from there, to use in cleaning up that directory. Otherwise,
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # the user name isn't actually used in deallocation.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -d ${VOLUME_ZONE_PATH}/${VOLUME_MEDIATYPE}/*-${DEVICE} ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_USER=`ls -ld ${VOLUME_ZONE_PATH}/${VOLUME_MEDIATYPE}/*-${DEVICE} | awk '/^d/{print $3}'`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ -n "$3" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_USER=$3
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_USER=`/usr/xpg4/bin/id -u -nr`
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfVOLUME_NAME=unnamed_${VOLUME_MEDIATYPE}
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf # e.g., "joeuser-cdrom0/unnamed_cdrom"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$VOLUME_MEDIATYPE" = "rmdisk" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_PCFS_ID=1
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelse
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf VOLUME_PCFS_ID=
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfexport VOLUME_ACTION VOLUME_DEVICE VOLUME_MEDIATYPE VOLUME_NAME VOLUME_PCFS_ID
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfexport VOLUME_PATH VOLUME_SYMDEV VOLUME_USER VOLUME_ZONE_NAME VOLUME_ZONE_PATH
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfUSERDIR=${VOLUME_USER}-${DEVICE} # e.g., "joeusr-cdrom0"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfmsg_init
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfif [ "$MODE" = "allocate" ]; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf MSGDEV=tty
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf do_allocate
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfelse
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if [ "$FLAG" = "i" ] ; then
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf MSGDEV=console
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf do_init
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf else
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf MSGDEV=tty
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf do_deallocate
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf fi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlffi
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfexit $EXIT_STATUS
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf