#!/bin/sh
# Version 00.00.05
#  Systemlog Permanent setzen / ruecksetzen
# Erweiterung tcpdump  zum Mitschneiden von Netzwerkpaketen
#
# help Linux Shell
# http://www.linux-praxis.de/linux1/shell2_5.html
STATUS_ERR1=$((1))
STATUS_ERR3=$((3))  # fehlender Parameter
STATUS_ERR4=$((4))  # Datei/Binary/PID nicht gefunden
STATUS_ERR16=$((16))  #Fehler, Version des Betriebsystem falsch (oder Plattform, Architektur(arm, arm64) passen nicht)
#---------------
setSyslogPerm()
{
	echo "enable permanent log"
	unlink /var/log
	mkdir /home/cti/syslog.perm
	ln -s /home/cti/syslog.perm /var/log
}
#---------------
setSyslogDefault()
{
	echo "disable permanent log"
	unlink /var/log
	ln -s /tmp /var/log
}
#---------------
SetSyslog()
{
	case "$1" in
		"enable")
		setSyslogPerm
		;;
		"disable")
		setSyslogDefault
		;;
	*)
	exit 1
	esac
}
#---------------
SetWeeklyReboot()
{
	STUNDE="$1"
	MINUTE="$2"
	DOW="$3"

	if [ "$STUNDE" = "disable" ]; then
		echo -en "disable weekly reboot"
		#	systemlink 	entfernen
		unlink /etc/cron.weekly/cron_weekly_reboot
	else
	# Note Einstellig, wenn < 10 !
		if [ "$STUNDE" -gt 23 ] && [ "$STUNDE" -lt 0 ]; then
			echo "Eingabefehler Stunde: <$STUNDE>"
			exit 1
		fi
		if [ "$MINUTE" -gt 59 ] && [ "$MINUTE" -lt 0 ]; then
			echo "Eingabefehler Minuten <$MINUTE>"
			exit 1
		fi
		if [ "$DOW" -gt 7 ] && [ "$DOW" -lt 0 ]; then
			echo "Eingabefehler Tag der Woche: <$DOW>"
			exit 1
		fi
	fi
# kopiere Vorlage & fuege Zeile ein /etc/cron.d/system
#--> mm hh * *  dd
	cp /home/cti/conf/system.crond /etc/cron.d/system
	echo -en "Setze auf [$STUNDE] : [$MINUTE] - [$DOW]"
	if [ "$STUNDE" = "disable" ]; then
		echo "@monthly        ID=sys-monthly  /bin/run-parts /etc/cron.monthly" >> /etc/cron.d/system
	else
		echo "$MINUTE $STUNDE * * $DOW      ID=sys-weekly   /bin/run-parts /etc/cron.weekly" >> /etc/cron.d/system
		echo "@monthly        ID=sys-monthly  /bin/run-parts /etc/cron.monthly" >> /etc/cron.d/system
		#	systemlink 	nach /etc/cron.weekly/
		ln -sf /home/cti/shellscripts/cron_weekly_reboot  /etc/cron.weekly/cron_weekly_reboot

	fi
	# restart crond
	/etc/init.d/S90dcron restart
}
#---------------
dumpNetwork()
{
   IFACE=$1
   FileName=$2
   Parameter=$3
# Testen ob Binary vorhanden und ausfuehrbar ist
   if [ ! -x /usr/sbin/tcpdump ]; then
      echo "missing /usr/sbin/tcpdump -> altes BS? "
      exit ${STATUS_ERR16}
   fi
   if [ ! -n "$IFACE" ]; then
      echo "missing Parameter Interface!"
      exit ${STATUS_ERR3}
   fi
   if [ ! -e /sys/class/net/$IFACE ]; then
      echo "/sys/class/net/$IFACE existiert nicht"
      exit ${STATUS_ERR4}
   fi
   if [ ! -n "$FileName" ]; then
      echo "missing Parameter Filename!"
      exit ${STATUS_ERR3}
   fi
   if [ ! -n "$Parameter" ]; then
      echo "set default parameter"
      Parameter='-C 100M -W 3'
   fi

	echo "Call  tcpdump -i $IFACE -w $FileName $Parameter > /dev/null 2>&1  &"
   tcpdump -i $IFACE -w $FileName $Parameter > /dev/null 2>&1  &
# NOTE cmd_result geht nicht
}
#---------------
dumpNetworkStop()
{
   IFACE=$1
   if [ ! -n "$IFACE" ]; then
      echo "missing Parameter Interface!"
      exit ${STATUS_ERR3}
   fi
   echo "do: ps | grep tcpdump | grep $IFACE | grep -v grep | awk '{print \$1}'"
   PID_TCPDUMP=$(ps | grep tcpdump | grep $IFACE | grep -v grep | awk '{print $1}' )
   if [ -n "$PID_TCPDUMP"  ]; then
      echo "do kill -9  tcpdump:  $PID_TCPDUMP"
      kill -15 $PID_TCPDUMP > /dev/null 2>&1  &
   else
      echo "not found tcpdump:  $PID_TCPDUMP"
      exit ${STATUS_ERR4}
   fi
}
#====================
# main case ...
#====================
case "$1" in
	set_syslog)
	SetSyslog "$2"
	;;
	set_weekly_reboot)
	SetWeeklyReboot  "$2" "$3" "$4"
	;;
	tcpdump_start)
	dumpNetwork "$2" "$3" "$4"
	;;
	tcpdump_stop)
	dumpNetworkStop "$2"
	;;
	*)
	echo "Usage: $0 { set_syslog | set_weekly_reboot | tcpdump_start | tcpdump_stop } "
	exit 1
esac
exit $?
