]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
SECURITY: Fixed a message handling bug which could crash the daemon.
[ngircd-alex.git] / src / ngircd / client.c
index ce97c1eeb797cdf7e3f190c8db4059dece02f44c..1b72adc8bb92a49db74855f611d94ed873545f80 100644 (file)
@@ -17,7 +17,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: client.c,v 1.94 2006/12/07 22:24:14 fw Exp $";
+static char UNUSED id[] = "$Id: client.c,v 1.98 2008/04/04 19:30:01 fw Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -55,6 +55,7 @@ static char GetID_Buffer[GETID_LEN];
 
 static WHOWAS My_Whowas[MAX_WHOWAS];
 static int Last_Whowas = -1;
+static long Max_Users, My_Max_Users;
 
 
 static unsigned long Count PARAMS(( CLIENT_TYPE Type ));
@@ -68,13 +69,6 @@ static CLIENT *Init_New_Client PARAMS((CONN_ID Idx, CLIENT *Introducer,
  CLIENT *TopServer, int Type, char *ID, char *User, char *Hostname,
  char *Info, int Hops, int Token, char *Modes, bool Idented));
 
-#ifndef Client_DestroyNow
-GLOBAL void Client_DestroyNow PARAMS((CLIENT *Client ));
-#endif
-
-
-long Max_Users = 0, My_Max_Users = 0;
-
 
 GLOBAL void
 Client_Init( void )
@@ -98,9 +92,10 @@ Client_Init( void )
        This_Server->hops = 0;
 
        gethostname( This_Server->host, CLIENT_HOST_LEN );
-       h = gethostbyname( This_Server->host );
-       if( h ) strlcpy( This_Server->host, h->h_name, sizeof( This_Server->host ));
-
+       if (!Conf_NoDNS) {
+               h = gethostbyname( This_Server->host );
+               if (h) strlcpy(This_Server->host, h->h_name, sizeof(This_Server->host));
+       }
        Client_SetID( This_Server, Conf_ServerName );
        Client_SetInfo( This_Server, Conf_ServerInfo );
 
@@ -336,35 +331,6 @@ Client_Destroy( CLIENT *Client, char *LogMsg, char *FwdMsg, bool SendQuit )
 } /* Client_Destroy */
 
 
-GLOBAL void
-Client_DestroyNow( CLIENT *Client )
-{
-       /* Destroy client structure immediately. This function is only
-        * intended for the connection layer to remove client structures
-        * of connections that can't be established! */
-
-       CLIENT *last, *c;
-
-       assert( Client != NULL );
-
-       last = NULL;
-       c = My_Clients;
-       while( c )
-       {
-               if( c == Client )
-               {
-                       /* Wir haben den Client gefunden: entfernen */
-                       if( last ) last->next = c->next;
-                       else My_Clients = (CLIENT *)c->next;
-                       free( c );
-                       break;
-               }
-               last = c;
-               c = (CLIENT *)c->next;
-       }
-} /* Client_DestroyNow */
-
-
 GLOBAL void
 Client_SetHostname( CLIENT *Client, char *Hostname )
 {
@@ -564,7 +530,7 @@ Client_ModeDel( CLIENT *Client, char Mode )
 
 
 GLOBAL CLIENT *
-Client_Search( char *Nick )
+Client_Search( const char *Nick )
 {
        /* return Client-Structure that has the corresponding Nick.
         * If none is found, return NULL.
@@ -641,7 +607,8 @@ Client_ID( CLIENT *Client )
        assert( Client != NULL );
 
 #ifdef DEBUG
-       if( Client->type == CLIENT_USER ) assert( strlen( Client->id ) < CLIENT_NICK_LEN );
+       if(Client->type == CLIENT_USER)
+               assert(strlen(Client->id) < Conf_MaxNickLength);
 #endif
                                                   
        if( Client->id[0] ) return Client->id;
@@ -984,7 +951,7 @@ Client_IsValidNick( const char *Nick )
 
        if( Nick[0] == '#' ) return false;
        if( strchr( goodchars, Nick[0] )) return false;
-       if( strlen( Nick ) >= CLIENT_NICK_LEN ) return false;
+       if( strlen( Nick ) >= Conf_MaxNickLength) return false;
 
        ptr = Nick;
        while( *ptr )