- if (Client_Conn(c) > NONE && (Client_OperByMe(from) || from == c) &&
- !IRC_WriteStrClient(from, RPL_WHOISHOST_MSG, Client_ID(from),
- Client_ID(c), Client_Hostname(c),
- Conn_GetIPAInfo(Client_Conn(c))))
- return DISCONNECTED;
+ /* Local client and requester is the user itself or an IRC Op? */
+ if (Client_Conn(c) > NONE &&
+ (from == c || (!Conf_MorePrivacy && Client_HasMode(from, 'o')))) {
+ /* Client hostname */
+ if (!IRC_WriteStrClient(from, RPL_WHOISHOST_MSG,
+ Client_ID(from), Client_ID(c), Client_Hostname(c),
+ Conn_GetIPAInfo(Client_Conn(c))))
+ return DISCONNECTED;
+ /* Client modes */
+ if (!IRC_WriteStrClient(from, RPL_WHOISMODES_MSG,
+ Client_ID(from), Client_ID(c), Client_Modes(c)))
+ return DISCONNECTED;
+ }