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