2021-10-11 18:37:13 -03:00

409 lines
11 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /bin/sh
#
#@(#)check_copyright.sh 1.1 94/10/31 SMI
#
########################################################################
#
#This utility extracts the Copyright file from the following media
#types for both sun3 and sun4 application architectures:
#
# Half Inch (mt) - Density = High (6250) or Low (1600)
# Quarter Inch (st) - Density = High (QIC24) or Low (QIC11)
#
#Requirements:
#
# o You must login to the tapehost and execute this script.
# If your tapehost is a release machine, this utility should
# be accessible under /usr/release/bin. If you do not
# find it there, please contact the RE for that particular
# machine.
#
# o The tapehost must be running 4.0.3 or later, to support
# the 'asf' option of the 'mt' command.
#
# o If you are verifying a SunOS release, the TOC conversion
# utility named "xdrtoc_`arch`" must be available.
# You do not have to worry about this if you already have
# aprime:/usr/krypton already mounted on the tapehost
# (which is usually the case for our release machines).
# If /usr/krypton is not accessible, make a copy in /tmp
# of your tapehost, using this command:
#
# rcp aprime:/usr/krypton/janet/xdrtoc_`arch` /tmp
#
#Usage: /usr/release/bin/check_copyright [-n]
#
# By default, each tape is rewound after verification.
# If you're in a rush and need to save time, suppress the
# rewind at the end using the -n option.
#
# You will be asked for the following information:
#
# Product Type to be verified (see below)
# Media to be verified (qtr/half)
# Density of media to be verified (hi/lo)
#
#Product Types Supported:
#
# You will be presented with a menu of products to be verified,
#
# SunOS
# Choosing this item will extract the TOC from File#1
# to determine the following info: copyright location,
# total number of volumes, and the volume number
# being processed. Tape format is always 'boot'.
#
# Crypt
# Choosing this item will extract the copyright file
# from File#12. Total number of volumes is always 1,
# tape format is always 'tar'.
#
# Diag Exec
# Choosing this item will extract the TOC from File#2
# to determine the copyright location. Total number of
# volumes is always 1, tape format is always 'tar'.
#
# Other
# If you choose this item, you will be prompted to specify
# a file number for the copyright location, or indicate
# that it is unknown by entering 'X'. You will also
# be prompted to enter the total number of volumes in the
# media set.
#
#Verification Process:
#
# The script checks for the existence of certain copyright
# components, listed below. However, it will also display
# the Copyright for your review, and save intermediate
# files for closer scrutiny. The copyright components
# checked are:
# Copyright year
# Tape Size
# Part Number
# Rev.
# Volume# of Total Volumes
# Density
#
#Hint:
#
# If the copyright file cannot be found where it is expected,
# Choose Product Type = Other, Copyright location = X, and
# let the script find the last file.
#
#Please send bugs/RFE's to Janet Timbol (janet@firenze)
#
########################################################################
#
#Screen yes/no reponses
#
usage="USAGE: $0 [ -n ] "
if [ $# -gt 1 ] ; then
echo "$usage" && exit 1
else
case $1 in
-n ) no_rewind=1;;
'' ) ;;
* ) echo $usage && exit 1;;
esac
fi
get_yn='(while read yn; do
case "$yn" in
[Yy]* ) exit 0;;
[Nn]* ) exit 1;;
* ) echo -n "Please answer y or n: ";;
esac
done)'
tmp=/tmp
here=`pwd`
rawdev=/dev/nr
#
#Floppies not supported--awaiting sample media and more info
#
while echo -n "Enter media to be verified (qtr/half): "; do
read media
case $media in
[Qq]* ) media_type=quarter; sz=1/4; d_unit=QIC; break;;
[Hh]* ) media_type=half; sz=1/2; d_unit=bpi; break;;
* ) echo "Try again.";;
esac
done
echo -n "Is this a high-density tape ie, 6250 bpi or QIC-24? (y/n): "
eval "$get_yn"
case $? in
0 ) if [ "$media_type" = "quarter" ]; then
device=${rawdev}st8
dens=24; blksz=200b
else
device=${rawdev}mt8
dens=6250; blksz=20b
fi; break;;
1 ) if [ "$media_type" = "quarter" ]; then
device=${rawdev}st0
dens=11; blksz=126b
else
device=${rawdev}mt0
dens=1600; blksz=20b
fi; break;;
esac
#
#Assume only 'SunOs' and 'Other' product category have multiple vols
#
while echo -n "
PRODUCT TYPES
1) Full SunOS release (TOC is 2nd file)
2) Crypt Kit (No TOC, Copyright is 13th file)
3) Diag Exec release, (TOC is 3rd file)
4) Other (TOC & Copyright location unknown)
Choose type of product being verified (1-4): "; do
read choice
case $choice in
1|[Ff]* ) toc_asf=1; convert_toc=1; multi_vol=1; prod="SunOS"
tp_format='BOOT';;
2|[Cc]* ) copy_asf=12; prod="Crypt"; tp_format=TAR;;
3|[Dd]* ) toc_asf=2; prod="DiagExec"; tp_format=TAR ;;
4|[Oo]* ) copy_asf=last; prod="Other"; multi_vol=1;;
* ) echo "$choice is not a valid selection"
echo -n "Press <RETURN> to continue: "
read return && /usr/ucb/clear && continue;;
esac
break
done
mydir=${tmp}/`whoami`
workdir=${tmp}/${media_type}; voldir=${mydir}/${prod}_${media_type}
for i in $mydir $voldir $workdir; do
[ ! -d $i ] && mkdir $i
done
cd $workdir; rm -f *
if [ "$prod" = "Other" ] ; then
while : ; do
echo -n \
"Enter total number of volumes for this media ($media_type): "
read vol_sum
case $vol_sum in
[1-9] | [1-9][1-9] ) break;;
* ) echo "Number should be between 1-99!";;
esac
done
[ "$vol_sum" -ne 1 ] && multi_vol=1 || multi_vol=
fi
if [ "$convert_toc" ]; then
xdr_bindir=/usr/krypton/janet
while [ ! -x $xdr_bindir/xdrtoc_`arch` ]; do
echo "We need 'xdrtoc_`arch`' utility!"
echo -n "Enter directory where it can be found: "
read xdr_bindir
done
fi
bad=
cleanup='(cd $here;
rm -rf $workdir
rm -f $tmp/*$$
[ "$bad" ] && exit 1
echo ""
echo "Output and error files are in the directory $voldir."
echo "You may want to clean it up when you are done, using:"
echo " rm -rf $voldir"
)'
chk_ok='( if egrep -vs " records " $errs ; then
echo "Tape Access Operation failed!"
bad=1; eval "$cleanup"
exit 1
else
exit 0
fi )'
#
#Check if 'asf' supported
#
os_release=`egrep '^SunOS Release ' /etc/motd | awk '{print $3}'`
case $os_release in
4.0.3* | 4.1* ) skip=asf;;
* ) echo "Please execute this utility on a system running 4.0.3 or later."
bad=1; eval "$cleanup"; exit 1;;
esac
trap 'echo ABORTED!; bad=1; eval "$cleanup"; exit 1' 1 2 3 15
errs=$tmp/errs_$$; rm -f $errs
#
# Begin multiple volume loop
#
while :
do
this_vol=
if [ ! "$prod" = "SunOS" ]; then
if [ "$multi_vol" ] ; then
while : ; do
echo -n "Enter Volume Number being processed: "
read this_vol
case $vol_sum in
[1-9] | [1-9][1-9] ) break;;
* ) echo "^GNumber should be between 1-99!";;
esac
done
else
this_vol=1
fi
fi
if [ "$prod" = "Other" ]; then
while echo -n \
"Enter last file number (first file=0) on this media, or 'x' if unknown: "; do
read copy_asf
case "$copy_asf" in
[0-9] | [0-9][0-9] ) break;;
[Xx]* ) copy_asf=unknown; break;;
* ) echo "Answer should be 'x' or a number.";;
esac
done
fi
/usr/ucb/clear
echo "Rewinding tape..."
mt -f $device rew
if [ ! $? = 0 ]; then
echo "Unable to access $device for $media_type media!"
bad=1; eval "$cleanup"
exit 1
fi
if [ "$toc_asf" ] ; then
echo "Extracting toc..."
mt -f $device $skip $toc_asf 2>> $errs
eval "$chk_ok" || exit 1
dd if=$device of=toc_dd bs=${blksz} 2>> $errs
eval "$chk_ok" || exit 1
if [ ! "$convert_toc" ]; then #Must be Diag Exec
mv toc_dd toc_read
copy_asf=`wc -l toc_read| awk '{print $1}'`
else
cat toc_dd | $xdr_bindir/xdrtoc_`arch` > toc_read
if [ ! "$?" = 0 ] ; then
echo "Can't read TOC!"
bad=1; eval "$cleanup"; exit 1
fi
rm -f toc_dd
this_vol=`egrep -i "^volume" toc_read | awk '{print $2}'`
vol_sum=`tail -1 toc_read | awk '{print $1}'`
echo "This is volume #${this_vol} of ${vol_sum}..."
copy_asf=`egrep -i copyright toc_read | \
egrep "[ ]${this_vol}[ ]"| awk '{print $2}'`
fi
fi
copy_out=copyright
echo "This is volume #${this_vol} of ${vol_sum}..."
if [ ! "$copy_asf" = "unknown" ] ; then
echo "Forwarding tape to Copyright file (#$copy_asf)"
mt -f $device $skip $copy_asf 2>> $errs
eval "$chk_ok" || exit 1
dd if=$device of=$copy_out bs=${blksz} 2>> $errs
eval "$chk_ok" || exit 1
else
echo "Searching for Copyright file..."
count=1; copy_asf=
while : ; do
mt -f $device $skip $count 2> $errs
eval "$chk_ok" || exit 1
dd if=$device of=/dev/null bs=${blksz} 2> $errs
if egrep -s '^0\+0 records in' $errs && \
egrep -s '^0\+0 records out' $errs ; then
echo \
"Forwarding to last file (#$copy_asf)..."
mt -f $device $skip $copy_asf 2>errs
dd if=$device of=$copy_out bs=${blksz} 2>> $errs
break
else
copy_asf=$count; count=`expr $count + 1`
fi
done
fi
#
#Check to see if extracted file IS the copyright
#
for i in reserve license; do
egrep -is $i $copy_out && break
echo "ERROR: Extracted file doesn't look like Copyright!"
eval "$cleanup"; exit 1
done
this_year=`date | awk '{print $NF}'`
egrep -i "^copyright " $copy_out | egrep -s $this_year
if [ ! "$?" = 0 ] ; then
echo "WARNING: Copyright period does not include $this_year" | \
tee -a check_errs
fi
for i in $sz "Part Number " " Rev." "$this_vol of $vol_sum"
do
egrep -is "$i" $copy_out
[ ! "$?" = 0 ] && echo "WARNING: '$i' string NOT FOUND!" | \
tee -a check_errs
done
case $media_type in
quarter) egrep $d_unit $copy_out | egrep "$dens" > $tmp/$$;;
half) egrep -i $d_unit $copy_out | egrep "$dens" > $tmp/$$;;
esac
[ ! -s $tmp/$$ ] && \
echo "WARNING: $d_unit/$dens Info Missing/Wrong!" | \
tee -a check_errs
if [ "$tp_format" ]; then
egrep -i ' format' $copy_out | egrep -i "${tp_format}" > $tmp/$$
else
egrep -i ' format' $copy_out > $tmp/$$
fi
[ ! -s $tmp/$$ ] && echo "WARNING: Format Info Incorrect!" | \
tee -a check_errs
rm -f ${voldir}/*${this_vol}
for i in `ls -F1 | egrep -v /$`; do
[ "$i" = ${copy_out} ] && \
mv $i ${voldir}/${copy_out}_asf${copy_asf}_vol${this_vol} && continue
mv $i ${voldir}/${i}_vol${this_vol}
done
echo "
Please make sure this matches the tape label:
"
echo "===========================Copyright File==========================="
cat ${voldir}/${copy_out}_asf${copy_asf}_vol${this_vol}
echo "====================================================================
"
if [ ! "$no_rewind" ] ; then
echo "Rewinding tape..."
mt -f $device rew
fi
if [ "$multi_vol" ] ; then
echo -n \
"Process another volume Media=$media_type, Product=$prod? (y/n) "
eval "$get_yn" || break
echo -n "Load next volume for this media set, press <RETURN> "
read return
else
break
fi
done
#
#End multiple volume loop
#
echo "DONE!"
eval "$cleanup"; exit 0