[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [oonib/master] Escape all strings before writing them to the log file.
commit f40f3c530e25d10eeef9bb3e9c36c6c8c23bfded
Author: Arturo Filastò <art@xxxxxxxxx>
Date: Wed Apr 23 16:29:00 2014 +0200
Escape all strings before writing them to the log file.
This fixes: https://github.com/TheTorProject/ooni-probe/issues/302 for the backend
---
oonib/log.py | 47 +++++++++++++++++++++++++++++++++++++++--------
1 file changed, 39 insertions(+), 8 deletions(-)
diff --git a/oonib/log.py b/oonib/log.py
index 8229446..7a6e4cb 100644
--- a/oonib/log.py
+++ b/oonib/log.py
@@ -6,8 +6,9 @@
Twisted logger for the ooni backend system.
"""
-import sys
import os
+import sys
+import codecs
import logging
import traceback
@@ -19,10 +20,33 @@ from twisted.python.logfile import DailyLogFile
from oonib import otime
from oonib.config import config
-## Get rid of the annoying "No route found for
-## IPv6 destination warnings":
+# Get rid of the annoying "No route found for
+# IPv6 destination warnings":
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
+
+def log_encode(logmsg):
+ """
+ I encode logmsg (a str or unicode) as printable ASCII. Each case
+ gets a distinct prefix, so that people differentiate a unicode
+ from a utf-8-encoded-byte-string or binary gunk that would
+ otherwise result in the same final output.
+ """
+ if isinstance(logmsg, unicode):
+ return codecs.encode(logmsg, 'unicode_escape')
+ elif isinstance(logmsg, str):
+ try:
+ unicodelogmsg = logmsg.decode('utf-8')
+ except UnicodeDecodeError:
+ return codecs.encode(logmsg, 'string_escape')
+ else:
+ return codecs.encode(unicodelogmsg, 'unicode_escape')
+ else:
+ raise Exception("I accept only a unicode object or a string, "
+ "not a %s object like %r" % (type(logmsg),
+ repr(logmsg)))
+
+
class LogWithNoPrefix(txlog.FileLogObserver):
def emit(self, eventDict):
text = txlog.textFromEventDict(eventDict)
@@ -32,6 +56,7 @@ class LogWithNoPrefix(txlog.FileLogObserver):
util.untilConcludes(self.write, "%s\n" % text)
util.untilConcludes(self.flush) # Hoorj!
+
def start(application_name="oonib"):
daily_logfile = None
@@ -52,21 +77,27 @@ def start(application_name="oonib"):
txlog.startLoggingWithObserver(LogWithNoPrefix(sys.stdout).emit)
txlog.addObserver(txlog.FileLogObserver(daily_logfile).emit)
+
def stop():
print "Stopping OONI"
+
def msg(msg, *arg, **kw):
- print "%s" % msg
+ print "%s" % log_encode(msg)
+
def debug(msg, *arg, **kw):
if config.main.debug:
- print "[D] %s" % msg
+ print "[D] %s" % log_encode(msg)
+
def warn(msg, *arg, **kw):
- print "[W] %s" % msg
+ print "[W] %s" % log_encode(msg)
+
def err(msg, *arg, **kw):
- print "[!] %s" % msg
+ print "[!] %s" % log_encode(msg)
+
def exception(error):
"""
@@ -79,6 +110,7 @@ def exception(error):
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback)
+
class LoggerFactory(object):
"""
This is a logger factory to be used by oonib
@@ -91,4 +123,3 @@ class LoggerFactory(object):
def stop(self):
txlog.msg("Stopping OONIB")
-
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits