X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fm_fakehost.c;h=fa8ff3bef736c8e24ce6aa45af5eb127f0bfffb0;hp=7dd31fd0035b64e4d43811929b8f77035acc39a0;hb=21ced3d1658353412b92c551df8b095022449c82;hpb=888f14529bcb499e8acbcf090360b63e99bc555a diff --git a/ircd/m_fakehost.c b/ircd/m_fakehost.c index 7dd31fd..fa8ff3b 100644 --- a/ircd/m_fakehost.c +++ b/ircd/m_fakehost.c @@ -267,6 +267,48 @@ 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)->username, parv[2], USERLEN); + ircd_strncpy(cli_user(target)->fakehost, parv[3], HOSTLEN); + hide_hostmask(target, FLAG_FAKEHOST); + + 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 *