i.voldconf revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/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
#
#
#ident "%Z%%M% %I% %E% SMI"
#
# Copyright (c) 1996-1999 by Sun Microsystems, Inc.
# All rights reserved.
#
PATH="/usr/bin:/usr/sbin:${PATH}"
export PATH
add_remount_lines()
{
# add the new remount lines after the notify line
source_file="$1"
dest_file="$2"
if grep "^remount" $dest_file > /dev/null 2>&1; then
:
else
line_number=`grep -n "^insert dev/dsk" $dest_file | \
tail -1 | awk -F: '{print $1}'`
if [ -n "$line_number" ] ; then
sed -e "$line_number a\\
remount dev/dsk/* user=root /usr/sbin/rmmount" $dest_file > /tmp/tmp.$$
cp /tmp/tmp.$$ $dest_file
fi
line_number=`grep -n "^insert dev/diskette" $dest_file | \
tail -1 | awk -F: '{print $1}'`
if [ -n "$line_number" ] ; then
sed -e "$line_number a\\
remount dev/diskette[0-9]/* user=root /usr/sbin/rmmount" $dest_file > \
/tmp/tmp.$$
cp /tmp/tmp.$$ $dest_file
fi
rm -f /tmp/tmp.$$
fi
}
#
# update_use_line:
#
# takes three params:
# 1. dest file name;
# 2. new line to go after last 'use ...' line;
# 3. old line to delete;
#
# algorithm:
# if the "$new" line is already in the file "$d", then return, else
# find the line number of the last "use ..." line in the "$d" file
# add the supplied "$new" line after the current last "use ..." line
# if the "$old" line is in the file, remove it
#
update_use_line()
{
d="$1"
new="$2"
old="$3"
# check for the "$new line"
if fgrep "$new" $d >/dev/null 2>&1 ; then
return # no work needs to be done
fi
# find last '^use ...' line
line_no="`grep -n '^use' $d|tail -1|awk -F: '{print $1}'`"
# add new line after last '^use ...' line
sed -e "$line_no a\\
$new" $d > /tmp/tmp.$$
# copy temp file back to dest file, removing old line (if present)
grep -v "^$old" /tmp/tmp.$$ > $d
}
#
# update_notify_line
#
# takes one param:
# 1. dest file name;
#
# algorithm:
# - find the current "notify ..." line
# - if the current line ends with "-c" and the line has no 'use='
# clause, then
# - change the "-c" to a "-p", and
# - add a 'user=root' clause
#
update_notify_line()
{
d="$1"
# get the current notify line
nl="`grep '^notify' $d`"
# check for "-c"
echo "$nl" | grep ' -c$' >/dev/null 2>&1
if [ $? != 0 ] ; then
# '-c' not found
return # not an orig line -- just leave it alone
fi
# check for not having a 'user=' clause
echo "$nl" | grep ' user=' >/dev/null 2>&1
if [ $? = 0 ] ; then
# 'user=' found
return # not an orig line -- just leave it alone
fi
# update the notify line to have a 'user=root' and a '-p'
sed -e "/^notify/s~/usr/lib~user=root /usr/lib~" \
-e "/^notify/s~-c~-p~" $d > /tmp/tmp.$$
# move result back
mv /tmp/tmp.$$ $d
}
update_label_sun_line()
{
d="$1"
# get the line and check if up to date
if grep '^label sun .* rmscsi' $d >/dev/null 2>&1 ; then
:
elif grep '^label sun .* rmdisk' $d >/dev/null 2>&1 ; then
:
else
#edit label sun line
sed -e '/^label sun label_sun/ s/$/ rmscsi/' \
$dest >/tmp/tmp.$$
cp /tmp/tmp.$$ $dest
# clean up
rm -f /tmp/*.$$
fi
}
update_label_dos_line()
{
d="$1"
# get the line and check if up to date
if grep '^label dos .* rmscsi' $d >/dev/null 2>&1 ; then
:
elif grep '^label dos .* rmdisk' $d >/dev/null 2>&1 ; then
:
else
#edit label dos line
sed -e '/^label dos label_dos/ s/$/ rmscsi/' \
$dest >/tmp/tmp.$$
cp /tmp/tmp.$$ $dest
# clean up
rm -f /tmp/*.$$
fi
}
update_unsafe_udfs_line()
{
d="$1"
LINE=`grep '^unsafe' $d`
for word in $LINE
do
if [ $word = "udfs" ]
then
return
fi
done
LINE="$LINE udfs"
grep -v '^unsafe' $d >/tmp/tmp.$$
echo $LINE >>/tmp/tmp.$$
cp /tmp/tmp.$$ $d
}
while read src dest
do
if [ ! -f $dest ] ; then
cp $src $dest
else
# save the 'ident' line from the 'new' file
grep '@(#)vold.conf' $src \
> /tmp/newident.$$ 2>/dev/null
# save all but the 'ident' line from the old (orig) file
grep -v '@(#)vold.conf' $dest \
> /tmp/rest.$$ 2>/dev/null
# concatenate the new ident and the old data, replacing old
cat /tmp/newident.$$ /tmp/rest.$$ > $dest
# convert '/dev/fd' to '/dev/diskette' wherever found
sed -e 's,/dev/fd\[,/dev/diskette[,' $dest > /tmp/tmp.$$
cp /tmp/tmp.$$ $dest
# get the new 'use cdrom ...' line
new_use_line="`grep '^use cdrom drive' $src`"
# ensure that default cdrom line is up to date
update_use_line $dest "$new_use_line" \
'use cdrom drive /dev/dsk/c0t6 dev_cdrom.so cdrom0'
# get the new 'use floppy ...' line
new_use_line="`grep '^use floppy drive' $src`"
# ensure that default floppy line is up to date
update_use_line $dest "$new_use_line" \
'use floppy drive /dev/diskette dev_floppy.so floppy0'
# get the new 'use rmscsi ...' line
new_use_line="`grep '^# use rmscsi drive' $src`"
# ensure that default floppy line is up to date
update_use_line $dest "$new_use_line" \
'# there is no old rmscsi line'
# update the volmissing line (if it hasn't changed)
update_notify_line $dest
# update the action lines
sed -e '/^# Action/,/^$/ s,/vol\*/,,' $dest >/tmp/tmp.$$
cp /tmp/tmp.$$ $dest
# ensure that the label_dos and label_sun lines are current
update_label_sun_line $dest
update_label_dos_line $dest
# ensure unsafe line has udfs
update_unsafe_udfs_line $dest
# replace "rmscsi" with "rmdisk" everywhere in the file
sed -e 's/rmscsi/rmdisk/g' $dest > /tmp/tmp.$$
cp /tmp/tmp.$$ $dest
# add the new "remount" lines
add_remount_lines $src $dest
# restore permissions if they changed
chmod 0444 $dest
chgrp bin $dest
# clean up
rm -f /tmp/*.$$
fi
done
exit 0