log/log_server/redis_log.py (29 lines of code) (raw):

#!/opt/venvs/securedrop-log/bin/python3 import os import sys import redis def sanitize_line(untrusted_line): line = bytearray(untrusted_line) for i, c in enumerate(line): if c >= 0x20 and c <= 0x7E: pass else: line[i] = 0x2E return bytearray(line).decode("ascii") def log(rd, msg, vmname="remote"): redis_msg = f"{vmname}::{msg}" rd.rpush("syslogmsg", redis_msg) def main(): stdin = sys.stdin.buffer # python3 rd = redis.Redis() # the first line is always the remote vm name untrusted_line = stdin.readline() qrexec_remote = os.getenv("QREXEC_REMOTE_DOMAIN") if not qrexec_remote: print("ERROR: QREXEC_REMOTE_DOMAIN not set", file=sys.stderr) sys.exit(1) while True: untrusted_line = stdin.readline() if untrusted_line == b"": break log(rd, sanitize_line(untrusted_line.rstrip(b"\n")), qrexec_remote) if __name__ == "__main__": main()