Module: ngircd.git Branch: master Commit: bb8d207efa56b8dbdf366d980b848b0abd072a7d URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=bb8d2...
Author: Federico G. Schwindt fgsch@lodoss.net Date: Sun Aug 4 10:15:11 2013 +0100
Change cloaked hostname to be malloc'd on demand
This shaves a few bytes when cloaked hostnames are not used and restricts the cloakhost announcement iif there is something to send.
---
src/ngircd/client.c | 25 ++++++++++++++++--------- src/ngircd/client.h | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/src/ngircd/client.c b/src/ngircd/client.c index 7821d3b..d70cfb4 100644 --- a/src/ngircd/client.c +++ b/src/ngircd/client.c @@ -318,6 +318,8 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen } }
+ if (c->cloaked) + free(c->cloaked); free( c ); break; } @@ -744,8 +746,6 @@ Client_HostnameCloaked(CLIENT *Client) * Get (potentially cloaked) hostname of a client to display it to other users. * * If the client has not enabled cloaking, the real hostname is used. - * Please note that this function uses a global static buffer, so you can't - * nest invocations without overwriting earlier results! * * @param Client Pointer to client structure * @return Pointer to client hostname @@ -760,7 +760,7 @@ Client_HostnameDisplayed(CLIENT *Client) return Client_Hostname(Client);
/* Use an already saved cloaked hostname, if there is one */ - if (Client->cloaked[0]) + if (Client->cloaked) return Client->cloaked;
Client_UpdateCloakedHostname(Client, NULL, NULL); @@ -781,25 +781,32 @@ GLOBAL void Client_UpdateCloakedHostname(CLIENT *Client, CLIENT *Origin, const char *Hostname) { - static char Cloak_Buffer[CLIENT_HOST_LEN]; + char Cloak_Buffer[CLIENT_HOST_LEN];
assert(Client != NULL); if (!Origin) Origin = Client_ThisServer();
+ if (!Client->cloaked) { + Client->cloaked = malloc(CLIENT_HOST_LEN); + if (!Client->cloaked) + return; + } + if (!Hostname) { /* Generate new cloaked hostname */ if (*Conf_CloakHostModeX) { - strlcpy(Cloak_Buffer, Client->host, CLIENT_HOST_LEN); + strlcpy(Cloak_Buffer, Client->host, + sizeof(Cloak_Buffer)); strlcat(Cloak_Buffer, Conf_CloakHostSalt, - CLIENT_HOST_LEN); - snprintf(Client->cloaked, sizeof(Client->cloaked), + sizeof(Cloak_Buffer)); + snprintf(Client->cloaked, CLIENT_HOST_LEN, Conf_CloakHostModeX, Hash(Cloak_Buffer)); } else strlcpy(Client->cloaked, Client_ID(Client->introducer), - sizeof(Client->cloaked)); + CLIENT_HOST_LEN); } else - strlcpy(Client->cloaked, Hostname, sizeof(Client->cloaked)); + strlcpy(Client->cloaked, Hostname, CLIENT_HOST_LEN); LogDebug("Cloaked hostname of "%s" updated to "%s"", Client_ID(Client), Client->cloaked);
diff --git a/src/ngircd/client.h b/src/ngircd/client.h index 94ca4dc..6d5298f 100644 --- a/src/ngircd/client.h +++ b/src/ngircd/client.h @@ -48,7 +48,7 @@ typedef struct _CLIENT struct _CLIENT *introducer; /* ID of the servers which the client is connected to */ struct _CLIENT *topserver; /* toplevel servers (only valid if client is a server) */ char host[CLIENT_HOST_LEN]; /* hostname of the client */ - char cloaked[CLIENT_HOST_LEN]; /* cloaked hostname of the client */ + char *cloaked; /* cloaked hostname of the client */ char user[CLIENT_USER_LEN]; /* user name ("login") */ #if defined(PAM) && defined(IDENTAUTH) char orig_user[CLIENT_USER_LEN];/* user name supplied by USER command */
ngircd-commits@lists.barton.de