## python module definition import re debugModule = True def qnameListToStr( qname_list ): qname_list_decode = list() for l in qname_list: qname_list_decode.append( l.decode('utf-8') ) return ".".join( qname_list_decode ) def init_standard(id, env): log_info("aws-hostnames: init called, module id is %d port: %d script: %s verbosity: %s" % (id, env.cfg.port, env.cfg.python_script, env.cfg.verbosity)) # Build pattern for checking, pattern matches everything like # ip-[0-9]-[0-9]-[0-9]-[0-9].domain.name global pattern pattern = re.compile("^ip-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.") return True # Module def init(id, cfg): return True def deinit(id): log_info("aws-hostnames: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): log_info("module called with event %i" % event) haveAnswer = False if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): qstate.ext_state[id] = MODULE_WAIT_MODULE return True elif event == MODULE_EVENT_MODDONE: qname_str = qnameListToStr(qstate.qinfo.qname_list) log_info("python: MODDONE with rcode '%s' and priming '%s' and query '%s' of type '%s'" % ( qstate.return_rcode, qstate.is_priming, qname_str, qstate.qinfo.qtype_str ) ) if (qstate.return_rcode == 0) and (qstate.return_msg.rep.an_numrrsets == 0): if ( pattern.match(qname_str) and ( qstate.qinfo.qtype_str == "A" ) ): log_info("python: Found AWS Hostname") ip = ((qname_str[3:]).split(".", 1)[0]).replace("-", ".") log_info("python: Real Answer is '%s 86400 IN A %s'" % (qname_str, ip) ) msg = DNSMessage(qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) msg.answer.append("%s 86400 IN A %s" % ( qname_str, ip ) ) log_info(" name %s, type %s, class %s, flags %s, ttl %s, q %s, a %s, auth %s, add %s " % ( msg.rr_name, msg.rr_type, msg.rr_class, msg.query_flags, msg.default_ttl, msg.question, msg.answer, msg.authority, msg.additional ) ) qstate.ext_state[id] = MODULE_ERROR if not msg.set_return_msg(qstate): log_info("set_return_msg ERROR") return True qstate.return_msg.rep.security = 2 qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: Unknown event") qstate.ext_state[id] = MODULE_ERROR return True