X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fm_fakehost.c;h=793be4158cd7e376f49827498348c6236723329e;hp=7dd31fd0035b64e4d43811929b8f77035acc39a0;hb=e894de73de8e7846934ecdf4d7cc3a14d5635ce6;hpb=c3727b053aa20cecf3984cc0c9c23b0140edf52c diff --git a/ircd/m_fakehost.c b/ircd/m_fakehost.c index 7dd31fd..793be41 100644 --- a/ircd/m_fakehost.c +++ b/ircd/m_fakehost.c @@ -91,8 +91,8 @@ #include "s_bsd.h" #include "s_conf.h" #include "s_user.h" +#include "s_debug.h" #include "send.h" - /* * m_fakehost - fakehost user message handler * @@ -113,7 +113,7 @@ int i; /* Assign and propagate the fakehost */ ircd_strncpy(cli_user(cptr)->fakehost, parv[1], HOSTLEN); - hide_hostmask(cptr, FLAG_FAKEHOST); + hide_hostmask(cptr, HIDE_HOSTMASK_FLAG_FAKEHOST); /*for(i = HighestFd; i >= 0; i--) { if((another = LocalClientArray[i]) && IsServer(another)) { @@ -137,7 +137,7 @@ int i; /* Assign and propagate the fakehost */ ircd_strncpy(cli_user(acptr)->fakehost, parv[2], HOSTLEN); - hide_hostmask(acptr, FLAG_FAKEHOST); + hide_hostmask(acptr, HIDE_HOSTMASK_FLAG_FAKEHOST); /* for(i = HighestFd; i >= 0; i--) { if((another = LocalClientArray[i]) && IsServer(another)) { @@ -252,7 +252,7 @@ int ms_fakehost(struct Client *cptr, struct Client *sptr, int parc, char *parv[] /* Set fakehost and propagate the changed host. */ ircd_strncpy(cli_user(target)->fakehost, parv[2], HOSTLEN); - hide_hostmask(target, FLAG_FAKEHOST); + hide_hostmask(target, HIDE_HOSTMASK_FLAG_FAKEHOST); /* Borrowed from send_umode_out(). * I found no better way to do this. However, maybe someone has the time to check out @@ -267,12 +267,55 @@ int ms_fakehost(struct Client *cptr, struct Client *sptr, int parc, char *parv[] return 0; } +/* ms_fakehost2 - new fakehost server message handler (SRVX initialized) + * + * parv[0] = sender prefix + * parv[1] = target user numeric + * parv[2] = target user's new ident + * parv[3] = target user's new fake host + * parv[4] = FORCE (optional) + */ +/** Remote fakehost + * Allows servers to force a fakehost on remote users. + * + * The FAKEHOST request can be generated by EVERY server. It is forwarded to the server + * of the user which then sets the fakehost and broadcasts the new fakehost. + */ +int ms_fakehost2(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) { + struct Client *target, *acptr; + int i; + + if(parc < 4) { + return need_more_params(sptr, "FAKEHOST"); + } + + if(!(target = findNUser(parv[1]))) { + /* Silently ignore FAKEHOSTs for disconnected users. */ + return 0; + } + + /* Ignore the assignment if it changes nothing. */ + if(IsFakeHost(target) && IsFakeIdent(target) && strcmp(cli_user(target)->fakehost, parv[3]) == 0 && strcmp(cli_user(target)->fakeuser, parv[2]) == 0) { + return 0; + } + + /* Set fakehost and propagate the changed host. */ + ircd_strncpy(cli_user(target)->fakehost, parv[3], HOSTLEN); + ircd_strncpy(cli_user(target)->fakeuser, parv[2], USERLEN); + hide_hostmask(target, HIDE_HOSTMASK_FLAG_FAKEHOST | HIDE_HOSTMASK_FLAG_FAKEIDENT); + + sendcmdto_serv_butone(sptr, CMD_FAKEHOST2, cptr, "%C %s %s", target, cli_user(target)->fakeuser, cli_user(target)->fakehost); + + return 0; +} + /* * ms_fakehost_old - old fakehost server message handler * * parv[0] = sender prefix * parv[1] = target user numeric * parv[2] = target user's new fake host + * parv[3] = target user's new fake ident */ int ms_fakehost_old(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Client *target; @@ -291,7 +334,7 @@ int ms_fakehost_old(struct Client* cptr, struct Client* sptr, int parc, char* pa /* Assign and propagate the fakehost */ ircd_strncpy(cli_user(target)->fakehost, parv[2], HOSTLEN); - hide_hostmask(target, FLAG_FAKEHOST); + hide_hostmask(target, HIDE_HOSTMASK_FLAG_FAKEHOST); sendcmdto_serv_butone(sptr, CMD_FAKEHOST_OLD, cptr, "%C %s", target, cli_user(target)->fakehost);