X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fs_user.c;h=98274901a99323a57bbc8225e07cf722aba4c71e;hb=3ff8f436014bfe342053877d3d063d181a753e3b;hp=d2342620e8f812fedd5b96dfbd12ef9d929e85de;hpb=6b37fbc287f702e217764647c702a245a467f916;p=ircu2.10.12-pk.git diff --git a/ircd/s_user.c b/ircd/s_user.c index d234262..9827490 100644 --- a/ircd/s_user.c +++ b/ircd/s_user.c @@ -734,24 +734,6 @@ int set_nick_name(struct Client* cptr, struct Client* sptr, return 0; } -/* Refreshs the users host to the current fakehost. If no fakehost - * is set, the account-host is created. If no Account is set, - * nothing is done. - * Returns 1 if the host changed and 0 if not. - */ -int apply_fakehost(struct Client *cptr) { - char buf[HOSTLEN]; - if(IsFakeHost(cptr)) { - ircd_strncpy(buf, cli_user(cptr)->fakehost, HOSTLEN); - } - else if (IsAccount(cptr)) { - ircd_snprintf(0, buf, HOSTLEN, "%s.%s", cli_user(cptr)->account, feature_str(FEAT_HIDDEN_HOST)); - } - if(strncmp(buf, cli_user(cptr)->host, HOSTLEN) == 0) return 0; - ircd_strncpy(cli_user(cptr)->host, buf, HOSTLEN); - return 1; -} - /** Calculate the hash value for a target. * @param[in] target Pointer to target, cast to unsigned int. * @return Hash value constructed from the pointer. @@ -990,6 +972,7 @@ void send_user_info(struct Client* sptr, char* names, int rpl, InfoFormatter fmt * @param[in] flag Some flag that affects host-hiding (FLAG_HIDDENHOST, FLAG_ACCOUNT, FLAG_FAKEHOST). * @return Zero. */ + int hide_hostmask(struct Client *cptr, unsigned int flag) { @@ -1004,6 +987,7 @@ hide_hostmask(struct Client *cptr, unsigned int flag) break; case FLAG_ACCOUNT: case FLAG_FAKEHOST: + case FLAG_FAKEIDENT: /* Invalidate all bans against the user so we check them again */ for (chan = (cli_user(cptr))->channel; chan; chan = chan->next_channel) @@ -1023,7 +1007,7 @@ hide_hostmask(struct Client *cptr, unsigned int flag) if(IsFakeHost(cptr)) ircd_strncpy(buf, cli_user(cptr)->fakehost, HOSTLEN); else if (IsAccount(cptr)) ircd_snprintf(0, buf, HOSTLEN, "%s.%s", cli_user(cptr)->account, feature_str(FEAT_HIDDEN_HOST)); else return 0; - if(strncmp(buf, cli_user(cptr)->host, HOSTLEN) == 0) return 0; + if(strncmp(buf, cli_user(cptr)->host, HOSTLEN) == 0 && (!IsFakeIdent(cptr) || strncmp(cli_user(cptr)->fakeuser, cli_user(cptr)->username, USERLEN) == 0)) return 0; /* Remove all "valid" marks on the bans. This forces them to be * rechecked if the ban is accessed again. @@ -1036,9 +1020,17 @@ hide_hostmask(struct Client *cptr, unsigned int flag) sendcmdto_common_channels_butone(cptr, CMD_QUIT, cptr, ":Registered"); ircd_strncpy(cli_user(cptr)->host, buf, HOSTLEN); - /* ok, the client is now fully hidden, so let them know -- hikari */ - if (MyConnect(cptr)) - send_reply(cptr, RPL_HOSTHIDDEN, cli_user(cptr)->host); + /* spoof also the username if username is passed */ + if(IsFakeIdent(cptr)) { + ircd_strncpy(cli_user(cptr)->username, cli_user(cptr)->fakeuser, USERLEN); + /* ok, the client is now fully hidden, so let them know -- hikari */ + if (MyConnect(cptr)) + send_reply(cptr, RPL_HOSTUSERHIDDEN, cli_user(cptr)->username, cli_user(cptr)->host); + } else { + /* ok, the client is now fully hidden, so let them know -- hikari */ + if (MyConnect(cptr)) + send_reply(cptr, RPL_HOSTHIDDEN, cli_user(cptr)->host); + } /* * Go through all channels the client was on, rejoin him