Browse Source

Resolve sender IP via DNS instead of hardcoded list.

Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>
Maximilian Wilhelm 10 years ago
parent
commit
de61b06b84
1 changed files with 15 additions and 16 deletions
  1. 15 16
      modules/ffpb.py

+ 15 - 16
modules/ffpb.py

@@ -9,6 +9,7 @@ import re
 import os
 import subprocess
 
+from dns import resolver,reversename
 import socket
 import SocketServer
 import threading
@@ -16,25 +17,11 @@ import threading
 msgserver = None
 peers_repo = None
 
-# TODO: move into config file :)
-# TODO for real: Use DNS!
-msgserver_known_senders = {
-	"127.0.0.1": "localhost",
-	"10.132.254.1": "gw01",
-	"10.132.254.2": "gw02",
-	"10.132.254.3": "gw03",
-	"10.132.254.4": "gw04",
-	"10.132.254.5": "gw05",
-	"10.132.254.80": "public",
-	"10.132.255.254" : "ops",
-}
 
 class MsgHandler(SocketServer.BaseRequestHandler):
 	def handle(self):
 		data = self.request.recv(2048).strip()
-		sender = self.client_address[0]
-		if sender in msgserver_known_senders:
-			sender = msgserver_known_senders[sender]
+		sender = self._resolve_name (self.client_address[0])
 
 		bot = self.server.bot
 		if bot is None:
@@ -47,6 +34,18 @@ class MsgHandler(SocketServer.BaseRequestHandler):
 
 		bot.msg(target, "[{0}] {1}".format(sender, str(data)))
 
+	def _resolve_name (self, ip):
+		if ip.startswith ("127."):
+			return "localhost"
+
+		try:
+			addr = reversename.from_address (ip)
+			return re.sub ("(.infra)?.ffpb.", "", str (resolver.query (addr, "PTR")[0]))
+		except dns.resolver.NXDOMAIN:
+			return ip
+
+
+
 class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
 	pass
 
@@ -176,7 +175,7 @@ def ffpb_ping(bot, trigger):
 		bot.say('Keine Antwort von "' + target_name + '" :-(')
 	else:
 		bot.say('Uh oh, irgendwas ist kaputt. Chef, ping result = ' + str(result) + ' - darf ich das essen?')
- 
+
 @willie.module.commands('exec-on-peer')
 def ffpb_remoteexec(bot, trigger):
 	"""Remote Execution fuer FFPB_Knoten"""