Merge charybdis Cloaking Module

Fix extensions/ip_cloaking not correctly telling the net about your changed hostname (from dwfreed/charybdis).
This commit is contained in:
Joah 2012-10-11 23:17:09 -03:00
parent 465f81c3fc
commit abd9b88621
1 changed files with 23 additions and 18 deletions

View File

@ -1,3 +1,9 @@
/*
* Charybdis: an advanced ircd
* ip_cloaking.c: provide user hostname cloaking
*
* Written originally by nenolod, altered to use FNV by Elizabeth in 2008
*/
#include "stdinc.h"
#include "modules.h"
@ -11,9 +17,6 @@
#include "s_serv.h"
#include "numeric.h"
/* if you're modifying this module, you'll probably to change this */
#define KEY 0x13748cfa
static int
_modinit(void)
{
@ -44,25 +47,28 @@ DECLARE_MODULE_AV1(ip_cloaking, _modinit, _moddeinit, NULL, NULL,
ip_cloaking_hfnlist, "$Revision: 3526 $");
static void
distribute_hostchange(struct Client *client)
distribute_hostchange(struct Client *client_p, char *newhost)
{
if (irccmp(client->host, client->orighost))
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :is now your hidden host",
client->host);
if (newhost != client_p->orighost)
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
newhost);
else
sendto_one_numeric(client, RPL_HOSTHIDDEN, "%s :hostname reset",
client->host);
sendto_one_numeric(client_p, RPL_HOSTHIDDEN, "%s :hostname reset",
newhost);
sendto_server(NULL, NULL,
CAP_EUID | CAP_TS6, NOCAPS, ":%s CHGHOST %s :%s",
use_id(&me), use_id(client), client->host);
use_id(&me), use_id(client_p), newhost);
sendto_server(NULL, NULL,
CAP_TS6, CAP_EUID, ":%s ENCAP * CHGHOST %s :%s",
use_id(&me), use_id(client), client->host);
if (irccmp(client->host, client->orighost))
SetDynSpoof(client);
use_id(&me), use_id(client_p), newhost);
change_nick_user_host(client_p, client_p->name, client_p->username, newhost, 0, "Changing host");
if (newhost != client_p->orighost)
SetDynSpoof(client_p);
else
ClearDynSpoof(client);
ClearDynSpoof(client_p);
}
static void
@ -176,8 +182,7 @@ check_umode_change(void *vdata)
}
if (strcmp(source_p->host, source_p->localClient->mangledhost))
{
rb_strlcpy(source_p->host, source_p->localClient->mangledhost, HOSTLEN + 1);
distribute_hostchange(source_p);
distribute_hostchange(source_p, source_p->localClient->mangledhost);
}
else /* not really nice, but we need to send this numeric here */
sendto_one_numeric(source_p, RPL_HOSTHIDDEN, "%s :is now your hidden host",
@ -188,8 +193,7 @@ check_umode_change(void *vdata)
if (source_p->localClient->mangledhost != NULL &&
!strcmp(source_p->host, source_p->localClient->mangledhost))
{
rb_strlcpy(source_p->host, source_p->orighost, HOSTLEN + 1);
distribute_hostchange(source_p);
distribute_hostchange(source_p, source_p->orighost);
}
}
}
@ -218,3 +222,4 @@ check_new_user(void *vdata)
SetDynSpoof(source_p);
}
}