* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
- * $Id: irc.c,v 1.89 2002/03/25 17:04:02 alex Exp $
+ * $Id: irc.c,v 1.94 2002/07/25 11:37:01 alex Exp $
*
* irc.c: IRC-Befehle
*/
#include <string.h>
#include "ngircd.h"
-#include "channel.h"
+#include "conn.h"
#include "client.h"
+#include "channel.h"
+#include "resolve.h"
#include "conf.h"
#include "conn.h"
#include "irc-write.h"
#include "log.h"
#include "messages.h"
+#include "parse.h"
#include "tool.h"
#include "exp.h"
#include "irc.h"
-GLOBAL BOOLEAN IRC_MOTD( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_MOTD( CLIENT *Client, REQUEST *Req )
{
assert( Client != NULL );
assert( Req != NULL );
} /* IRC_MOTD */
-GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_PRIVMSG( CLIENT *Client, REQUEST *Req )
{
CLIENT *cl, *from;
CHANNEL *chan;
cl = Client_Search( Req->argv[0] );
if( cl )
{
+ /* Okay, Ziel ist ein Client. Aber ist es auch ein User? */
+ if( Client_Type( cl ) != CLIENT_USER ) return IRC_WriteStrClient( from, ERR_NOSUCHNICK_MSG, Client_ID( from ), Req->argv[0] );
+
/* Okay, Ziel ist ein User */
if(( Client_Type( Client ) != CLIENT_SERVER ) && ( strchr( Client_Modes( cl ), 'a' )))
{
} /* IRC_PRIVMSG */
-GLOBAL BOOLEAN IRC_NOTICE( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_NOTICE( CLIENT *Client, REQUEST *Req )
{
CLIENT *to, *from;
if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix );
to = Client_Search( Req->argv[0] );
- if( to )
+ if(( to ) && ( Client_Type( to ) == CLIENT_USER ))
{
/* Okay, Ziel ist ein User */
return IRC_WriteStrClientPrefix( to, from, "NOTICE %s :%s", Client_ID( to ), Req->argv[1] );
} /* IRC_NOTICE */
-GLOBAL BOOLEAN IRC_NAMES( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_NAMES( CLIENT *Client, REQUEST *Req )
{
CHAR rpl[COMMAND_LEN], *ptr;
CLIENT *target, *from, *c;
} /* IRC_NAMES */
-GLOBAL BOOLEAN IRC_ISON( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_ISON( CLIENT *Client, REQUEST *Req )
{
CHAR rpl[COMMAND_LEN];
CLIENT *c;
} /* IRC_ISON */
-GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_WHOIS( CLIENT *Client, REQUEST *Req )
{
CLIENT *from, *target, *c;
CHAR str[LINE_LEN + 1], *ptr = NULL;
} /* IRC_WHOIS */
-GLOBAL BOOLEAN IRC_WHO( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_WHO( CLIENT *Client, REQUEST *Req )
{
BOOLEAN ok, only_ops;
CHAR flags[8], *ptr;
} /* IRC_WHO */
-GLOBAL BOOLEAN IRC_USERHOST( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_USERHOST( CLIENT *Client, REQUEST *Req )
{
CHAR rpl[COMMAND_LEN];
CLIENT *c;
} /* IRC_USERHOST */
-GLOBAL BOOLEAN IRC_ERROR( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_ERROR( CLIENT *Client, REQUEST *Req )
{
assert( Client != NULL );
assert( Req != NULL );
} /* IRC_ERROR */
-GLOBAL BOOLEAN IRC_LUSERS( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_LUSERS( CLIENT *Client, REQUEST *Req )
{
CLIENT *target, *from;
} /* IRC_LUSERS */
-GLOBAL BOOLEAN IRC_LINKS( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_LINKS( CLIENT *Client, REQUEST *Req )
{
CLIENT *target, *from, *c;
CHAR *mask;
} /* IRC_LINKS */
-GLOBAL BOOLEAN IRC_VERSION( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_VERSION( CLIENT *Client, REQUEST *Req )
{
CLIENT *target, *prefix;
}
/* mit Versionsinfo antworten */
- return IRC_WriteStrClient( Client, RPL_VERSION_MSG, Client_ID( prefix ), NGIRCd_DebugLevel, Conf_ServerName, NGIRCd_VersionAddition( ));
+ return IRC_WriteStrClient( Client, RPL_VERSION_MSG, Client_ID( prefix ), PACKAGE, VERSION, NGIRCd_DebugLevel, Conf_ServerName, NGIRCd_VersionAddition( ));
} /* IRC_VERSION */
-GLOBAL BOOLEAN IRC_KILL( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_KILL( CLIENT *Client, REQUEST *Req )
{
CLIENT *prefix, *c;
/* haben wir selber einen solchen Client? */
c = Client_Search( Req->argv[0] );
- if( c && ( Client_Conn( c ) != NONE )) Conn_Close( Client_Conn( c ), NULL, Req->argv[1], TRUE );
-
+ if( c )
+ {
+ /* Ja, wir haben einen solchen Client */
+ if( Client_Conn( c ) != NONE ) Conn_Close( Client_Conn( c ), NULL, Req->argv[1], TRUE );
+ else Client_Destroy( c, NULL, Req->argv[1], TRUE );
+ }
+ else Log( LOG_NOTICE, "Client with nick \"%s\" is unknown here.", Req->argv[0] );
+
return CONNECTED;
} /* IRC_KILL */
-GLOBAL BOOLEAN IRC_Show_MOTD( CLIENT *Client )
+GLOBAL BOOLEAN
+IRC_Show_MOTD( CLIENT *Client )
{
BOOLEAN ok;
CHAR line[127];
} /* IRC_Show_MOTD */
-GLOBAL BOOLEAN IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan )
+GLOBAL BOOLEAN
+IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan )
{
BOOLEAN is_visible, is_member;
CHAR str[LINE_LEN + 1];
} /* IRC_Send_NAMES */
-GLOBAL BOOLEAN IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps )
+GLOBAL BOOLEAN
+IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps )
{
BOOLEAN is_visible, is_member;
CL2CHAN *cl2chan;
} /* IRC_Send_WHO */
-GLOBAL BOOLEAN IRC_Send_LUSERS( CLIENT *Client )
+GLOBAL BOOLEAN
+IRC_Send_LUSERS( CLIENT *Client )
{
INT cnt;