fixed FAKEIDENT handling
[ircu2.10.12-pk.git] / ircd / s_user.c
index d2342620e8f812fedd5b96dfbd12ef9d929e85de..ccaed506618724d3ff44afd914968b5f4128c30b 100644 (file)
@@ -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,8 +972,14 @@ 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)
+hide_hostmask(struct Client *cptr, unsigned int flag) {
+  return hide_ident_hostmask(cptr, flag, NULL);
+}
+
+int
+hide_ident_hostmask(struct Client *cptr, unsigned int flag, char *username)
 {
   struct Membership *chan;
   char buf[HOSTLEN];
@@ -1036,9 +1024,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(username) {
+    ircd_strncpy(cli_user(cptr)->username, username, 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