commit 6fdd3479f126a866c022c39dcd424d6042de6875 from: Alexander Barton date: Tue Aug 17 18:54:33 2010 UTC Implement Client_HostnameCloaked() and Client_MaskCloaked() 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 :-) commit - 617640e0a358dc29c5e4f82eb6b828030ef21670 commit + 6fdd3479f126a866c022c39dcd424d6042de6875 blob - a067ef72f6fda57488af438045cb8a0abc215e9f blob + dd4113e48e83c25641d90c3695cf9ff47942baa4 --- src/ngircd/client.c +++ src/ngircd/client.c @@ -660,7 +660,24 @@ 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 ) { assert( Client != NULL ); @@ -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 ) { blob - bd000a564772f367ffb19a50b9722dc1277c8cd7 blob + 98a0d1a4e327011fa571154f9657c2143657a9f2 --- src/ngircd/client.h +++ src/ngircd/client.h @@ -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 ));