Hi hat sich doch ein fehler eingeschlichen
#!/bin/sh
© '2000, off/beat S.S.E.
Ralf Frare
06.11.2000 0.B
20.01.2001 1.Beta
Winpopup script
))
-------------------------Einfuegen in /etc/ppp/ip_up-------------------
>>insert on top !
LOG=/var/log/online # logfile path
PROG=/usr/sbin/onpop # program path
>>Einfuegen in „case“ ip_up) kurz vor ip_down)
$PROG start $INTERFACE $DEST &
>>Einfuegen in „case“ ip_down) direkt danach in neuer zeile
$PROG stop $INTERFACE $DEST &
--------------------------So das wahrs dann im ip_up------------------
#-------------------------------edit for onpop---------------------------
SERVER=„offblond“ #Server name
UNIT1=„24“ #Zeiteinheiten in sec fuer 1 Pf !! integer !!
UNIT2=„0“ #Preis fuer eine Einwahl !! integer !!
Unit1_TXT=„2.5 Pf / min“ # Das erscheint nur im Winpop ohne Funktion!
Unit2_TXT=„0 Pf / Anw“ # dto
win pop Message OUT? true|false An welche Clients ? NetBios names
CLIENT_OUT=„off2 off3 offblond“
MESS_OUT=down # Wann Melden ??
win pop Message Dial-in An welche Clients ? NetBios names
CLIENT_IN=„off3 off2“
MESS_IN=both
#!!! Die netbios names muessen im system bekannt sein sonst erfolgt
#!!! erneute anwahl im dial on demand modus
welche devices sind IN welche OUT (vom server aus gesehen)??
keine Angabe = Keine Meldung
DEV_OUT="ippp3 ippp2 " # zB zum Provider
DEV_IN= „ippp0 ippp1“ # Dial in
#***************************+ist noch in Arbeit******************+*******
mail Message true|false An welche mail adressen ?
interval=week # (day|week|month)
mail_it=false ; MAIL_ADRESS_INT=„root@offblond [email protected]“
Abrechung des Providers Tag ?
P_bill=04
save_bill=false ; MAIL_ADRESS_BILL=„root@offblond [email protected]“
#***************************+ist noch in Arbeit******************+*******
wo soll das logfile hin ?
LOGF=/var/log/online
#----------------------end onpop parameter ------------------------------
Jetzt starten wir mal einfach
UPDOWN=$1
DEVICE=$2
DESTIN=$3
LOGF=$LOGF.$DEVICE
#Debug : test ohne aufruf durch ip_down
#LOGF=/var/log/online
#DESTIN=192.168.47.11
#DEVICE=ippp2
#UPDOWN=start
do_timelog ()
{
check logfile > nur stop nach start und versa
ANZ=grep "st" $LOGF | wc -l ANZ=$[$ANZ - 0] ;
last=grep -n "st" $LOGF | grep "^$ANZ:" | cut -s -d: -f2
set $last
if [$1 = $UPDOWN]
then grep -v -w „$last“ $LOGF > $LOGF.TMP
mv -f $LOGF.TMP $LOGF ;
fi
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DIESE ZEILE MUSS SO SEIN !!!
echo -e „$UPDOWN\tdate +'%d%b\tweek%V\t%s'\t$DESTIN“>>$LOGF
#!!!
check rulez fuer messages
for snap in OUT IN
do
eval Key=$DEV_$snap ; set $Key
while [$1] ;
do
if ["$1" = „$DEVICE“] ;
then echo „test“ ; eval TODO=$MESS_$snap
case $TODO in
up) if [$UPDOWN = start] ; then do_START_POP_$snap ; fi ;;
down) if [$UPDOWN = stop] ; then do_STOP_POP_$snap ; fi ;;
both) if [$UPDOWN = start]
then „do_START_POP_$snap“
else „do_STOP_POP_$snap“
fi ;;
*) echo „onpop MESS_IN||OUT parameter failure“
esac
fi
shift 1
done
done
do_final
}
Der Reinigungsmann
do_final ()
{
exit
}
Sub sec -> Std min sec
do_time_resolve ()
{
Std=$[$1 / 3600] ; Rest=$[$1 - $Std * 3600]
Min=$[$Rest / 60] ; Rest=$[$Rest - $Min * 60]
HMS_time="$Std:h $Min:m $Rest:s"
}
Sub PF -> DM.Pf
do_Money_resolve ()
{
DM=$[$1 / 100] ; Rest=$[$1 - $DM * 100]
if [$Rest -le „9“] ;
then Money="$DM,0$Rest DM" ;
else Money="$DM,$Rest DM" ;
fi
}
Sub auswerten logfile
do_calculate ()
{
start=grep "start" $LOGF | awk '{ print $4 } '
stop=grep "stop" $LOGF | awk ' { print $4 }'
first=grep -n "st" $LOGF | grep "^1:" | awk ' { print $2 }'
time=grep "st" $LOGF | awk ' { print $4 }'
ANZ1=echo $start | wc -w ; ANZ2=echo $stop | wc -w
[$ANZ1 -ne $ANZ2] && echo „error in logfile $LOGF or $DEVICE busy“ && exit
set $time ; IZ=0 ; TIME=0 ; ON_TIME=0
[$1 -gt $2] && shift 1 && IZ=2
[$1 -gt $2] && echo "error in logfile $LOGF " && exit ;
while [$IZ -lt $ANZ1] ;
do
TIME=$[$2 - $1]
[$TIME -le 0] && TIME=0
ON_TIME=$[$ON_TIME + $TIME]
IZ=$[1 + $IZ] ; shift 2
done
do_Money_resolve $[$TIME / $UNIT1] ; ValueLa=$Money
do_Money_resolve $[$ON_TIME / $UNIT1] ; ValueOn=$Money
do_Money_resolve $[$ANZ1 * $UNIT2] ; ValueWa=$Money
do_Money_resolve $[$[$ANZ1 * $UNIT2] + $[$ON_TIME / $UNIT1]] ; ValueAll=$Money
do_time_resolve $ON_TIME ; Online=$HMS_time
do_time_resolve $TIME ; Last=$HMS_time
now=date +'%d%b'
}
do_STOP_POP_OUT ()
{
do_calculate
set $CLIENT_OUT
while [$1] ;
do
TO=$1
echo -e \
"Zeitraum \t $first bis $now\
\nEinheiten: \t [$Unit1_TXT] [$Unit2_TXT]\
\nEinwahlen \t $[$ANZ1 + 0] = $ValueWa\
\n\
\nLetzte session \t $Last = $ValueLa\
\n\
\nKosten sessions \t $Online = $ValueOn\
\n\
\nKosten gesamt \t $ValueAll "\
| /usr/bin/smbclient -b 1200 -I $TO -M $TO -U „Online reminder“ >/dev/null &
shift 1
done
#rcsquid restart > /dev/null &
do_final
}
do_START_POP_OUT ()
{
set $CLIENT_OUT
while [$1] ;
do
TO=$1
echo -e \
„\n Start Verbindung mit Provider an $DEVICE“\
| /usr/bin/smbclient -b 1200 -I $TO -M $TO -U „Online reminder“ >/dev/null &
shift 1
done
do_final
}
do_STOP_POP_IN ()
{
do_calculate
set $CLIENT_IN
while [$1] ;
do
TO=$1
echo -e \
„Verbindung an $DEVICE beendet\
\n\
\n\
\nONLINE ZEIT \t = $Last“\
| /usr/bin/smbclient -b 1200 -I $TO -M $TO -U „$SERVER Dial-in“ >/dev/null &
shift 1
done
do_final
}
get_hostname ()
{
HOST=grep -w "$DESTIN" /etc/hosts | cut -f2
if -z $HOST ; then HOST=unknown ; fi
}
do_START_POP_IN ()
{
get_hostname
set $CLIENT_IN
while [$1] ;
do
TO=$1
echo -e \
„Dial in Verbindung an „$SERVER“\
\n\
\nname\t\t$HOST\
\nIP Adresse\t$DESTIN \
\nDEVICE\t\t$DEVICE \
\n\n**************************** L O G I N ****************************“\
| /usr/bin/smbclient -b 1200 -I $TO -M $TO -U „Dial-in“ >/dev/null &
shift 1
done
do_final
}
Start program
do_timelog
exit