#!/bin/sh
#
# S00.custom         Shutdown-Hook fuer vdr
#
# Version:      2005-01-05 Claus.Thiemann@gmx.de
#

# 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/bin/svdrpsend.pl
TMPFILE=/video/commands/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."
echo "$N Verbindung(en) zu $1 auf Port $2 offen." >> /tmp/nfs-check.log
# 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

sudo cp $TMPFILE /video/commands/tmp/nfs-test.log
sudo mv $TMPFILE $RMTAB
N=$(grep --count ".*" $RMTAB)
MSG="$N Verbindung(en) zu nfs offen."
echo $MSG > /video/commands/tmp/nfs-check.log
#$SVDRP MESG $MSG > /dev/null &
echo $MSG
cat $RMTAB
sleep 1
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.\""
#echo "TRY_AGAIN=0"
exit $N

# EOF
