/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2012 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
assert(Hostname != NULL);
if (strlen(Conf_CloakHost)) {
+ char cloak[GETID_LEN];
+
+ strlcpy(cloak, Hostname, GETID_LEN);
+ strlcat(cloak, Conf_CloakHostSalt, GETID_LEN);
+ snprintf(cloak, GETID_LEN, Conf_CloakHost, Hash(cloak));
+
LogDebug("Updating hostname of \"%s\": \"%s\" -> \"%s\"",
- Client_ID(Client), Client->host, Conf_CloakHost);
- strlcpy(Client->host, Conf_CloakHost, sizeof(Client->host));
+ Client_ID(Client), Client->host, cloak);
+ strlcpy(Client->host, cloak, sizeof(Client->host));
} else {
LogDebug("Updating hostname of \"%s\": \"%s\" -> \"%s\"",
Client_ID(Client), Client->host, Hostname);
Client_MaskCloaked(CLIENT *Client)
{
static char Mask_Buffer[GETID_LEN];
+ char Cloak_Buffer[GETID_LEN];
assert (Client != NULL);
/* Is the client using cloaking at all? */
if (!Client_HasMode(Client, 'x'))
- return Client_Mask(Client);
+ return Client_Mask(Client);
+
+ if(*Conf_CloakHostModeX) {
+ strlcpy(Cloak_Buffer, Client->host, GETID_LEN);
+ strlcat(Cloak_Buffer, Conf_CloakHostSalt, GETID_LEN);
+ snprintf(Cloak_Buffer, GETID_LEN, Conf_CloakHostModeX, Hash(Cloak_Buffer));
+ } else {
+ strncpy(Cloak_Buffer, Client_ID(Client->introducer), GETID_LEN);
+ }
snprintf(Mask_Buffer, GETID_LEN, "%s!%s@%s",
- Client->id, Client->user, Client_ID(Client->introducer));
+ Client->id, Client->user, Cloak_Buffer);
+
return Mask_Buffer;
} /* Client_MaskCloaked */
Client_SetType(Client, Type);
if (From) {
- if (Conf_IsService(Conf_GetServer(Client_Conn(From)),
+ if (Conf_NickIsService(Conf_GetServer(Client_Conn(From)),
Client_ID(Client)))
Client_SetType(Client, CLIENT_SERVICE);
LogDebug("%s \"%s\" (+%s) registered (via %s, on %s, %d hop%s).",