]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
ngIRCd Release 27
[ngircd-alex.git] / src / ngircd / client.c
index 07d448fdbaf9a84873f32e22584636251e2d3fd5..70ac28f07904bc82f97391a9db675d48505dae85 100644 (file)
@@ -72,7 +72,7 @@ GLOBAL void
 Client_Init( void )
 {
        struct hostent *h;
-       
+
        This_Server = New_Client_Struct( );
        if( ! This_Server )
        {
@@ -98,7 +98,7 @@ Client_Init( void )
        Client_SetInfo( This_Server, Conf_ServerInfo );
 
        My_Clients = This_Server;
-       
+
        memset( &My_Whowas, 0, sizeof( My_Whowas ));
 } /* Client_Init */
 
@@ -111,7 +111,7 @@ Client_Exit( void )
 
        if( NGIRCd_SignalRestart ) Client_Destroy( This_Server, "Server going down (restarting).", NULL, false );
        else Client_Destroy( This_Server, "Server going down.", NULL, false );
-       
+
        cnt = 0;
        c = My_Clients;
        while(c) {
@@ -213,7 +213,7 @@ Init_New_Client(CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer,
                Generate_MyToken(client);
 
        if (Client_HasMode(client, 'a'))
-               client->away = strndup(DEFAULT_AWAY_MSG, CLIENT_AWAY_LEN - 1);
+               client->away = strdup(DEFAULT_AWAY_MSG);
 
        client->next = (POINTER *)My_Clients;
        My_Clients = client;
@@ -228,7 +228,7 @@ GLOBAL void
 Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool SendQuit )
 {
        /* remove a client */
-       
+
        CLIENT *last, *c;
        char msg[COMMAND_LEN];
        const char *txt;
@@ -337,7 +337,11 @@ Client_SetHostname( CLIENT *Client, const char *Hostname )
        assert(Client != NULL);
        assert(Hostname != NULL);
 
-       if (Conf_CloakHost[0]) {
+       /* Only cloak the hostmask if it has not yet been cloaked.
+        * The period or colon indicates it's still an IP address.
+        * An empty string means a rDNS lookup did not happen (yet). */
+       if (Conf_CloakHost[0] && (!Client->host[0] || strchr(Client->host, '.')
+                                 || strchr(Client->host, ':'))) {
                char cloak[GETID_LEN];
 
                strlcpy(cloak, Hostname, GETID_LEN);
@@ -381,7 +385,7 @@ Client_SetID( CLIENT *Client, const char *ID )
 {
        assert( Client != NULL );
        assert( ID != NULL );
-       
+
        strlcpy( Client->id, ID, sizeof( Client->id ));
 
        if (Conf_CloakUserToNick) {
@@ -649,7 +653,7 @@ Client_SearchServer(const char *Mask)
 
 
 /**
- * Get client structure ("introducer") identfied by a server token.
+ * Get client structure ("introducer") identified by a server token.
  * @return CLIENT structure or NULL if none could be found.
  */
 GLOBAL CLIENT *
@@ -694,11 +698,9 @@ Client_ID( CLIENT *Client )
 {
        assert( Client != NULL );
 
-#ifdef DEBUG
        if(Client->type == CLIENT_USER)
                assert(strlen(Client->id) < Conf_MaxNickLength);
-#endif
-                                                  
+
        if( Client->id[0] ) return Client->id;
        else return "*";
 } /* Client_ID */
@@ -1311,12 +1313,14 @@ Client_Reject(CLIENT *Client, const char *Reason, bool InformClient)
 GLOBAL void
 Client_Introduce(CLIENT *From, CLIENT *Client, int Type)
 {
+       int server;
+
        /* Set client type (user or service) */
        Client_SetType(Client, Type);
 
        if (From) {
-               if (Conf_NickIsService(Conf_GetServer(Client_Conn(From)),
-                                  Client_ID(Client)))
+               server = Conf_GetServer(Client_Conn(From));
+               if (server > NONE && Conf_NickIsService(server, Client_ID(Client)))
                        Client_SetType(Client, CLIENT_SERVICE);
                LogDebug("%s \"%s\" (+%s) registered (via %s, on %s, %d hop%s).",
                         Client_TypeText(Client), Client_Mask(Client),
@@ -1374,7 +1378,7 @@ MyCount( CLIENT_TYPE Type )
 
 
 /**
- * Allocate and initialize new CLIENT strcuture.
+ * Allocate and initialize new CLIENT structure.
  *
  * @return Pointer to CLIENT structure or NULL on error.
  */
@@ -1493,9 +1497,7 @@ Client_RegisterWhowas( CLIENT *Client )
        slot = Last_Whowas + 1;
        if( slot >= MAX_WHOWAS || slot < 0 ) slot = 0;
 
-#ifdef DEBUG
-       Log( LOG_DEBUG, "Saving WHOWAS information to slot %d ...", slot );
-#endif
+       LogDebug( "Saving WHOWAS information to slot %d ...", slot );
 
        My_Whowas[slot].time = now;
        strlcpy( My_Whowas[slot].id, Client_ID( Client ),
@@ -1690,17 +1692,16 @@ Client_Announce(CLIENT * Client, CLIENT * Prefix, CLIENT * User)
 } /* Client_Announce */
 
 
-#ifdef DEBUG
 
 GLOBAL void
 Client_DebugDump(void)
 {
        CLIENT *c;
 
-       Log(LOG_DEBUG, "Client status:");
+       LogDebug("Client status:");
        c = My_Clients;
        while (c) {
-               Log(LOG_DEBUG,
+               LogDebug(
                    " - %s: type=%d, host=%s, user=%s, conn=%d, start=%ld, flags=%s",
                    Client_ID(c), Client_Type(c), Client_Hostname(c),
                    Client_User(c), Client_Conn(c), Client_StartTime(c),
@@ -1709,7 +1710,6 @@ Client_DebugDump(void)
        }
 } /* Client_DumpClients */
 
-#endif
 
 
 /* -eof- */