#!/bin/sh
#
# Das Schnellinstallations-Script fuer sendfile im /sw. 
# Bei Aufruf ohne Parameter wird ein Hilfetext ausgegeben.
#

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
}

RESTART=false
SPOOL=/var/spool/sendfile
CONFIG=/usr/local/etc
if [ "$2" = "" ]; then 
  SERVERDIR=/usr/local/sbin
else
  SERVERDIR=$2
fi

if [ "$1" != "ok" ]; then
  more <<EOD

Dies ist das no-questions-no-answers Schnellinstallations-Script fuer sendfile.
( Dokumentation zu SAFT/sendfile befindet sich in /client/doc/sendfile-1.5, bei
  Fragen oder Kritik bitte mail an framstag@rus.uni-stuttgart.de schicken. )

Es werden folgende Default-Werte benutzt (und automatisch angelegt):

	spool directory =	$SPOOL
	config directory =	$CONFIG
	sendfiled directory =	$SERVERDIR

In /etc/services und /etc/inetd.conf werden am Ende entsprechende Eintraege
gemacht.

In /etc/profile und in /etc/csh.login wird am Ende eine Zeile zum Test auf 
Files im sendfile-Spool hinzugefuegt.

Um den sendfile-Service wieder zu deinstallieren, genuegt ein:
	rm $SERVERDIR/sendfiled

Wollen Sie andere Default-Eintraege, so muessen Sie diese im config.h im
Source (ftp://ftp.uni-stuttgart.de/pub/unix/comm/misc/sendfile.tar.gz)
eintragen und selber compilieren. 

Einzige Ausnahme: das Directory des sendfiled kann auch hiermit angegeben
werden:
	/client/bin/sf_install ok /directory/wo/sendfiled/rein/soll

Sind Sie mit den Default-Eintraegen einverstanden, dann geben Sie jetzt ein:

	/client/bin/sf_install ok

EOD
  exit
fi

if [ "$LOGNAME" != root ]; then
  if [ "`whoami`" != root ]; then
    echo "Der SAFT/sendfile Service kann nur von root installiert werden!!"
    exit 1
  fi
fi

cd SW_INSTALL
umask 022

SENDFILED=`awk '/^saft/ { sfd=$6;
                          if (index($7,"/sendfiled")>0) sfd=$7;
                          if (substr(sfd,1,1)=="?") sfd=substr(sfd,2);
                          print sfd;
                        }' /etc/inetd.conf`
if [ "$SENDFILED" != "$SERVERDIR/sendfiled" -a "$SENDFILED" != "" ]; then
  echo "WARNING: cannot install sendfiled in $SERVERDIR because in /etc/inetd.conf"
  echo "         there is $SENDFILED specified! Check it!"
else
  echo "installing the sendfile-daemon in $SERVERDIR"
  mkdir_recursive $SERVERDIR
  cp sendfiled $SERVERDIR
  chmod 755 $SERVERDIR/sendfiled
fi

mkdir_recursive $CONFIG
if [ "`ls -l /etc/nosendfile 2>/dev/null | cut -c1`" = "-" ]; then
  mv /etc/nosendfile $CONFIG/nosendfile
  ln -s $CONFIG/nosendfile /etc/nosendfile 
fi
if [ ! -f $CONFIG/nosendfile ]; then 
  echo installing $CONFIG/nosendfile
  cp nosendfile $CONFIG/nosendfile
  chmod 644 $CONFIG/nosendfile
fi
if [ ! -f $CONFIG/sendfile.cf ]; then 
  echo installing $CONFIG/sendfile.cf
  cp sendfile.cf $CONFIG/sendfile.cf
  chmod 644 $CONFIG/sendfile.cf
else
  if [ "`diff sendfile.cf $CONFIG`" ]; then
    echo "`pwd`/sendfile.cf differs from $CONFIG/sendfile.cf !"
    echo "Please take a look what has been changed!"
  fi
fi

SERVICES="`grep '[	]487/tcp' /etc/services`"
if [ "$SERVICES" != "" ]; then
  case "$SERVICES" in 
    saft*)	;;
    *)		echo "install-error: tcp-port 487 ist bereits belegt!"; exit 1;;
  esac
else
  echo configuring /etc/services
  echo "#" >>/etc/services
  echo "saft	487/tcp		# simple asynchronous file transfer" >>/etc/services
fi

if [ "`grep '^saft' /etc/inetd.conf`" = "" ]; then
  if [ -f /usr/sbin/tcpd ]; then 
    SFD="/usr/sbin/tcpd $SERVERDIR/sendfiled"
  else
    SFD="$SERVERDIR/sendfiled sendfiled"
  fi
  RESTART=true
  echo configuring /etc/inetd.conf
  echo "#" >>/etc/inetd.conf
  echo "# simple asynchronous file transfer" >>/etc/inetd.conf
  echo "saft	stream	tcp	nowait	root	$SFD" >>/etc/inetd.conf
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 /client/bin/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 /client/bin/check_sendfile >>/etc/csh.login
  fi
fi

if [ ! -d "$SPOOL" ]; then
  echo creating $SPOOL
  mkdir_recursive $SPOOL
fi
if [ ! -d "$SPOOL/LOG" ]; then mkdir $SPOOL/LOG; fi
if [ ! -d "$SPOOL/OUTGOING" ]; then mkdir $SPOOL/OUTGOING; fi
chmod 755  $SPOOL
chmod 700  $SPOOL/LOG
chmod 1777 $SPOOL/OUTGOING

if df -k >/dev/null 2>&1; then 
  free=`df -k $SPOOL | awk '/\//{print int($4/1024)}'`
else
  free=`df $SPOOL | awk '/\//{print int($3/1024)}'`
fi
minfree=`awk '/minfree =/{print $3}' $CONFIG/sendfile.cf`
if [ $free -le $minfree ]; then
  cat <<EOD
		! ACHTUNG ! 
Es ist nicht genug Platz in $SPOOL !
Entweder muss dem Spool Directory mehr Platz zugewiesen werden oder der Wert
der Option minfree in $CONFIG heruntergesetzt werden.
EOD
fi

if [ "$RESTART" = true ]; then
  echo
  echo "Bitte jetzt den inetd neu starten ( oder einfach neu booten :-) )"
  echo
fi
