def cmd_login(bot, event, cmd): global lconfig; res = re.match("\s*login\s*(\w+)\s*(\w+)\s*", cmd); if res: #print "-%s- -%s-" %(res.group(1), res.group(2)); user = res.group(1); pw = res.group(2); found = 0; for c in bot.channels.values(): for u in c.users(): if u == irclib.nm_to_n(event.source()): found = 1; if not found: return "You're not in one of my channels. Access denied."; if (user in lconfig["reg_users"]) and ("passwd" in lconfig["reg_users"][user]) and (lconfig["reg_users"][user]["passwd"] == pw): if not event.source() in lconfig["users"]: lconfig["users"][event.source()] = {} lconfig["users"][event.source()]["username"] = user; lconfig["users"][event.source()]["level"] = lconfig["reg_users"][user]["level"]; output("info", "Login: \"%s\" as %s successfull" % (event.source(), user)); return "Login succesfull."; else: output("info", "Login: \"%s\" as %s failed" % (event.source(), user)); return "Login failed."; return "";
def process_msg(msg): res = re.match(r"([\w\-\_]+):(.*)", msg); if not res: output("info", "malformed msg: %s" % (msg)); return typ = res.group(1); pay = res.group(2); out = "%s:%s" % (typ,pay); items = lconfig["distribution"].split(" "); for item in items: res = re.match(r"(\*|(?:,*\w+)+):((,*(?:[-#!]{1,2}\w+))*|\*)", item); if res: categories = res.group(1).split(","); channels = res.group(2).split(","); if (typ in categories) or (categories[0]=="*"): if channels[0] == "*": dest_channels = bot.channels.values(); else: dest_channels = channels; for chan in dest_channels: #print chan if chan[0] == "-": bot.connection.privmsg(chan[1:], pay); else: bot.connection.privmsg(chan, out); break;
def process_head(parent, msg): res = re.match(r"(\w+):(.*)", msg); if res: key = res.group(1).strip(); value = res.group(2).strip(); if (key == "password") and value == lconfig["password"]: parent.allowed = True; else: output("info", "wrong password");
def query_ldap(base, scope, filter, retrieve_attributes,rdn=False): try: ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,0) l = ldap.initialize(lconfig["ldap"]["server"]) l.start_tls_s() l.simple_bind_s(lconfig["ldap"]["login"], lconfig["ldap"]["password"]) #print "Successfully bound to server.\n" except ldap.LDAPError, error_message: output("error", "LDAP Couldn't Connect. %s " % error_message); return None
def on_part(bot,event): found = 0; for c in bot.channels.values(): for u in c.users(): if u == irclib.nm_to_n(event.source()): found = found + 1; if found < 2: output("info", "Logout: %s" %(event.source())) if event.source() in lconfig["users"]: del lconfig["users"][event.source()]
def shutdown(self): if not self.running: return; self.stop = True; self.running = False; output("debug", "irccat: connection from %s closed." % str(self.rawsocket.getpeername())); self.socket6.shutdown(SHUT_RDWR); self.socket6.close(); if (self.socket6 != self.rawsocket): self.rawsocket.shutdown(SHUT_RDWR); self.rawsocket.close(); del self.socket6; del self.rawsocket; self.parent.clients.remove(self);
def on_welcome(bot,event): for k in lconfig["on_welcome_send"].keys(): output("info", "on_welcome_send \"%s\": %s" %(k,lconfig["on_welcome_send"][k])) bot.connection.send_raw(lconfig["on_welcome_send"][k]); pass
def on_quit(bot,event): output("info", "Logout: %s" %(event.source())) if event.source() in lconfig["users"]: del lconfig["users"][event.source()]
def run ( self ): ssl_available = False self.stop = False; self.socket_up = False; while not self.stop: while not self.stop and not self.socket_up: try: if has_ipv6: self.socket=socket(AF_INET6,SOCK_STREAM) else: self.socket=socket(AF_INET,SOCK_STREAM) self.socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) self.socket.bind(("",int(lconfig["port"]))) self.socket.listen(3); self.socket_up = True; except error, st: output("error", "ERROR ServerSocketInitialization %s %s" % (error, st)) self.socket_up = False; for i in range(5): if self.stop: break; time.sleep(1); if (not self.stop) and (lconfig["certfile"] != "") and (lconfig["keyfile"] != ""): try: import ssl ssl_available = True; except: output("info", "SSL module not available. Continue unencrypted..."); ssl_available = False; while not self.stop: try: clientsock, addr = self.socket.accept() except error, st: if not self.stop: output("error", "ERROR Serverloop %s %s" % (error, st)) break found = False; if lconfig["ips_allowed"].strip() == "*": found = True; else: for subnet in lconfig["ips_allowed"].split(): if ip_in_subnet(addr[0], subnet): found=True; break; if not found: output("info", "irccat: incoming connection from: %s - denied" % str(addr)); clientsock.close(); continue; output("debug", "irccat: incoming connection from: %s" % str(addr)); if ssl_available: try: secsock = ssl.wrap_socket(clientsock, server_side=True, certfile=lconfig["certfile"], keyfile=lconfig["keyfile"], ssl_version=ssl.PROTOCOL_TLSv1) except error, st: output("error", "ERROR %s %s" % (error, st)) clientsock.shutdown(SHUT_RDWR); clientsock.close() continue; cl = ClientLoop(self,clientsock,secsock);
result = []; timeout = 0; try: result_id = l.search(base, scope, filter, retrieve_attributes) while 1: result_type, result_data = l.result(result_id, timeout) if (result_data == []): break else: if result_type == ldap.RES_SEARCH_ENTRY: result_set.extend(result_data) if len(result_set) == 0: output("info", "LDAP: No Results.") if rdn: result = result_set; else: for entry in result_set: result.append(entry[1]); #for i in range(len(result_set)): # for entry in result_set[i]: #print entry[1]["uid"][0], "logged in" #print entry[1]["ircOrigin"][0], " <-" # result.append(entry[1]); except ldap.LDAPError, error_message: output("error", "LDAP Query error %s for %s %s %s" % (error_message,base,filter, retrieve_attributes) ) return None