#! /bin/sh
#
# S00.custom Shutdown-Hook fuer vdr
#
# Version: 2005-01-05 [EMAIL]<mod>Adresse entfernt</mod>[/EMAIL]
#
# Die Variablen muessen an die verwendete Distri angepasst werden.
# Das gilt vor allem fuer die svdrpsend.pl
BASENAME="$(basename $0)"
NETSTAT=/bin/netstat
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#RMTAB=/var/lib/nfs/rmtab
SVDRP=/usr/lib/vdr/svdrpsend.pl
TMPFILE=/tmp/$BASENAME
function f_tcp() {
local N
echo -n "Anzahl Verbindungen zu $1 auf Port $2: "
N=$($NETSTAT --tcp --numeric | grep --count ":$2 ")
echo $N
[ $N -eq 0 ] && return 0
# Meldung ausgeben auf TV und SysLog
MSG="$N Verbindung(en) zu $1 offen."
# und zwar im Hintergrund wegen Broken Pipe Problem
$SVDRP MESG $MSG > /dev/null &
echo $MSG
$NETSTAT --tcp --numeric | grep ":$2 "
sleep 3
return $N
}
# Anmerkung zu nfs: Die Anzahl kann zu hoch sein.
# Wenn ein Client kein umount gemacht hat,
# wird der Eintrag nicht aus der $RMTAB geloescht
# und ueberlebt auch den shutdown.
#function f_nfs() {
#local N
#local SATZ
#local HOST
#echo -n "Anzahl Eintraege in $RMTAB: "
#[ -s $RMTAB ] && N=$(grep --count ".*" $RMTAB) N=0
#echo $N
#[ $N -eq 0 ] && return 0
# Bereinigen der $RMTAB mittels ping auf die Hostnamen
# Ist zwar nicht ganz sauber, aber besser als nichts
#cat /dev/null > $TMPFILE
#for SATZ in $(cat $RMTAB); do
# HOST=$(echo $SATZ | cut --delimiter=: --fields=1)
# ping -qnc 1 $HOST && echo $SATZ >> $TMPFILE
#done
#mv $TMPFILE $RMTAB
#N=$(grep --count ".*" $RMTAB)
#MSG="$N Verbindung(en) zu nfs offen."
#$SVDRP MESG $MSG > /dev/null &
#echo $MSG
#cat $RMTAB
#sleep 3
#return $N
#}
f_network() {
local N=0
f_tcp Secure-Shell 22 N=$[$N+$?]
f_tcp Samba 139 N=$[$N+$?]
f_tcp Samba 445 N=$[$N+$?]
f_tcp Streamdev 2004 N=$[$N+$?]
f_tcp Streamdev 3000 N=$[$N+$?]
f_nfs N=$[$N+$?]
# Im Fehlerfall Anlegen einer Datei als Returncode-Ersatz
[ $N -eq 0 ] echo -n "$N" > $TMPFILE
}
# Loeschen der Returncode-Datei
rm -f $TMPFILE
# Aufruf der Haupt-Funktion mit oder ohne Syslog
#f_network
f_network | logger -i -t $BASENAME
# Auswerten des Ergebnisses
[ -e $TMPFILE ] exit 0
N=$(cat $TMPFILE)
rm -f $TMPFILE
# Eigentlichen Shutdown-Hook ausloesen
echo "ABORT_MESSAGE=\"$N Verbindungen offen.\""
if [ $N -gt 0 ] ; then
echo "TRY_AGAIN=2"
exit 0
# EOF