]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
config: deprecate NoXX-Options
[ngircd-alex.git] / src / ngircd / client.c
index a067ef72f6fda57488af438045cb8a0abc215e9f..737c01841c7381ece36543ba7e203842118ac93a 100644 (file)
@@ -93,7 +93,7 @@ Client_Init( void )
        This_Server->hops = 0;
 
        gethostname( This_Server->host, CLIENT_HOST_LEN );
-       if (!Conf_NoDNS) {
+       if (Conf_DNS) {
                h = gethostbyname( This_Server->host );
                if (h) strlcpy(This_Server->host, h->h_name, sizeof(This_Server->host));
        }
@@ -363,7 +363,8 @@ Client_SetUser( CLIENT *Client, const char *User, bool Idented )
  * @param User User name to set.
  */
 GLOBAL void
-Client_SetOrigUser(CLIENT UNUSED *Client, const char UNUSED *User) {
+Client_SetOrigUser(CLIENT UNUSED *Client, const char UNUSED *User)
+{
        assert(Client != NULL);
        assert(User != NULL);
 
@@ -552,17 +553,19 @@ Client_Search( const char *Nick )
 } /* Client_Search */
 
 
+/**
+ * Get client structure ("introducer") identfied by a server token.
+ * @return CLIENT structure or NULL if none could be found.
+ */
 GLOBAL CLIENT *
 Client_GetFromToken( CLIENT *Client, int Token )
 {
-       /* Client-Struktur, die den entsprechenden Introducer (=Client)
-        * und das gegebene Token hat, liefern. Wird keine gefunden,
-        * so wird NULL geliefert. */
-
        CLIENT *c;
 
        assert( Client != NULL );
-       assert( Token > 0 );
+
+       if (!Token)
+               return NULL;
 
        c = My_Clients;
        while (c) {
@@ -660,6 +663,23 @@ Client_Hostname(CLIENT *Client)
 } /* Client_Hostname */
 
 
+/**
+ * Get potentially cloaked hostname of a client.
+ * If the client has not enabled cloaking, the real hostname is used.
+ * @param Client Pointer to client structure
+ * @return Pointer to client hostname
+ */
+GLOBAL char *
+Client_HostnameCloaked(CLIENT *Client)
+{
+       assert(Client != NULL);
+       if (Client_HasMode(Client, 'x'))
+               return Client_ID(Client->introducer);
+       else
+               return Client_Hostname(Client);
+} /* Client_HostnameCloaked */
+
+
 GLOBAL char *
 Client_Password( CLIENT *Client )
 {
@@ -756,6 +776,32 @@ Client_Mask( CLIENT *Client )
 } /* Client_Mask */
 
 
+/**
+ * Return ID of a client with cloaked hostname: "client!user@server-name"
+ * This client ID is used for IRC prefixes, for example.
+ * Please note that this function uses a global static buffer, so you can't
+ * nest invocations without overwriting erlier results!
+ * If the client has not enabled cloaking, the real hostname is used.
+ * @param Client Pointer to client structure
+ * @return Pointer to global buffer containing the client ID
+ */
+GLOBAL char *
+Client_MaskCloaked(CLIENT *Client)
+{
+       static char Mask_Buffer[GETID_LEN];
+
+       assert (Client != NULL);
+
+       /* Is the client using cloaking at all? */
+       if (!Client_HasMode(Client, 'x'))
+           return Client_Mask(Client);
+
+       snprintf(Mask_Buffer, GETID_LEN, "%s!%s@%s",
+                Client->id, Client->user, Client_ID(Client->introducer));
+       return Mask_Buffer;
+} /* Client_MaskCloaked */
+
+
 GLOBAL CLIENT *
 Client_Introducer( CLIENT *Client )
 {
@@ -1150,7 +1196,7 @@ Client_RegisterWhowas( CLIENT *Client )
                 sizeof( My_Whowas[slot].id ));
        strlcpy( My_Whowas[slot].user, Client_User( Client ),
                 sizeof( My_Whowas[slot].user ));
-       strlcpy( My_Whowas[slot].host, Client_Hostname( Client ),
+       strlcpy( My_Whowas[slot].host, Client_HostnameCloaked( Client ),
                 sizeof( My_Whowas[slot].host ));
        strlcpy( My_Whowas[slot].info, Client_Info( Client ),
                 sizeof( My_Whowas[slot].info ));
@@ -1231,4 +1277,26 @@ Destroy_UserOrService(CLIENT *Client, const char *Txt, const char *FwdMsg, bool
 } /* Destroy_UserOrService */
 
 
+#ifdef DEBUG
+
+GLOBAL void
+Client_DebugDump(void)
+{
+       CLIENT *c;
+
+       Log(LOG_DEBUG, "Client status:");
+       c = My_Clients;
+       while (c) {
+               Log(LOG_DEBUG,
+                   " - %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),
+                   Client_Flags(c));
+               c = (CLIENT *)c->next;
+       }
+} /* Client_DumpClients */
+
+#endif
+
+
 /* -eof- */