#!/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 < $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 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 <${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.