#!/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
#
#
# Copyright 1999 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
export IFS PATH
IFS="
"
PATH="/usr/bin"
# sys: system; user: login name; cdir: current directory;
# tdir: temporary directory; pu: PUBDIR/receive/user;
cdir=`pwd`
dir=""
abs=""
sys=""
var=""
varto=""
varfrom=""
trap "exit 1" 1 2 13 15
# mktmpdir - Create a private (mode 0700) temporary directory inside of /tmp
# for this process's temporary files. We set up a trap to remove the
# directory on exit (trap 0), and also on SIGHUP, SIGINT, SIGQUIT, and
# SIGTERM.
#
mktmpdir() {
tmpdir=/tmp/bnu.$$
trap '/usr/bin/rm -rf $tmpdir' 0 1 2 3 15
/usr/bin/mkdir -m 700 $tmpdir || exit 1
}
mktmpdir
# get options
while getopts s: FLAG; do
case $FLAG in
s) sys=$OPTARG
;;
?) gettext "Usage: uupick [-s sysname]\n" 1>&2;
exit 1
;;
esac
done
shift `expr $OPTIND - 1`
if [ $# -gt 0 ]; then
gettext "Usage: uupick [-s sysname]\n" 1>&2;
fi
user=`id | sed -n "/^uid=[0-9]*(\([^)]*\)).*/s//\1/p"`
if test -z "$user"
then gettext "User id required!\n" >&2; exit 1
fi
pu=/var/spool/uucppublic/receive/$user
if test -d $pu -a -s $pu
then
for i in `/usr/bin/ls $pu`
do
if test $sys
then
if test $sys != $i; then continue; fi
fi
if test -d $pu/$i -a -s $pu/$i
then
cd $pu/$i
for j in `/usr/bin/ls -a`
do
if test $j = "." -o $j = ".."; then continue; fi
if test -d $j
then printf "`gettext 'from system %s: directory %s '`" $i $j
else printf "`gettext 'from system %s: file %s '`" $i $j
fi
while true
do
echo '? \c'
if read cmd dir
then
trap ": ;;" 1
case $cmd in
d)
rm -fr $j ; break ;;
"")
break ;;
# options m, a:
# If dir path begins with a slash, use full path for destination;
# otherwise, use path relative to current dir;
# default destination is current dir
#
# As files are transferred, put their names in $tmpdir/$$uupick.
# Only remove those named files from...receive/..dir if cmp
# verifies transfer took place. then find & remove directories
# (separate find is necessary because cpio -v doesn't print dir names)
a|m)
eval dir="$dir"
if test $dir
then abs=`expr "$dir" : '/.*'`
if test $abs != 0
then tdir=$dir
else tdir=$cdir/$dir
fi
else
tdir=$cdir
fi
if [ ! -d $tdir -o ! -w $tdir ]; then
printf "`gettext 'directory %s doesn't exist or isn't writable'`" $tdir >&2
continue
fi
if [ "$cmd" = "a" ]
then
find . -depth -print | \
grep -v '^\.$' > $tmpdir/$$uupick
level=2
else
find $j -depth -print > $tmpdir/$$uupick
level=1
fi
cpio -pdmu $tdir < $tmpdir/$$uupick
for k in `cat $tmpdir/$$uupick`
do
varto="$tdir/$k"
varfrom="$pu/$i/$k"
if test -f $varfrom; then
if cmp $varfrom $varto ; then
rm -f $varfrom
else
printf "`gettext 'file %s not removed'`" $varfrom >&2
fi
else
rmdir $varfrom 2>/dev/null
fi
done
rm -f $tmpdir/$$uupick
break $level;;
p)
if test -d $j
then find $j -print
elif test -s $j
then cat $j
fi;;
q)
break 3;;
!*)
ex=`expr "$cmd $dir" : '!\(.*\)'`
tdir=`pwd`
cd $cdir
sh -c "$ex"
cd $tdir
echo '!';;
*)
gettext "Usage: [d][m dir][a dir][p][q][cntl-d][!cmd][*][new-line]";;
esac
trap "exit 1" 1
else
break 3
fi
done
done
fi
done
fi