mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	Actually KILL clients on GLINE/KLINE
Kill all clients that match a new GLINE/KLINE mask and genrate apropriate KILL commands. These KILL commands can be superfluous, but are required when the IRC Operator isn't allowd to set remote G-Lines or if there are older servers in the network that don't kill clients on GLINE/KLINE. Closes bug #156.
This commit is contained in:
		| @@ -28,12 +28,14 @@ | |||||||
| #include "conf.h" | #include "conf.h" | ||||||
| #include "channel.h" | #include "channel.h" | ||||||
| #include "class.h" | #include "class.h" | ||||||
|  | #include "parse.h" | ||||||
|  | #include "irc.h" | ||||||
| #include "irc-macros.h" | #include "irc-macros.h" | ||||||
| #include "irc-write.h" | #include "irc-write.h" | ||||||
|  | #include "lists.h" | ||||||
| #include "log.h" | #include "log.h" | ||||||
| #include "match.h" | #include "match.h" | ||||||
| #include "messages.h" | #include "messages.h" | ||||||
| #include "parse.h" |  | ||||||
| #include "op.h" | #include "op.h" | ||||||
|  |  | ||||||
| #include <exp.h> | #include <exp.h> | ||||||
| @@ -384,9 +386,10 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req ) | |||||||
| GLOBAL bool | GLOBAL bool | ||||||
| IRC_xLINE(CLIENT *Client, REQUEST *Req) | IRC_xLINE(CLIENT *Client, REQUEST *Req) | ||||||
| { | { | ||||||
| 	CLIENT *from; | 	CLIENT *from, *c, *c_next; | ||||||
|  | 	char reason[COMMAND_LEN], class_c; | ||||||
|  | 	struct list_head *list; | ||||||
| 	int class; | 	int class; | ||||||
| 	char class_c; |  | ||||||
|  |  | ||||||
| 	assert(Client != NULL); | 	assert(Client != NULL); | ||||||
| 	assert(Req != NULL); | 	assert(Req != NULL); | ||||||
| @@ -446,6 +449,20 @@ IRC_xLINE(CLIENT *Client, REQUEST *Req) | |||||||
| 						Req->argv[0], Req->argv[1], | 						Req->argv[0], Req->argv[1], | ||||||
| 						Req->argv[2]); | 						Req->argv[2]); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			/* Check currently connected clients */ | ||||||
|  | 			snprintf(reason, sizeof(reason), "%c-Line by \"%s\": \"%s\"", | ||||||
|  | 				 class_c, Client_ID(from), Req->argv[2]); | ||||||
|  | 			list = Class_GetList(class); | ||||||
|  | 			c = Client_First(); | ||||||
|  | 			while (c) { | ||||||
|  | 				c_next = Client_Next(c); | ||||||
|  | 				if ((class == CLASS_GLINE || Client_Conn(c) > NONE) | ||||||
|  | 				    && Lists_Check(list, c)) | ||||||
|  | 					IRC_KillClient(Client, NULL, | ||||||
|  | 						       Client_ID(c), reason); | ||||||
|  | 				c = c_next; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton