diff options
-rwxr-xr-x | rtr-origin/rtr-origin.py | 71 |
1 files changed, 48 insertions, 23 deletions
diff --git a/rtr-origin/rtr-origin.py b/rtr-origin/rtr-origin.py index 4af4199c..41d1cf0b 100755 --- a/rtr-origin/rtr-origin.py +++ b/rtr-origin/rtr-origin.py @@ -1260,6 +1260,53 @@ class kickme_channel(asyncore.dispatcher): asyncore.close_all() +def hostport_tag(): + """ + Construct hostname/address + port when we're running under a + protocol we understand well enough to do that. This is all + kludgery. Just grit your teeth, or perhaps just close your eyes. + """ + + proto = None + + if proto is None: + try: + host, port = socket.fromfd(0, socket.AF_INET, socket.SOCK_STREAM).getpeername() + proto = "tcp" + except: + pass + + if proto is None: + try: + host, port = socket.fromfd(0, socket.AF_INET6, socket.SOCK_STREAM).getpeername()[0:2] + proto = "tcp" + except: + pass + + if proto is None: + try: + host, port = os.environ["SSH_CONNECTION"].split()[0:2] + proto = "ssh" + except: + pass + + if proto is None: + try: + host, port = os.environ["REMOTE_HOST"], os.getenv("REMOTE_PORT") + proto = "ssl" + except: + pass + + if proto is None: + return "" + elif not port: + return "/%s/%s" % (proto, host) + elif ":" in host: + return "/%s/%s.%s" % (proto, host, port) + else: + return "/%s/%s:%s" % (proto, host, port) + + def kick_all(serial): """ Kick any existing server processes to wake them up. @@ -1692,29 +1739,7 @@ if mode is None: log_tag = "rtr-origin/" + mode if mode in ("server", "bgpdump_server"): - # - # Try to figure out peer address when we're in server mode. - def hostport_to_string(proto, hostport): - assert len(hostport) == 2 - if hostport[1] is None or hostport[1] == "": - return "/%s/%s" % (proto, hostport[0]) - elif ":" in hostport[0]: - return "/%s/%s.%s" % (proto, hostport[0], hostport[1]) - else: - return "/%s/%s:%s" % (proto, hostport[0], hostport[1]) - # - # First try raw TCP, TCP-MD5, TCP-AO - try: - log_tag += hostport_to_string("tcp", socket.fromfd(0, socket.AF_INET, socket.SOCK_STREAM).getpeername()) - except (socket.error, IndexError): - # - # Next try ssh (sshd sets environment) - if "SSH_CONNECTION" in os.environ: - log_tag += hostport_to_string("ssh", os.environ["SSH_CONNECTION"].split()[0:2]) - # - # Next try ssl (stunnel sets environment) - elif "REMOTE_HOST" in os.environ: - log_tag += hostport_to_string("ssl", (os.environ["REMOTE_HOST"], os.getenv("REMOTE_PORT"))) + log_tag += hostport_tag() if mode in ("cronjob", "server" , "bgpdump_server"): syslog.openlog(log_tag, syslog.LOG_PID, syslog.LOG_DAEMON) |