[arpwatch] ajout d'un serveur d'envoi
Celui-ci écoute au travers d'une socket unix. Il permet ainsi de garder une connexion ldap (et pg et cie) en permanence ouverte. Ce qui accélère le traitement des rapports de arpwatch. Pour utiliser ce server, report.py (ancien arpwatch_sendmail.py) tente de se connecter à cette socket et envoie le mail lui-même en cas d'échec. On rajoute également un initscript pour arpwatch_sendmail_server. Il n'est pas parfait et si vous aimez pas, feel free to edit.
This commit is contained in:
parent
37c5a6836e
commit
c068df708d
6 changed files with 226 additions and 68 deletions
75
surveillance/arpwatch/sendmail_server.py
Executable file
75
surveillance/arpwatch/sendmail_server.py
Executable file
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""Serveur sendmail d'arpwatch.
|
||||
Permet de ne charger qu'une fois le module report (et donc lc_ldap
|
||||
et cie)
|
||||
Ceci écoute sur une socket unix les rapports arpwatch (via report.py)
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
import SocketServer
|
||||
import sys, os, pwd, grp
|
||||
import common
|
||||
|
||||
class Handler(SocketServer.StreamRequestHandler):
|
||||
"""Gestion d'une requête"""
|
||||
def handle(self):
|
||||
self.server.reporter.report(self.request.recv(1024))
|
||||
|
||||
class MyServer(SocketServer.UnixStreamServer):
|
||||
"""Un server, avec une instance du module report"""
|
||||
reporter = None
|
||||
|
||||
def run():
|
||||
"""Serveur permanent"""
|
||||
import report
|
||||
|
||||
try:
|
||||
os.remove(common.SOCKET_FILE)
|
||||
print("Removed old socket", file=sys.stderr)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
# La socket ne doit pas être accessible pour tous: on garde adm
|
||||
os.umask(007)
|
||||
os.setgid(grp.getgrnam(common.GROUP).gr_gid)
|
||||
|
||||
serv = SocketServer.UnixStreamServer(common.SOCKET_FILE, Handler)
|
||||
serv.reporter = report
|
||||
|
||||
serv.serve_forever()
|
||||
|
||||
# fork en arrière plan + pidfile
|
||||
if __name__ == "__main__":
|
||||
# do the UNIX double-fork magic, see Stevens' "Advanced
|
||||
# Programming in the UNIX Environment" for details (ISBN 0201563177)
|
||||
try:
|
||||
pid = os.fork()
|
||||
if pid > 0:
|
||||
# exit first parent
|
||||
sys.exit(0)
|
||||
except OSError, e:
|
||||
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
|
||||
sys.exit(1)
|
||||
|
||||
# decouple from parent environment
|
||||
os.chdir("/") #don't prevent unmounting....
|
||||
os.setsid()
|
||||
os.umask(0)
|
||||
|
||||
# do second fork
|
||||
try:
|
||||
pid = os.fork()
|
||||
if pid > 0:
|
||||
# exit from second parent, print eventual PID before
|
||||
#print "Daemon PID %d" % pid
|
||||
open(common.PIDFILE, 'w').write("%d" % pid)
|
||||
sys.exit(0)
|
||||
except OSError, e:
|
||||
print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
|
||||
sys.exit(1)
|
||||
|
||||
# start the daemon main loop
|
||||
run()
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue