]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Implement Client_HostnameCloaked() and Client_MaskCloaked()
authorAlexander Barton <alex@barton.de>
Tue, 17 Aug 2010 18:54:33 +0000 (20:54 +0200)
committerAlexander Barton <alex@barton.de>
Tue, 17 Aug 2010 18:54:33 +0000 (20:54 +0200)
These two functions return the cloaked hostname, if the client has
enabled hostname cloaking indicated by the -- still to implement --
user mode "x". See furter patches :-)

src/ngircd/client.c
src/ngircd/client.h

index a067ef72f6fda57488af438045cb8a0abc215e9f..dd4113e48e83c25641d90c3695cf9ff47942baa4 100644 (file)
@@ -660,6 +660,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 +773,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 )
 {
index bd000a564772f367ffb19a50b9722dc1277c8cd7..98a0d1a4e327011fa571154f9657c2143657a9f2 100644 (file)
@@ -93,12 +93,14 @@ GLOBAL int Client_Type PARAMS(( CLIENT *Client ));
 GLOBAL CONN_ID Client_Conn PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_ID PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Mask PARAMS(( CLIENT *Client ));
+GLOBAL char *Client_MaskCloaked PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Info PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_User PARAMS(( CLIENT *Client ));
 #ifdef PAM
 GLOBAL char *Client_OrigUser PARAMS(( CLIENT *Client ));
 #endif
 GLOBAL char *Client_Hostname PARAMS(( CLIENT *Client ));
+GLOBAL char *Client_HostnameCloaked PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Password PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Modes PARAMS(( CLIENT *Client ));
 GLOBAL char *Client_Flags PARAMS(( CLIENT *Client ));