]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-login.c
- Kill_Nick() uses an "faked internal KILL" now.
[ngircd-alex.git] / src / ngircd / irc-login.c
index 8218d22b25de823f78db1cf8f85aff836717680f..c7ff831da06740d24e94733407f45e0727111d80 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: irc-login.c,v 1.27 2002/12/12 12:24:18 alex Exp $";
+static char UNUSED id[] = "$Id: irc-login.c,v 1.33 2003/01/08 22:28:12 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -24,13 +24,14 @@ static char UNUSED id[] = "$Id: irc-login.c,v 1.27 2002/12/12 12:24:18 alex Exp
 
 #include "ngircd.h"
 #include "resolve.h"
+#include "conn-func.h"
 #include "conf.h"
-#include "conn.h"
 #include "client.h"
 #include "channel.h"
 #include "log.h"
 #include "messages.h"
 #include "parse.h"
+#include "irc.h"
 #include "irc-info.h"
 #include "irc-write.h"
 
@@ -371,7 +372,7 @@ IRC_PING( CLIENT *Client, REQUEST *Req )
        {
                /* es wurde ein Ziel-Client angegeben */
                target = Client_Search( Req->argv[1] );
-               if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] );
+               if(( ! target ) || ( Client_Type( target ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] );
                if( target != Client_ThisServer( ))
                {
                        /* ok, forwarden */
@@ -403,7 +404,7 @@ IRC_PONG( CLIENT *Client, REQUEST *Req )
        if( Req->argc == 2 )
        {
                target = Client_Search( Req->argv[1] );
-               if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] );
+               if(( ! target ) || ( Client_Type( target ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] );
                if( target != Client_ThisServer( ))
                {
                        /* ok, forwarden */
@@ -448,6 +449,9 @@ Hello_User( CLIENT *Client )
        if( ! IRC_WriteStrClient( Client, RPL_CREATED_MSG, Client_ID( Client ), NGIRCd_StartStr )) return FALSE;
        if( ! IRC_WriteStrClient( Client, RPL_MYINFO_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )), VERSION, USERMODES, CHANMODES )) return FALSE;
 
+       /* Features */
+       if( ! IRC_WriteStrClient( Client, RPL_ISUPPORT_MSG, Client_ID( Client ), CLIENT_NICK_LEN - 1, CHANNEL_TOPIC_LEN - 1, CLIENT_AWAY_LEN - 1, Conf_MaxJoins )) return DISCONNECTED;
+
        Client_SetType( Client, CLIENT_USER );
 
        if( ! IRC_Send_LUSERS( Client )) return DISCONNECTED;
@@ -460,19 +464,18 @@ Hello_User( CLIENT *Client )
 LOCAL VOID
 Kill_Nick( CHAR *Nick, CHAR *Reason )
 {
-       CLIENT *c;
+       REQUEST r;
 
        assert( Nick != NULL );
        assert( Reason != NULL );
 
-       Log( LOG_ERR, "User(s) with nick \"%s\" will be disconnected: %s", Nick, Reason );
-
-       /* andere Server benachrichtigen */
-       IRC_WriteStrServers( NULL, "KILL %s :%s", Nick, Reason );
+       r.prefix = Client_ThisServer( );
+       r.argv[0] = Nick;
+       r.argv[1] = Reason;
+       r.argc = 2;
 
-       /* Ggf. einen eigenen Client toeten */
-       c = Client_Search( Nick );
-       if( c && ( Client_Conn( c ) != NONE )) Conn_Close( Client_Conn( c ), NULL, Reason, TRUE );
+       Log( LOG_ERR, "User(s) with nick \"%s\" will be disconnected: %s", Nick, Reason );
+       IRC_KILL( Client_ThisServer( ), &r );
 } /* Kill_Nick */