Exemple #1
0
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 "";
Exemple #2
0
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;
Exemple #3
0
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");
Exemple #4
0
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
Exemple #5
0
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()]
Exemple #6
0
	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);
Exemple #7
0
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
Exemple #8
0
def on_quit(bot,event):
	output("info", "Logout: %s" %(event.source()))
	if event.source() in lconfig["users"]:
		del lconfig["users"][event.source()]
Exemple #9
0
	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);
Exemple #10
0
	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