*m++ = userModeList[i].c;
}
*m = '\0';
-@@ -1517,8 +1518,10 @@
+@@ -1239,6 +1240,9 @@
+ return 0;
+ }
+
++ if (IsSetHost(sptr))
++ alreadyh = 1;
++
+ /*
+ * find flags already set for user
+ * why not just copy them?
+@@ -1517,8 +1521,9 @@
if (do_set_host) {
/* We clear the flag in the old mask, so that the +h will be sent */
/* Only do this if we're SETTING +h and it succeeded */
- if (set_hostmask(sptr, hostmask, password) && hostmask)
+ if (set_hostmask(sptr, hostmask, password) && hostmask) {
FlagClr(&setflags, FLAG_SETHOST);
-+ alreadyh = 1;
+ }
}
if (IsRegistered(sptr)) {
-@@ -1569,7 +1572,7 @@
+@@ -1569,7 +1574,7 @@
}
assert(UserStats.opers <= UserStats.clients + UserStats.unknowns);
assert(UserStats.inv_clients <= UserStats.clients + UserStats.unknowns);
}
return 0;
-@@ -1644,9 +1647,11 @@
+@@ -1644,9 +1649,11 @@
* @param[in] old Pre-change set of modes for \a sptr.
* @param[in] sendset One of ALL_UMODES, SEND_UMODES_BUT_OPER,
* SEND_UMODES, to select which changed user modes to send.
{
int i;
int flag;
-@@ -1689,12 +1694,15 @@
+@@ -1689,12 +1696,15 @@
}
/* Special case for SETHOST.. */
if (flag == FLAG_SETHOST) {
- if (!FlagHas(old, flag))
+
+ /* do not show +h if client already had it */
-+ if (cptr && MyUser(cptr) && alreadyh)
++ if (cptr && MyUser(cptr) && IsSetHost(cptr) && alreadyh)
+ continue;
+
+ /* If we're setting +h, add the parameter later,