X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc.c;h=4ec0427f2ff3cb197d3effffdf751d9aace0763f;hb=6d81286b08b8fbea5827113b55c4ef8f5e193006;hp=716d52c0ee2259fdf94e2bba134f61e3a00c8f2b;hpb=c74083645a38a28dfb58a1091c0e7d4f522efb59;p=ngircd-alex.git diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 716d52c0..4ec0427f 100644 --- a/src/ngircd/irc.c +++ b/src/ngircd/irc.c @@ -9,7 +9,7 @@ * 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 */ @@ -25,20 +25,24 @@ #include #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 ); @@ -52,7 +56,8 @@ GLOBAL BOOLEAN IRC_MOTD( CLIENT *Client, REQUEST *Req ) } /* IRC_MOTD */ -GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) { CLIENT *cl, *from; CHANNEL *chan; @@ -74,6 +79,9 @@ GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) 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' ))) { @@ -93,7 +101,8 @@ GLOBAL BOOLEAN IRC_PRIVMSG( CLIENT *Client, REQUEST *Req ) } /* IRC_PRIVMSG */ -GLOBAL BOOLEAN IRC_NOTICE( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_NOTICE( CLIENT *Client, REQUEST *Req ) { CLIENT *to, *from; @@ -110,7 +119,7 @@ GLOBAL BOOLEAN IRC_NOTICE( CLIENT *Client, REQUEST *Req ) 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] ); @@ -119,7 +128,8 @@ GLOBAL BOOLEAN IRC_NOTICE( CLIENT *Client, REQUEST *Req ) } /* 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; @@ -214,7 +224,8 @@ GLOBAL BOOLEAN IRC_NAMES( CLIENT *Client, REQUEST *Req ) } /* IRC_NAMES */ -GLOBAL BOOLEAN IRC_ISON( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_ISON( CLIENT *Client, REQUEST *Req ) { CHAR rpl[COMMAND_LEN]; CLIENT *c; @@ -252,7 +263,8 @@ GLOBAL BOOLEAN IRC_ISON( CLIENT *Client, REQUEST *Req ) } /* 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; @@ -349,7 +361,8 @@ GLOBAL BOOLEAN IRC_WHOIS( CLIENT *Client, REQUEST *Req ) } /* 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; @@ -426,7 +439,8 @@ GLOBAL BOOLEAN IRC_WHO( CLIENT *Client, REQUEST *Req ) } /* IRC_WHO */ -GLOBAL BOOLEAN IRC_USERHOST( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_USERHOST( CLIENT *Client, REQUEST *Req ) { CHAR rpl[COMMAND_LEN]; CLIENT *c; @@ -467,7 +481,8 @@ GLOBAL BOOLEAN IRC_USERHOST( CLIENT *Client, REQUEST *Req ) } /* IRC_USERHOST */ -GLOBAL BOOLEAN IRC_ERROR( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_ERROR( CLIENT *Client, REQUEST *Req ) { assert( Client != NULL ); assert( Req != NULL ); @@ -479,7 +494,8 @@ GLOBAL BOOLEAN IRC_ERROR( CLIENT *Client, REQUEST *Req ) } /* IRC_ERROR */ -GLOBAL BOOLEAN IRC_LUSERS( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_LUSERS( CLIENT *Client, REQUEST *Req ) { CLIENT *target, *from; @@ -515,7 +531,8 @@ GLOBAL BOOLEAN IRC_LUSERS( CLIENT *Client, REQUEST *Req ) } /* IRC_LUSERS */ -GLOBAL BOOLEAN IRC_LINKS( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_LINKS( CLIENT *Client, REQUEST *Req ) { CLIENT *target, *from, *c; CHAR *mask; @@ -564,7 +581,8 @@ GLOBAL BOOLEAN IRC_LINKS( CLIENT *Client, REQUEST *Req ) } /* IRC_LINKS */ -GLOBAL BOOLEAN IRC_VERSION( CLIENT *Client, REQUEST *Req ) +GLOBAL BOOLEAN +IRC_VERSION( CLIENT *Client, REQUEST *Req ) { CLIENT *target, *prefix; @@ -594,11 +612,12 @@ GLOBAL BOOLEAN IRC_VERSION( CLIENT *Client, REQUEST *Req ) } /* 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; @@ -624,13 +643,20 @@ GLOBAL BOOLEAN IRC_KILL( CLIENT *Client, REQUEST *Req ) /* 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]; @@ -664,7 +690,8 @@ GLOBAL BOOLEAN IRC_Show_MOTD( CLIENT *Client ) } /* 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]; @@ -716,7 +743,8 @@ GLOBAL BOOLEAN IRC_Send_NAMES( CLIENT *Client, CHANNEL *Chan ) } /* 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; @@ -760,7 +788,8 @@ GLOBAL BOOLEAN IRC_Send_WHO( CLIENT *Client, CHANNEL *Chan, BOOLEAN OnlyOps ) } /* IRC_Send_WHO */ -GLOBAL BOOLEAN IRC_Send_LUSERS( CLIENT *Client ) +GLOBAL BOOLEAN +IRC_Send_LUSERS( CLIENT *Client ) { INT cnt;