mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 05:52:59 +00:00 
			
		
		
		
	Implement IRC_xLINE(): handler for "GLINE" and "KLINE" commands
This commit is contained in:
		| @@ -27,6 +27,7 @@ | ||||
| #include "conn-func.h" | ||||
| #include "conf.h" | ||||
| #include "channel.h" | ||||
| #include "class.h" | ||||
| #include "irc-write.h" | ||||
| #include "log.h" | ||||
| #include "match.h" | ||||
| @@ -414,5 +415,75 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req ) | ||||
| 	return CONNECTED; | ||||
| } /* IRC_WALLOPS */ | ||||
|  | ||||
| /** | ||||
|  * Handle <?>LINE commands (GLINE, KLINE). | ||||
|  * | ||||
|  * @param Client The client from which this command has been received. | ||||
|  * @param Req Request structure with prefix and all parameters. | ||||
|  * @return CONNECTED or DISCONNECTED. | ||||
|  */ | ||||
| GLOBAL bool | ||||
| IRC_xLINE(CLIENT *Client, REQUEST *Req) | ||||
| { | ||||
| 	CLIENT *from; | ||||
| 	int class; | ||||
| 	char class_c; | ||||
|  | ||||
| 	assert(Client != NULL); | ||||
| 	assert(Req != NULL); | ||||
|  | ||||
| 	from = Op_Check(Client, Req); | ||||
| 	if (!from) | ||||
| 		return Op_NoPrivileges(Client, Req); | ||||
|  | ||||
| 	/* Bad number of parameters? */ | ||||
| 	if (Req->argc != 1 && Req->argc != 3) | ||||
| 		return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, | ||||
| 					  Client_ID(Client), Req->command); | ||||
|  | ||||
| 	switch(Req->command[0]) { | ||||
| 		case 'g': | ||||
| 		case 'G': | ||||
| 			class = CLASS_GLINE; class_c = 'G'; | ||||
| 			break; | ||||
| 		case 'k': | ||||
| 		case 'K': | ||||
| 			class = CLASS_KLINE; class_c = 'K'; | ||||
| 			break; | ||||
| 	} | ||||
|  | ||||
| 	if (Req->argc == 1) { | ||||
| 		/* Delete mask from list */ | ||||
| 		Class_DeleteMask(class, Req->argv[0]); | ||||
| 		Log(LOG_NOTICE|LOG_snotice, | ||||
| 		    "\"%s\" deleted \"%s\" from %c-Line list.", | ||||
| 		    Client_Mask(from), Req->argv[0], class_c); | ||||
| 		if (class == CLASS_GLINE) { | ||||
| 			/* Inform other servers */ | ||||
| 			IRC_WriteStrServersPrefix(Client, from, "%s %s", | ||||
| 						  Req->command, Req->argv[0]); | ||||
|  | ||||
| 		} | ||||
| 	} else { | ||||
| 		/* Add new mask to list */ | ||||
| 		if (Class_AddMask(class, Req->argv[0], | ||||
| 				  time(NULL) + atol(Req->argv[1]), | ||||
| 				  Req->argv[2])) { | ||||
| 			Log(LOG_NOTICE|LOG_snotice, | ||||
| 			    "\"%s\" added \"%s\" to %c-Line list: \"%s\" (%ld seconds).", | ||||
| 			    Client_Mask(from), Req->argv[0], class_c, | ||||
| 			    Req->argv[2], atol(Req->argv[1])); | ||||
| 			if (class == CLASS_GLINE) { | ||||
| 				/* Inform other servers */ | ||||
| 				IRC_WriteStrServersPrefix(Client, from, | ||||
| 						"%s %s %s :%s", Req->command, | ||||
| 						Req->argv[0], Req->argv[1], | ||||
| 						Req->argv[2]); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return CONNECTED; | ||||
| } | ||||
|  | ||||
| /* -eof- */ | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * ngIRCd -- The Next Generation IRC Daemon | ||||
|  * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) | ||||
|  * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
| @@ -25,6 +25,8 @@ GLOBAL bool IRC_CONNECT PARAMS((CLIENT *Client, REQUEST *Req )); | ||||
| GLOBAL bool IRC_DISCONNECT PARAMS((CLIENT *Client, REQUEST *Req )); | ||||
| GLOBAL bool IRC_WALLOPS PARAMS(( CLIENT *Client, REQUEST *Req )); | ||||
|  | ||||
| GLOBAL bool IRC_xLINE PARAMS((CLIENT *Client, REQUEST *Req)); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /* -eof- */ | ||||
|   | ||||
| @@ -63,6 +63,7 @@ static COMMAND My_Commands[] = | ||||
| 	{ "DIE", IRC_DIE, CLIENT_USER, 0, 0, 0 }, | ||||
| 	{ "DISCONNECT", IRC_DISCONNECT, CLIENT_USER, 0, 0, 0 }, | ||||
| 	{ "ERROR", IRC_ERROR, 0xFFFF, 0, 0, 0 }, | ||||
| 	{ "GLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "HELP", IRC_HELP, CLIENT_USER, 0, 0, 0 }, | ||||
| 	{ "INFO", IRC_INFO, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "INVITE", IRC_INVITE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| @@ -70,6 +71,7 @@ static COMMAND My_Commands[] = | ||||
| 	{ "JOIN", IRC_JOIN, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "KICK", IRC_KICK, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "KILL", IRC_KILL, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "KLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "LINKS", IRC_LINKS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "LIST", IRC_LIST, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
| 	{ "LUSERS", IRC_LUSERS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton