summaryrefslogtreecommitdiffstats
path: root/syslogd.py
diff options
context:
space:
mode:
Diffstat (limited to 'syslogd.py')
-rw-r--r--syslogd.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/syslogd.py b/syslogd.py
new file mode 100644
index 000000000..91fcc77f7
--- /dev/null
+++ b/syslogd.py
@@ -0,0 +1,51 @@
+# Simple syslog
+
+import sys, os
+from socket import *
+from select import select
+
+class Syslog:
+
+ def goSyslog(self, output, sockName):
+ sock = socket(AF_UNIX, SOCK_STREAM)
+
+ try:
+ os.unlink(sockName)
+ except os.error:
+ pass
+
+ sock.bind(sockName)
+ acceptedFds = []
+ sock.listen(5)
+
+ while (1):
+ list = acceptedFds + [ sock ]
+ list = select(list, [], [])[0]
+ try:
+ list.remove(sock)
+ (fd, remoteAddr) = sock.accept()
+ acceptedFds.append(fd)
+ except ValueError:
+ pass
+
+ for fd in list:
+ msg = fd.recv(50)
+ if (msg):
+ output.write(msg)
+ else:
+ acceptedFds.remove(fd)
+ fd.close()
+
+ def __del__(self):
+ self.kill()
+
+ def kill(self):
+ os.kill(self.child, 15)
+ os.waitpid(self.child, 0)
+
+ def __init__(self, root = "", output = sys.stdout, socket = "/dev/log"):
+ output = output
+ filename = root + socket;
+ self.child = os.fork()
+ if (not self.child):
+ self.goSyslog(output, filename)