From f1d3de9de7ca7e1e37e6192334fe108c9c11a343 Mon Sep 17 00:00:00 2001 From: krempp Date: Sun, 21 May 2000 14:52:43 +0200 Subject: [PATCH] Initial revision darcs-hash:20000521125243-92525-6092ab1d3efe6df9898549afb0aa3c7d43983e8b.gz --- E-mail_all | 11 +++++ SMBMessage | 2 + arpanoid | 93 +++++++++++++++++++++++++++++++++++++ arpanoid-daily | 17 +++++++ arpanoid-frequently | 2 + auto-claque | 21 +++++++++ cdecode | 52 +++++++++++++++++++++ cencode | 53 +++++++++++++++++++++ claque-interfaces | 26 +++++++++++ modifetc | 5 ++ redpopup | 9 ++++ redpopup.py | 76 ++++++++++++++++++++++++++++++ remail | Bin 0 -> 128770 bytes remail.pas | 36 ++++++++++++++ restart-all | 12 +++++ sendmail-vit-il | 24 ++++++++++ squid-vit-il | 26 +++++++++++ surveille | 26 +++++++++++ surveille-reseau | 36 ++++++++++++++ surveille-sendmail | 10 ++++ surveille-squid | 10 ++++ surveille.tout | 18 +++++++ temp-avg | 11 +++++ test-squid-taille-cache.pl | 25 ++++++++++ verifie_ipforward | 7 +++ watchdog | 13 ++++++ 26 files changed, 621 insertions(+) create mode 100755 E-mail_all create mode 100755 SMBMessage create mode 100755 arpanoid create mode 100755 arpanoid-daily create mode 100755 arpanoid-frequently create mode 100755 auto-claque create mode 100755 cdecode create mode 100755 cencode create mode 100755 claque-interfaces create mode 100644 modifetc create mode 100755 redpopup create mode 100755 redpopup.py create mode 100644 remail create mode 100644 remail.pas create mode 100755 restart-all create mode 100755 sendmail-vit-il create mode 100755 squid-vit-il create mode 100755 surveille create mode 100755 surveille-reseau create mode 100755 surveille-sendmail create mode 100755 surveille-squid create mode 100755 surveille.tout create mode 100755 temp-avg create mode 100755 test-squid-taille-cache.pl create mode 100755 verifie_ipforward create mode 100755 watchdog diff --git a/E-mail_all b/E-mail_all new file mode 100755 index 00000000..2173cd4d --- /dev/null +++ b/E-mail_all @@ -0,0 +1,11 @@ +#!/bin/zsh +./remail $1 $2 > email.tmp +chmod a+x email.tmp +echo maintenant il faut editer ./email.tmp avec pico +echo et virrer les ^M qui apparaissent. +echo apres, on lance ./email.tmp et on l'efface +#./email.tmp +#rm email.tmp +echo Done +# envoie un E-mail a tout le monde +# orthographe : E-mail_all fichier.txt "titre" \ No newline at end of file diff --git a/SMBMessage b/SMBMessage new file mode 100755 index 00000000..ae90bfa9 --- /dev/null +++ b/SMBMessage @@ -0,0 +1,2 @@ +#!/bin/sh +cat $3 | smbclient -U $1 -M $2 diff --git a/arpanoid b/arpanoid new file mode 100755 index 00000000..0ba3b99c --- /dev/null +++ b/arpanoid @@ -0,0 +1,93 @@ +#!/usr/bin/python +# Dis, emacs, c'est du -*- python -*-, ça ! +# +# C.Chépélov, 19 janvier 1999. Suite à discussion avec Olivier DALOY, et +# des trucs louches dans ses logs. Merci, merci ARP !! + +import config +import pickle,string,os + +# Phase 1 : lire les données théoriques, les retrier pour être exploitables. + +ZONEDB = pickle.load(open(config.CFG_FILE_ROOT+"Zone.db","r")) + +THicn_by_mac = {} # ip, comment, name by MAC (théorique) +THncm_by_ip = {} # name, comment, MAC by IP (théorique) + +for name in ZONEDB.keys(): + (IP,comment,MAC) = ZONEDB[name] + THicn_by_mac[MAC] = (IP,comment,name) + THncm_by_ip[IP] = (name,comment,MAC) + +# Phase 2 : Lire les données réelles, les mettres dans des dicos pour être +# exploitables. + +arp = os.popen("arp -n","r") +arp.readline() + +ip_by_mac = {} +mac_by_ip = {} +while 1: + s = arp.readline() + if not s: break + sl = string.split(s) + try: + ip = sl[0] + + mac = "" + if (sl[1] != "ether") or (sl[2] == "(incomplete)"): raise "incomplete" + for c in string.lower(sl[2]): + if c in "0123456789abcdef": + mac = mac + c + if not ip or not mac: break + ip_by_mac[mac] = ip + mac_by_ip[ip] = mac + + except: + pass + +# Phase 3 : en fonction des gens qu'on a vus, faire une comparaison... +# d'abord, par IP vues : + +try: + problems = open("/var/log/arpanoid","r").readlines() +except: + problems = [] + # la liste des problèmes. Sera triée par ordre alphabétique + # et les problèmes rendus uniques. + # note: on récupère les vieux problèmes, on génèrera le même message + # plusieurs fois (pas grave, on virera les messages identiques) + +def log(s): + s = s + '\n' + if not s in problems: problems.append(s) + +for ip,mac in mac_by_ip.items(): + + if THicn_by_mac.has_key(mac): + thIP,comment,name = THicn_by_mac[mac] + if thIP == ip: pass # print name,' est clair (IP by MAC)' + else: + if THncm_by_ip.has_key(ip): victim,t1,t2 = THncm_by_ip[ip] + else: victim = "(inconnu)" + log("%s (%s) usurpe une adresse IP !!! (normal=%s,actuel=%s[%s])" % (name,comment,thIP,ip,victim)) + else: + log("MACHINE INCONNUE (intruse ?) MAC=%s !" % mac) + + if THncm_by_ip.has_key(ip): + name,comment,thMAC = THncm_by_ip[ip] + if thMAC == mac: pass # print name,' est clair (MAC by IP)' + else: + if THicn_by_mac.has_key(mac): t1,t2,name = THicn_by_mac[mac] + else: victim = "(inconnu)" + log("%s (%s) utilise une autre carte réseau !!! (normal=%s,actuel=%s[%s]" % (name,comment,thMAC,mac,victim)) + else: + diag = "(intruse ?)" + if THicn_by_mac.has_key(mac): + THip,comment,name = THicn_by_mac[mac] + diag = "%s de %s" % (name,comment) + log("MACHINE AVEC FAUX IP=%s (%s)!" % (ip,diag)) +problems.sort() + +print string.join(problems,"") + diff --git a/arpanoid-daily b/arpanoid-daily new file mode 100755 index 00000000..ee5a27aa --- /dev/null +++ b/arpanoid-daily @@ -0,0 +1,17 @@ +#!/bin/sh + +subject="logs ARPanoid `date` " +dest="root@crans.ens-cachan.fr" + +cat < /var/log/arpanoid 2>/dev/null diff --git a/arpanoid-frequently b/arpanoid-frequently new file mode 100755 index 00000000..5363d05b --- /dev/null +++ b/arpanoid-frequently @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/CRANS/code/arpanoid > /var/log/arpanoid 2>/dev/null diff --git a/auto-claque b/auto-claque new file mode 100755 index 00000000..431d5c7d --- /dev/null +++ b/auto-claque @@ -0,0 +1,21 @@ +#!/bin/sh +# CC 2/2/1999 horrible kludge +# +# +# Pour des raisons bizarres (bug driver SMC ? matériel ?), les interfaces +# eth1 et eth2 bloquent régulièrement. +# en général, un claquage suffit à les relancer. Par ailleurs, un claquage +# ne bloque pas les communications -- on peut donc jouer à le faire +# régulièrement. +# + +#a enlever les commentaires! 19.02 +# 20/01/2000 jerome reactive le script + +echo "Claquage des interfaces" | /usr/bin/logger -t "AutoClaque" -p user.warn + +ifconfig eth0 down; ifconfig eth0 up; route add default gw 138.231.136.2 + +ifconfig eth1 down; ifconfig eth1 up +ifconfig eth2 down; ifconfig eth2 up 138.231.137.2 netmask 255.255.255.0 broadcast 138.231.137.255 +ifconfig eth3 down; ifconfig eth3 up diff --git a/cdecode b/cdecode new file mode 100755 index 00000000..e4ae4df8 --- /dev/null +++ b/cdecode @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# Dis, emacs, c'est du -*- python -*- +# +""" +Programme fait pour encoder les chambres suivant le cryptage standard +pour le bâtiment G (le F peut aussi s'en servir). Inutile au B, il y a déjà un +autre mapping (les prises réseau sont numérotées différemment des chambres) + +Ceci ne résistera évidemment pas à une attaque cryptographique en règle. + +L'algorithme étant réellement trivial, il est raisonnable de laisser ce +script "chmod 700" et "chown root:root" ! + +C.Chepelov 5 novembre 1998 (présente implémentation), mise au point de +l'algorithme et première implémentation en Reverse Polish Lisp (HP48) à +l'automne 1997. + +Note : l'implémentation de référence est "cencode". L'algo est symétriqe... +""" + +import sys + +if len(sys.argv) != 2: + print "usage : %s " % sys.argv[0] + print "exemple : %s 9378 --> 126 " % sys.argv[0] + print + sys.exit(1) + +s_arg = sys.argv[1] +try: + arg = int(s_arg) + if arg >= 10000: raise "pas bon." +except: + print "L'argument doit être un nombre inférieur à 10000 !" + sys.exit(2) + +# C'est pas du tout optimal, mais on s'en fout ! +c1 = int(arg / 100) % 10 +c2 = int(arg / 10) % 10 +c3 = arg % 10 +s = int(arg / 1000) % 10 + +f3 = t1 = (10 - c1 + s) % 10 +f2 = t2 = (10 - c2 + s) % 10 +f1 = t3 = (10 - c3 + s) % 10 + +res = f1 * 100 + f2 * 10 + f3 +print "Chambre = %d " % res + + + + diff --git a/cencode b/cencode new file mode 100755 index 00000000..a54402f4 --- /dev/null +++ b/cencode @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# Dis, emacs, c'est du -*- python -*- +# +""" +Programme fait pour encoder les chambres suivant le cryptage standard +pour le bâtiment G (le F peut aussi s'en servir). Inutile au B, il y a déjà un +autre mapping (les prises réseau sont numérotées différemment des chambres) + +Ceci ne résistera évidemment pas à une attaque cryptographique en règle. + +L'algorithme étant réellement trivial, il est raisonnable de laisser ce +script "chmod 700" et "chown root:root" ! + +C.Chepelov 5 novembre 1998 (présente implémentation), mise au point de +l'algorithme et première implémentation en Reverse Polish Lisp (HP48) à +l'automne 1997. + +""" + +import sys + +if len(sys.argv) != 2: + print "usage : %s " % sys.argv[0] + print "exemple : %s 126 --> 9378 " % sys.argv[0] + print "Ajouter G ou F selon bâtiment, W ou B selon gaine technique. " + print + sys.exit(1) + +s_arg = sys.argv[1] +try: + arg = int(s_arg) + if arg >= 1000: raise "pas bon." +except: + print "L'argument doit être un nombre inférieur à 1000 !" + sys.exit(2) + +# C'est pas du tout optimal, mais on s'en fout ! +c1 = int(arg / 100) % 10 +c2 = int(arg / 10) % 10 +c3 = arg % 10 + +s = (c1 + c2 + c3) % 10 + +f3 = t1 = (10 - c1 + s) % 10 +f2 = t2 = (10 - c2 + s) % 10 +f1 = t3 = (10 - c3 + s) % 10 + +res = s * 1000 + f1 * 100 + f2 * 10 + f3 +print "Code = %d " % res + + + + diff --git a/claque-interfaces b/claque-interfaces new file mode 100755 index 00000000..4ff75844 --- /dev/null +++ b/claque-interfaces @@ -0,0 +1,26 @@ +#!/bin/sh +# CC 2/2/1999 horrible kludge +# +# +# Pour des raisons bizarres (bug driver SMC ? matériel ?), les interfaces +# eth1 et eth2 bloquent régulièrement. +# en général, un claquage suffit à les relancer. Par ailleurs, un claquage +# ne bloque pas les communications -- on peut donc jouer à le faire +# régulièrement. +# + +#a enlever les commentaires! 19.02 +# 20/01/2000 jerome reactive le script + +echo "Claquage des interfaces" | /usr/bin/logger -t "Claque" -p user.warn + +ifconfig eth0 down; ifconfig eth0 up; route add default gw 138.231.136.2 + +ifconfig eth1 down; ifconfig eth1 up +ifconfig eth2 down; ifconfig eth2 up +ifconfig eth3 down; ifconfig eth3 up + +#ifconfig eth2 up 138.231.138.2 netmask 255.255.255.0 broadcast 138.231.138.255 +ifconfig eth2:1 up 138.231.138.2 netmask 255.255.255.0 broadcast 138.231.138.255 +#ifconfig eth1:1 down 138.231.139.2 netmask 255.255.255.0 broadcast 138.231.139.255 +#ifconfig eth1 up diff --git a/modifetc b/modifetc new file mode 100644 index 00000000..41f568f1 --- /dev/null +++ b/modifetc @@ -0,0 +1,5 @@ +# utilisation : " . =modifetc " + +alias cvcommit='cvs commit | grep -v "^?"' +CVSROOT="/usr/cvs-rep" +export CVSROOT diff --git a/redpopup b/redpopup new file mode 100755 index 00000000..d6e5f7ee --- /dev/null +++ b/redpopup @@ -0,0 +1,9 @@ +#!/bin/sh +PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin +PYTHONPATH=/usr/lib/python-1.5/ + +cd /etc/CRANS +echo $1 $2 $3 $4 $5 > /tmp/last.popup.log +exec python /etc/CRANS/code/redpopup.py $1 $2 $3 $4 $5 >&2 2>/tmp/last.popup.err + + diff --git a/redpopup.py b/redpopup.py new file mode 100755 index 00000000..07856db6 --- /dev/null +++ b/redpopup.py @@ -0,0 +1,76 @@ +#!/usr/bin/python +# -*- python -*- +import sys,time,os,pickle,string,popen2,random + +FORKLEN = 5 +TIMEOUT = 15 # une machine a 15 secondes pour recevoir un popup ! + +def do_bomb(Machines): + time.sleep(random.random()) + if len(Machines) < FORKLEN: + for mach in Machines: + begin = time.time() + print "ré-expédition SMBpopup à ",mach + fd = popen2.Popen3("/etc/CRANS/code/SMBMessage %s %s %s" % (from_whom,mach,msgfile)) + while 1: + time.sleep(1) + if fd.poll() != -1: break # fini ! (cool) + if (time.time() - begin) > TIMEOUT: break + del fd + else: + Half = len(Machines) / 2 + + pid = os.fork() + if pid == 0: + # child + do_bomb(Machines[:Half]) + else: + # parent + do_bomb(Machines[Half:]) + try: + os.waitpid(pid,0) + except: + pass + # à ce stade, on a éliminé toute récursion, tant pile que process... + # croisons les doigts !!! + + +if len(sys.argv) < 4: + sys.stderr.write('Attend 3 arguments !\n') + sys.exit(1) + +Zone = pickle.load(open(CFG_READ_DIR+"Zone.db","r")) + +from_whom = sys.argv[1] +from_where = sys.argv[2] +msgfile = sys.argv[3]+"-red" +message = open(sys.argv[3],"r").readlines() + +message.insert(0,("Message de %s (@%s) à ALL : \n-----\n" % (from_whom,from_where))) +open(msgfile,"w").writelines(message) + + +# pour gagner du temps, on n'envoie le message qu'aux machines qui sont +# (probablement) vivantes. Pour gagner encore plus de temps, on fait +# confiance au cache ARP (15 minutes) + +Alive = [] +arp = os.popen("arp -a","r") +while 1: + s = arp.readline() + if not s: break + mach = string.split(string.split(s)[0],'.')[0] + if mach[:5] == 'zamok': continue # évitons les boucles infininies... + if Zone.has_key(mach): Alive.append(mach) +print Alive + +arp.close() + +#maintenant, au boulot... +do_bomb(Alive) +unlink(msgfile) +unlink(sys.argv[3]) + + + + diff --git a/remail b/remail new file mode 100644 index 0000000000000000000000000000000000000000..da8a61b14c70870498264ea94963113547b6b409 GIT binary patch literal 128770 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⁢93l?=0&73~JQ!aGQ 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 then +begin + writeln('orthographe : E-mail_all fichier.txt "subject"'); + writeln('permet au root d''envoyer un E-mail a tout le monde'); + writeln('s''integre dans le script E-mail_all, ne pas toucher'); + halt(0); +end; +assign (f,'personnes.cf'); +reset(f); +seek(f,0); +writeln('#! /bin/zsh'); +s:=' '; +repeat; +{$i-} +read(f,c); +{$i+} +if c=#58 then begin + repeat ; + read(f,c); + until c=#10; + writeln('cat ',paramstr(1),' | mail -s "', paramstr(2),'" ',s,'@crans.ens-cachan.fr'); + c:=#32; + s:=''; + end; +s:=s+c; +until ord(c)=35; +close(f); +end. diff --git a/restart-all b/restart-all new file mode 100755 index 00000000..f76196f9 --- /dev/null +++ b/restart-all @@ -0,0 +1,12 @@ +#!/bin/zsh -p +# suid !! + +id + +echo "restarting the named (DNS) :" +kill -HUP `cat /var/run/named.pid` + +echo "restarting the DHCP : " +#kill -TERM `cat /var/run/dhcpd.pid` || true +#/usr/sbin/dhcpd +/etc/init.d/dhcp reload diff --git a/sendmail-vit-il b/sendmail-vit-il new file mode 100755 index 00000000..a5e24a7d --- /dev/null +++ b/sendmail-vit-il @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# -*- Python -*- + +# teste si notre sendmail fonctionne encore. + +from socket import * +import sys + +OK = 0 + +host = "localhost" +if len(sys.argv) > 1: + host = sys.argv[1] + +s = socket(AF_INET,SOCK_STREAM) +try: + s.connect(host,25) + data = s.recv(3) + OK = ("220" == data) + s.close() +except: + OK = 0 + +sys.exit(not OK) diff --git a/squid-vit-il b/squid-vit-il new file mode 100755 index 00000000..fee257af --- /dev/null +++ b/squid-vit-il @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- Python -*- + +# teste si notre squid fonctionne encore (sortof). + +from socket import * +import sys + +OK = 0 + +host = "localhost" +if len(sys.argv) > 1: + host = sys.argv[1] + +s = socket(AF_INET,SOCK_STREAM) +try: + s.connect(host,3128) + s.send("GET squid-vit-il") + data = s.recv(4) + OK = ("HTTP" == data) + s.close() +except: + OK = 0 + +sys.exit(not OK) + diff --git a/surveille b/surveille new file mode 100755 index 00000000..ff24ae1f --- /dev/null +++ b/surveille @@ -0,0 +1,26 @@ +#!/bin/zsh +# si le process $1 est mort, le relance + +unset res + +arg=$1 +res=`ps xeaf | grep $arg | grep -v surveille | grep -v grep` +#res=`/etc/rc.d/init.d/$arg status | grep "running"` + +if [ -z $res ]; then + if [ -f /var/run/dead.$arg ]; then + # waouh, on peut rien -- on a déjà essayé de relancer ce truc + # et il est déjà mort -- y'a sûrement un problème dans les fichiers + # de config ! + # faudrait faire un "ls" quotidien de /var/run/dead.* ... + true + else + /etc/rc.d/init.d/$arg stop 2>/dev/null >/dev/null + /etc/rc.d/init.d/$arg start 2>/dev/null >/dev/null + logger "surveille a du relancer $1 !" 2>/dev/null >/dev/null + touch /var/run/dead.$arg + fi +else + rm -f /var/run/dead.$arg 2>/dev/null >/dev/null + +fi diff --git a/surveille-reseau b/surveille-reseau new file mode 100755 index 00000000..5d9abed7 --- /dev/null +++ b/surveille-reseau @@ -0,0 +1,36 @@ +#!/bin/sh + +ipx=false + +function teste_ou_claque() { + if ! ping -c 1 $1 2>&1 >/dev/null + then + ifconfig $2 down 2>/dev/null >/dev/null + /usr/local/bin/mii-diag -R $2 2>/dev/null >/dev/null + ifconfig $2 up 2>/dev/null >/dev/null + if [ ! -z "$3" ] + then + route add default gw $3 + fi + ipx=true + logger "surveille-reseau a du claquer $2 !" 2>&1 >/dev/null + fi +} + +# pour l'instant, on n'a qu'un seul réseau (eth0) où se trouve de façon sûre +# une machine partenaire, toujours présente. +# les autres réseaux peuvent être ajoutés dès que l'on aura une victime à +# pinger (par exemple, une vieille sun ou un vieux 386sx/Linux de réserve, +# ne servant à rien sauf à faire du RC5.distributed.net (pour l'ego du root) +# et répondre aux pings) + + +teste_ou_claque 138.231.176.65 eth0 138.231.136.2 +#teste_ou_claque zagadka eth1 +#teste_ou_claque gandalf eth2 +#teste_ou_claque bigouden eth3 + +$ipx && /etc/CRANS/rc.ipx >/dev/null 2>/dev/null + + + diff --git a/surveille-sendmail b/surveille-sendmail new file mode 100755 index 00000000..15134e45 --- /dev/null +++ b/surveille-sendmail @@ -0,0 +1,10 @@ +#!/bin/sh + +/etc/CRANS/sendmail-vit-il $1 && exit + +killall -9 sendmail 2>/dev/null >/dev/null +echo "surveille-sendmail relance sendmail !!!" >> /var/log/messages +/usr/lib/sendmail -bd + + + diff --git a/surveille-squid b/surveille-squid new file mode 100755 index 00000000..6b9d9ba6 --- /dev/null +++ b/surveille-squid @@ -0,0 +1,10 @@ +#!/bin/sh + +/etc/CRANS/squid-vit-il $1 && exit + +echo "surveille-squid relance Squid !!!" >> /var/log/messages +squid-new >/dev/null 2>/dev/null + + + + diff --git a/surveille.tout b/surveille.tout new file mode 100755 index 00000000..8ff86afa --- /dev/null +++ b/surveille.tout @@ -0,0 +1,18 @@ +#!/bin/sh + +/etc/CRANS/surveille-sendmail $HOST +/etc/CRANS/surveille-squid +/etc/CRANS/surveille httpd +/etc/CRANS/surveille smb +/etc/CRANS/surveille dhcpd +/etc/CRANS/surveille sshd2 +/etc/CRANS/surveille ntpd + +/etc/CRANS/surveille-reseau +# Et bientot +# /etc/CRANS/surveille-reseau.pl + + +killall -9 nwbind 2>/dev/null >/dev/null + #goret goret goret :-) mais on n'a pas besoin de la + #bindery[usine à gaz] NetWare diff --git a/temp-avg b/temp-avg new file mode 100755 index 00000000..29e7fd3b --- /dev/null +++ b/temp-avg @@ -0,0 +1,11 @@ +#!/bin/sh +# je pipe vers calculatrice pour enlever 30 °, ça donne plus de précision. Sam. (/1 fait truncate.) +echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp1 | tail -c 5 | head -c 2 )"/1-30"|bc +echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp2 | tail -c 5 | head -c 2 )"/1-30"|bc +#cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp1 | sed -e 's/.*60.0 50.0 //' | sed -e's/\0//' -e 's/\.//' +#cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp2 | sed -e 's/.*57.0 50.0 //' | sed -e's/\0//' -e 's/\.//' +#echo 10 +#echo 10 + +echo +echo "Température-30°" diff --git a/test-squid-taille-cache.pl b/test-squid-taille-cache.pl new file mode 100755 index 00000000..a380a899 --- /dev/null +++ b/test-squid-taille-cache.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +$squidCacheDir = "/var/squid"; +$squidCacheDirMaxSize = 1700000; + +open(STDIN, "du -s $squidCacheDir |"); + +$line = ; +chop($line); + +#$line est sous la forme 12345678 $squidCacheDir + +if ($line =~ /([\d]+)/){ + if ($1 > $squidCacheDirMaxSize){ + + system("echo \"testSquid.pl relance squid \" >> /var/log/messages"); + + # ajoute par Aymeric pour essayer de comprendre ce qui se passe + system("df -k /var/squid >> /var/log/messages"); + + system("squid-new >/dev/null 2&>/dev/null &"); + # J'ai rajouté un sujet pour filtrage par procmail OS :-) + system("echo \"[TEST] j'ai du relancer le squid qui +bouffait trop d'espace\"| mail -s \"testSquid\" root "); + } +} diff --git a/verifie_ipforward b/verifie_ipforward new file mode 100755 index 00000000..6bf86f0c --- /dev/null +++ b/verifie_ipforward @@ -0,0 +1,7 @@ +#!/bin/sh +# fait le 11/12/99 par Jerome KIEFFER +#retablie l'ipforwarding entre les interfaces de zamok si c'est descactive. +if [ `cat /proc/sys/net/ipv4/ip_forward` -eq `expr 0` ] +then + echo 1 >/proc/sys/net/ipv4/ip_forward +fi \ No newline at end of file diff --git a/watchdog b/watchdog new file mode 100755 index 00000000..a0ca2675 --- /dev/null +++ b/watchdog @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# oui emacs c'est bien du -*- python -*- + + +# c'est fait pour le "software watchdog".... + +from time import sleep + +fd = open("/dev/watchdog","w+") +while 1: + fd.write('z') + sleep(15) +