#!/bin/sh
#
# File: install
#
# Author: Ulli Horlacher (framstag@rus.uni-stuttgart.de)
#
# Contribs: Stefan Zehl (sec@42.org)
# Michael Neumayer (eumel@42.org)
#
# History:
#
# 18 Sep 95 Framstag initial version (insserv)
# 24 Oct 95 Framstag changed SAFT-port
# 25 Nov 95 Framstag new version: install
# 18 Dec 95 Framstag better error checking
# 21 Dec 95 Framstag new default for nosendfile:
# /usr/local/etc/
# 24 Mar 96 Framstag added utf7encode binary
# 4 Apr 96 Framstag better HP-UX support
# 23 Jun 96 Framstag added INLOG and OUTLOG
# 13 Sep 96 Framstag added $BINDIR to check_sendfile
# better /etc/inetd.conf parsing
# 24 Feb 97 Framstag fixed MANDIR
# 20 Mar 97 Framstag added Amiga support
# 18 Jun 97 Framstag added check for new sendfile.cf
# 30 Sep 97 Framstag better (own) spool free-space check
# 22 Nov 97 Framstag added sfconf
# 23 Nov 97 Framstag moved NOSENDFILE to ALLOW and DENY files
# added sfdconf
# 5 Jan 98 Framstag better sfdconf installation
# 27 Feb 98 sec added reinstall option
# 1 Mar 98 sec fixed "text file busy"
# 6 Mar 98 Framstag better man sections locations
# 13 Mar 98 Eumel fixed rm-logfile-bug
# 17 Apr 98 sec better man-section detection
# 29 Sep 98 Framstag added ewl
# 1999-01-28 Framstag added symlinks: sf sm rf
#
# Shell script to install the server, the clients and the man-pages for the
# sendfile service. It also configures /etc/inetd.conf, /etc/services,
# /etc/profile and /etc/csh.login
# This script is called by make.
#
# If you want to change the default directories look in file build.
# You should not edit this file!
#
# This file is covered by the GNU General Public License
mkdir_recursive() {
if [ ! -d $1 ]; then
mkdir `echo $1 |
awk -F/ '{ for (i=2; $i!=""; i++)
{ for (j=2; j<=i; j++) printf("/"$j)
printf(" ") } }'
` 2>/dev/null
fi
}
make_dirs() {
mkdir_recursive $BINDIR
mkdir_recursive $MANDIR/man1
mkdir_recursive $SERVERDIR
mkdir_recursive `dirname $DENY`
mkdir_recursive `dirname $CONFIG`
mkdir $MANDIR/man$manmisc $MANDIR/man$manadmin 2>/dev/null
}
make_man() {
sed "s:/usr/local/etc/sendfile.allow:$ALLOW:
s:/usr/local/etc/sendfile.deny:$DENY:
s:/usr/local/etc/sendfile.cf:$CONFIG:
s:/var/spool/sendfile:$SPOOL:
" doc/$1.$2 >$MANDIR/man$3/$1.$3
}
install_man() {
make_man sendfile 1 1
make_man sendmsg 1 1
make_man receive 1 1
make_man fetchfile 1 1
make_man fetchfile 7 $manmisc
make_man sendfiled 8 $manadmin
cp doc/wlock.1 doc/utf7encode.1 $MANDIR/man1
}
SYSTEM=$1
RESTART=false
if [ "$SYSTEM" = "" ]; then
echo "To invoke install, type: make install"
exit
fi
if [ "$LOGNAME" != root ]; then
if [ "`whoami`" != root ]; then
echo
echo "You are not root! You probably run into problems now..."
echo
fi
fi
eval `awk -F\" '/define BINDIR/ {print "BINDIR="$2}
/define MANDIR/ {print "MANDIR="$2}
/define SERVERDIR/ {print "SERVERDIR="$2}
/define SPOOL/ {print "SPOOL="$2}
/define CONFIG/ {print "CONFIG="$2}
/define DENY/ {print "DENY="$2}
/define ALLOW/ {print "ALLOW="$2}
/define ALIASES/ {print "ALIASES="$2}
/define INLOG/ {print "INLOG="$2}
/define OUTLOG/ {print "OUTLOG="$2}
' src/globals.h`
if [ "$BINDIR" = "" ]; then BINDIR=/usr/local/bin; fi
if [ "$MANDIR" = "" ]; then MANDIR=/usr/local/man; fi
if [ "$SERVERDIR" = "" ]; then SERVERDIR=/usr/local/sbin; fi
if [ "$CONFIG" = "" ]; then CONFIG=/usr/local/etc/sendfile.cf; fi
if [ "$DENY" = "" ]; then DENY=/usr/local/etc/sendfile.deny; fi
if [ "$ALLOW" = "" ]; then ALLOW=/usr/local/etc/sendfile.allow; fi
if [ "$ALIASES" = "" ]; then ALIASES=/usr/local/etc/sendfile.aliases; fi
if [ "$SPOOL" = "" ]; then SPOOL=/var/spool/sendfile; fi
if [ "$INLOG" = "" ]; then INLOG=$SPOOL/LOG/in; fi
if [ "$OUTLOG" = "" ]; then OUTLOG=$SPOOL/LOG/out; fi
if [ "$INETDCONF" = "" ]; then INETDCONF=/etc/inetd.conf; fi
if [ "$SERVICES" = "" ]; then SERVICES=/etc/services; fi
case "$SYSTEM" in
*BSD*) manmisc=7; manadmin=8;;
*) manmisc=5; manadmin=1m;;
esac
# purge old logfiles (bug from sendfile revision < 19980310)
(cd $SPOOL && rm -f */.sendfile*.log)
if [ "$2" = "reinstall" ] ; then
umask 022
cd src || exit 1
make_dirs
cp sendfile sendmsg receive utf7encode fetchfile wlock ewl $BINDIR/
[ -x $SERVERDIR/sendfiled ] && mv $SERVERDIR/sendfiled $SERVERDIR/sendfiled.old && rm -f $SERVERDIR/sendfiled.old
cp sendfiled $SERVERDIR
cd ../etc
cp sfconf sfdconf $BINDIR/
cd ..
install_man
echo Done.
exit 0
fi
cat <<EOD
WARNING: this sendfile install script will create or write to:
spool directory = $SPOOL
binary directory = $BINDIR
manual directory = $MANDIR
sendfiled directory = $SERVERDIR
configuration files = $CONFIG
$DENY
In /etc/services and /etc/inetd.conf apropriate ads will be inserted.
In /etc/profile and /etc/csh.login a call to sendfile_check will be added.
To deinstall the sendfile-daemon, simply type: rm -f $SERVERDIR/sendfiled
EOD
umask 022
echo "checking for directories"
make_dirs
echo "installing the clients in $BINDIR"
cd etc || exit 1
sed "s:/usr/local/etc/sendfile.cf:$CONFIG:
s:/var/spool/sendfile:$SPOOL:" sf_cleanup \
> $BINDIR/sf_cleanup
sed "s:SPOOL=/var/spool/sendfile:SPOOL=$SPOOL:
s:INLOG=/var/spool/sendfile/LOG/in:INLOG=$INLOG:
s:OUTLOG=/var/spool/sendfile/LOG/in:OUTLOG=$OUTLOG:
s:CONFIG=/usr/local/etc/sendfile.cf:CONFIG=$CONFIG:
s:ALIASES=/usr/local/etc/sendfile.aliases:ALIASES=$ALIASES:
s:DENY=/usr/local/etc/sendfile.deny:DENY=$DENY:
s:ALLOW=/usr/local/etc/sendfile.allow:ALLOW=$ALLOW:
" sfdconf \
| awk '{if ($0 != "CONFIG") print $0; else system("cat sendfile.cf")}' \
> $BINDIR/sfdconf
sed "s:/var/spool/sendfile:$SPOOL:" sfconf >$BINDIR/sfconf
sed "s:receive :$BINDIR/receive :" check_sendfile >$BINDIR/check_sendfile
cd ../src || exit 1
cp sendfile sendmsg receive utf7encode fetchfile wlock ewl $BINDIR/
cd ..
(cd $BINDIR
ln -s utf7encode utf7decode 2>/dev/null
ln -s sendfile sf 2>/dev/null
ln -s sendmsg sm 2>/dev/null
ln -s receive rf 2>/dev/null
chmod 755 sfconf sfdconf <sf_cleanup check_sendfile \
sendfile sendmsg receive fetchfile utf7encode)
echo "installing the man-pages in $MANDIR/*"
install_man
SENDFILED=`awk '/^saft/ { sfd=$6;
if (index($7,"/sendfiled")>0) sfd=$7;
if (substr(sfd,1,1)=="?") sfd=substr(sfd,2);
print sfd;
}' $INETDCONF`
if [ "$SENDFILED" != "$SERVERDIR/sendfiled" -a "$SENDFILED" != "" ]; then
echo "WARNING: you have specified $SENDFILED in $INETDCONF, but"
echo " there is $SERVERDIR/sendfiled in makeconfig! Check it!"
fi
echo "installing the sendfile-daemon in $SERVERDIR"
[ -x $SERVERDIR/sendfiled ] && mv $SERVERDIR/sendfiled $SERVERDIR/sendfiled.old && rm -f $SERVERDIR/sendfiled.old
cp src/sendfiled $SERVERDIR || exit 1
NOSENDFILE=`dirname $DENY 2>/dev/null`/nosendfile
if [ -f $NOSENDFILE ]; then
if grep ^allow-only $NOSENDFILE >/dev/null; then
echo "Information: $NOSENDFILE is now $ALLOW (autoconverted)"
grep -v ^allow-only $NOSENDFILE > $ALLOW
else
echo "Information: $NOSENDFILE is now $DENY (autoconverted)"
mv $NOSENDFILE $DENY
fi
fi
if [ ! -f $DENY -a ! -f $ALLOW ]; then
echo "installing the sendfile deny file as $DENY"
cp etc/sendfile.deny $DENY
chmod 644 $DENY
fi
if [ ! -f $CONFIG ]; then
echo "installing the global sendfile config file as $CONFIG"
cp etc/sendfile.cf $CONFIG
chmod 644 $CONFIG
else
if [ "`diff etc/sendfile.cf $CONFIG`" ]; then
echo "Warning: `pwd`/etc/sendfile.cf differs from $CONFIG !"
echo "Please take a look what has been changed!"
fi
fi
if [ -z "$BATCH" ] ; then
echo ''
echo 'I would now configure and start your sendfiled.'
echo 'If you do not like this, enter "no" here'
read answer
fi
if [ "$answer" = no ]; then
echo
echo "Things left to do if you want to start sendfiled:"
echo
echo " - Maybe add 'saft 487/tcp' to /etc/services (prior to FreeBSD-4)"
echo " - Add sendfiled to /etc/inetd.conf and killall -HUP inetd"
echo " - Add 'test -x $BINDIR/check_sendfile && $BINDIR/check_sendfile'"
echo " to /etc/profile and /etc/csh.login"
echo
else
if [ "$SYSTEM" = NEXT ]; then
SERVICE="`nidump services . | awk '/[ \t]487\/tcp/'`"
else
SERVICE="`awk '/[ \t]487\/tcp/' /etc/services`"
fi
if [ "$SERVICE" != "" ]; then
case "$SERVICE" in
saft*) ;;
*) echo "ERROR: tcp-port 487 is already in use!"; exit 1;;
esac
else
if [ "$SYSTEM" = NEXT ]; then
echo "configuring services"
echo "saft 487/tcp # simple asynchronous file transfer" | niload services .
else
echo "configuring $SERVICES"
echo "saft 487/tcp # simple asynchronous file transfer" >>$SERVICES
fi
fi
if [ "$SENDFILED" = "" ]; then
if [ -f /usr/sbin/tcpd ]; then
SFD="/usr/sbin/tcpd $SERVERDIR/sendfiled"
else
SFD="$SERVERDIR/sendfiled sendfiled"
fi
RESTART=true
echo "configuring $INETDCONF"
echo "saft stream tcp nowait root $SFD" >>$INETDCONF
fi
if [ -f /etc/inetd.sec ]; then
if [ "`grep '^saft' /etc/inetd.sec`" = "" ]; then
echo >> /etc/inetd.sec
echo "saft allow" >> /etc/inetd.sec
fi
fi
if [ -f /etc/profile ]; then
if [ "`grep check_sendfile /etc/profile`" = "" ]; then
echo "adding check_sendfile to /etc/profile"
echo >>/etc/profile
echo "test -x $BINDIR/check_sendfile && $BINDIR/check_sendfile"\
>>/etc/profile
fi
fi
if [ -f /etc/csh.login ]; then
if [ "`grep check_sendfile /etc/csh.login`" = "" ]; then
echo "adding check_sendfile to /etc/csh.login"
echo >>/etc/csh.login
echo "test -x $BINDIR/check_sendfile && $BINDIR/check_sendfile" \
>>/etc/csh.login
fi
fi
fi
if [ ! -d "$SPOOL/OUTGOING" ]; then
echo "creating $SPOOL"
mkdir_recursive $SPOOL/OUTGOING
chmod 755 $SPOOL || exit 1
chmod 1777 $SPOOL/OUTGOING
fi
if [ ! -d `dirname "$INLOG"` ]; then
mkdir_recursive `dirname $INLOG`
chmod 700 `dirname $INLOG`
fi
if [ ! -d `dirname "$OUTLOG"` ]; then
mkdir_recursive `dirname $OUTLOG`
chmod 700 `dirname $OUTLOG`
fi
if [ ! -f "$INLOG" ]; then
echo "# use \"utf7decode $INLOG\" to view this file" > $INLOG
echo >> $INLOG
chmod 600 $INLOG
fi
if [ ! -f "$OUTLOG" ]; then
echo "# use \"utf7decode $OUTLOG\" to view this file" > $OUTLOG
echo >> $OUTLOG
chmod 600 $OUTLOG
fi
free=`$SERVERDIR/sendfiled -f`
minfree=`awk '/minfree =/{print $3}' $CONFIG`
if [ "$free" -le "$minfree" ]; then
cat <<EOD
! WARNING !
You have not enough free disk space in $SPOOL !
Either give the spool directory more space or lower the value for the
minfree option in $CONFIG
EOD
fi
echo "[ -x $SERVERDIR/sendfiled ] && $SERVERDIR/sendfiled -Q && echo -n ' sendfiled'">${PREFIX}/etc/rc.d/sendfiled.sh
chmod a+x ${PREFIX}/etc/rc.d/sendfiled.sh
if [ "$RESTART" = true ]; then
kill -HUP `cat /var/run/inetd.pid`
echo
fi
[ -f $SERVERDIR/sendfiled.old ] && rm -f $SERVERDIR/sendfiled.old
echo done.
syntax highlighted by Code2HTML, v. 0.9.1