X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_fakehost.c;h=a73dd53aa19b61de48fc49dcc5b7fcb8c62c5f47;hb=b3bbea610a36c482ab63e9da97bf77d538be90a8;hp=7dd31fd0035b64e4d43811929b8f77035acc39a0;hpb=c3727b053aa20cecf3984cc0c9c23b0140edf52c;p=ircu2.10.12-pk.git diff --git a/ircd/m_fakehost.c b/ircd/m_fakehost.c index 7dd31fd..a73dd53 100644 --- a/ircd/m_fakehost.c +++ b/ircd/m_fakehost.c @@ -267,6 +267,47 @@ 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) && strcmp(cli_user(target)->fakehost, parv[3]) == 0 && strcmp(cli_user(target)->username, parv[2]) == 0) { + return 0; + } + + /* Set fakehost and propagate the changed host. */ + ircd_strncpy(cli_user(target)->fakehost, parv[3], HOSTLEN); + hide_ident_hostmask(target, FLAG_FAKEHOST, parv[2]); + + sendcmdto_serv_butone(sptr, CMD_FAKEHOST2, cptr, "%C %s %s", target, parv[2], parv[3]); + + return 0; +} + /* * ms_fakehost_old - old fakehost server message handler *