repo: ngircd
action: commit
revision: 
path_from: 
revision_from: ff2c1efae8b8b1bf30013123bb17243dc682f7d3:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit ff2c1efae8b8b1bf30013123bb17243dc682f7d3
Author: Alexander Barton 
Date:   Fri Dec 5 11:57:28 2003 +0000

    Fixed abort() when inviting users to nonexistent channels.

diff --git a/src/ngircd/irc-op.c b/src/ngircd/irc-op.c
index bdb6d83056039370ed8c82eb68bbeef95294e221..
index ..648da5c3c24d051961f3b39555f6bd18ff94a5af 100644
--- a/src/ngircd/irc-op.c
+++ b/src/ngircd/irc-op.c
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2003 by Alexander Barton (alex@barton.de)
  *
  * 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
@@ -14,7 +14,7 @@

 #include "portab.h"

-static char UNUSED id[] = "$Id: irc-op.c,v 1.11 2002/12/12 12:24:18 alex Exp $";
+static char UNUSED id[] = "$Id: irc-op.c,v 1.12 2003/12/05 11:57:28 alex Exp $";

 #include "imp.h"
 #include 
@@ -69,14 +69,14 @@ IRC_INVITE( CLIENT *Client, REQUEST *Req )
 	assert( Client != NULL );
 	assert( Req != NULL );

-	/* Falsche Anzahl Parameter? */
+	/* Wrong number of parameters? */
 	if( Req->argc != 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );

 	if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix );
 	else from = Client;
 	if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix );

-	/* User suchen */
+	/* Search user */
 	target = Client_Search( Req->argv[0] );
 	if(( ! target ) || ( Client_Type( target ) != CLIENT_USER )) return IRC_WriteStrClient( from, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->argv[0] );

@@ -84,36 +84,38 @@ IRC_INVITE( CLIENT *Client, REQUEST *Req )

 	if( chan )
 	{
-		/* Der Channel existiert bereits; ist der User Mitglied? */
+		/* Channel exists. Is the user a valid member of the channel? */
 		if( ! Channel_IsMemberOf( chan, from )) return IRC_WriteStrClient( from, ERR_NOTONCHANNEL_MSG, Client_ID( Client ), Req->argv[1] );

-		/* Ist der Channel "invite-only"? */
+		/* Is the channel "invite-only"? */
 		if( strchr( Channel_Modes( chan ), 'i' ))
 		{
-			/* Ja. Der User muss Channel-Operator sein! */
+			/* Yes. The user must be channel operator! */
 			if( ! strchr( Channel_UserModes( chan, from ), 'o' )) return IRC_WriteStrClient( from, ERR_CHANOPRIVSNEEDED_MSG, Client_ID( from ), Channel_Name( chan ));
 			remember = TRUE;
 		}

-		/* Ist der Ziel-User bereits Mitglied? */
+		/* Is the target user already member of the channel? */
 		if( Channel_IsMemberOf( chan, target )) return IRC_WriteStrClient( from, ERR_USERONCHANNEL_MSG, Client_ID( from ), Req->argv[0], Req->argv[1] );
-	}

-	/* Wenn der User gebanned ist, so muss das Invite auch gespeichert werden */
-	if( Lists_CheckBanned( target, chan )) remember = TRUE;
+		/* If the target user is banned on that channel: remember invite */
+		if( Lists_CheckBanned( target, chan )) remember = TRUE;

-	Log( LOG_DEBUG, "User \"%s\" invites \"%s\" to \"%s\" ...", Client_Mask( from ), Req->argv[0], Req->argv[1] );
-	if( remember )
-	{
-		if( ! Lists_AddInvited( from, Client_Mask( target ), chan, TRUE )) return CONNECTED;
+		if( remember )
+		{
+			/* We must memember this invite */
+			if( ! Lists_AddInvited( from, Client_Mask( target ), chan, TRUE )) return CONNECTED;
+		}
 	}
+
+	Log( LOG_DEBUG, "User \"%s\" invites \"%s\" to \"%s\" ...", Client_Mask( from ), Req->argv[0], Req->argv[1] );

-	/* an Ziel-Client forwarden ... */
+	/* Inform target client */
 	IRC_WriteStrClientPrefix( target, from, "INVITE %s %s", Req->argv[0], Req->argv[1] );

 	if( Client_Conn( target ) > NONE )
 	{
-		/* lokaler Ziel-Client, Status-Code melden */
+		/* The target user is local, so we have to send the status code */
 		if( ! IRC_WriteStrClientPrefix( from, target, RPL_INVITING_MSG, Client_ID( from ), Req->argv[0], Req->argv[1] )) return DISCONNECTED;
 	}

-----END OF PAGE-----