mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	- fixed KILL: you can kill yourself now without crashing the server;
QUIT isn't send to other servers after the KILL any more.
This commit is contained in:
		| @@ -14,7 +14,7 @@ | |||||||
|  |  | ||||||
| #include "portab.h" | #include "portab.h" | ||||||
|  |  | ||||||
| static char UNUSED id[] = "$Id: irc.c,v 1.109 2002/12/26 17:14:48 alex Exp $"; | static char UNUSED id[] = "$Id: irc.c,v 1.110 2002/12/26 18:41:00 alex Exp $"; | ||||||
|  |  | ||||||
| #include "imp.h" | #include "imp.h" | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
| @@ -52,14 +52,15 @@ IRC_KILL( CLIENT *Client, REQUEST *Req ) | |||||||
| { | { | ||||||
| 	CLIENT *prefix, *c; | 	CLIENT *prefix, *c; | ||||||
| 	CHAR reason[COMMAND_LEN]; | 	CHAR reason[COMMAND_LEN]; | ||||||
|  | 	CONN_ID conn; | ||||||
|  |  | ||||||
| 	assert( Client != NULL ); | 	assert( Client != NULL ); | ||||||
| 	assert( Req != NULL ); | 	assert( Req != NULL ); | ||||||
|  |  | ||||||
| 	/* is the user an IRC operator? */ | 	/* Is the user an IRC operator? */ | ||||||
| 	if(( Client_Type( Client ) != CLIENT_SERVER ) && ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client )); | 	if(( Client_Type( Client ) != CLIENT_SERVER ) && ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client )); | ||||||
|  |  | ||||||
| 	/* Falsche Anzahl Parameter? */ | 	/* Bad number of parameters? */ | ||||||
| 	if(( Req->argc != 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); | 	if(( Req->argc != 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); | ||||||
|  |  | ||||||
| 	if( Req->prefix ) prefix = Client_Search( Req->prefix ); | 	if( Req->prefix ) prefix = Client_Search( Req->prefix ); | ||||||
| @@ -72,24 +73,27 @@ IRC_KILL( CLIENT *Client, REQUEST *Req ) | |||||||
|  |  | ||||||
| 	Log( LOG_NOTICE|LOG_snotice, "Got KILL command from \"%s\" for \"%s\": %s", Client_Mask( prefix ), Req->argv[0], Req->argv[1] ); | 	Log( LOG_NOTICE|LOG_snotice, "Got KILL command from \"%s\" for \"%s\": %s", Client_Mask( prefix ), Req->argv[0], Req->argv[1] ); | ||||||
|  |  | ||||||
| 	/* build reason string */ | 	/* Build reason string */ | ||||||
| 	if( Client_Type( Client ) == CLIENT_USER ) snprintf( reason, sizeof( reason ), "KILLed by %s: %s", Client_ID( Client ), Req->argv[1] ); | 	if( Client_Type( Client ) == CLIENT_USER ) snprintf( reason, sizeof( reason ), "KILLed by %s: %s", Client_ID( Client ), Req->argv[1] ); | ||||||
| 	else strlcpy( reason, Req->argv[1], sizeof( reason )); | 	else strlcpy( reason, Req->argv[1], sizeof( reason )); | ||||||
|  |  | ||||||
| 	/* andere Server benachrichtigen */ | 	/* Inform other servers */ | ||||||
| 	IRC_WriteStrServersPrefix( Client, prefix, "KILL %s :%s", Req->argv[0], reason ); | 	IRC_WriteStrServersPrefix( Client, prefix, "KILL %s :%s", Req->argv[0], reason ); | ||||||
|  |  | ||||||
| 	/* haben wir selber einen solchen Client? */ | 	/* Do we host such a client? */ | ||||||
| 	c = Client_Search( Req->argv[0] ); | 	c = Client_Search( Req->argv[0] ); | ||||||
| 	if( c ) | 	if( c ) | ||||||
| 	{ | 	{ | ||||||
| 		/* Ja, wir haben einen solchen Client */ | 		/* Ja, wir haben einen solchen Client */ | ||||||
| 		if( Client_Conn( c ) != NONE ) Conn_Close( Client_Conn( c ), NULL, reason, TRUE ); | 		conn = Client_Conn( c ); | ||||||
| 		else Client_Destroy( c, NULL, reason, TRUE ); | 		Client_Destroy( c, NULL, reason, FALSE ); | ||||||
|  | 		if( conn != NONE ) Conn_Close( Client_Conn( c ), NULL, reason, TRUE ); | ||||||
| 	} | 	} | ||||||
| 	else Log( LOG_NOTICE, "Client with nick \"%s\" is unknown here.", Req->argv[0] ); | 	else Log( LOG_NOTICE, "Client with nick \"%s\" is unknown here.", Req->argv[0] ); | ||||||
|  |  | ||||||
| 	return CONNECTED; | 	/* Are we still connected or were we killed, too? */ | ||||||
|  | 	if( Client_Search( Req->argv[0] )) return CONNECTED; | ||||||
|  | 	else return DISCONNECTED; | ||||||
| } /* IRC_KILL */ | } /* IRC_KILL */ | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton