]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
Implemented hashed cloaked hostnames for +x
[ngircd-alex.git] / src / ngircd / client.c
index e203cdd0e79df243089066d09a80eedec5355a46..cefbd3a3464617506cd4c9d2eb00fd87258de0fb 100644 (file)
@@ -817,17 +817,24 @@ GLOBAL char *
 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) {
+               snprintf(Mask_Buffer, GETID_LEN, "%s%s", Client->host, Conf_CloakHostModeXSalt);
+               snprintf(Cloak_Buffer, GETID_LEN, Conf_CloakHostModeX, Hash(Mask_Buffer));
+       } else {
+               strncpy(Cloak_Buffer, Client_ID(Client->introducer), GETID_LEN);
+       }
 
        snprintf(Mask_Buffer, GETID_LEN, "%s!%s@%s",
-                Client->id, Client->user,
-                *Conf_CloakHostModeX ? Conf_CloakHostModeX
-                                     : Client_ID(Client->introducer));
+               Client->id, Client->user, Cloak_Buffer);
+
        return Mask_Buffer;
 } /* Client_MaskCloaked */