diff --git a/include/numeric.h b/include/numeric.h index d92894f1..8ec528cb 100644 --- a/include/numeric.h +++ b/include/numeric.h @@ -165,6 +165,7 @@ extern const char *form_str(int); #define RPL_NOTOPIC 331 #define RPL_TOPIC 332 #define RPL_TOPICWHOTIME 333 +#define RPL_WHOISTEXT 337 #define RPL_WHOISACTUALLY 338 #define RPL_INVITING 341 diff --git a/modules/m_whois.c b/modules/m_whois.c index f4fb8854..102a0836 100644 --- a/modules/m_whois.c +++ b/modules/m_whois.c @@ -43,6 +43,7 @@ #include "modules.h" #include "hook.h" #include "s_newconf.h" +#include "ipv4_from_ipv6.h" static void do_whois(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]); static void single_whois(struct Client *source_p, struct Client *target_p, int operspy); @@ -239,6 +240,9 @@ single_whois(struct Client *source_p, struct Client *target_p, int operspy) hook_data_client hdata; int visible; int extra_space = 0; +#ifdef RB_IPV6 + struct sockaddr_in ip4; +#endif if(target_p->user == NULL) { @@ -345,6 +349,20 @@ single_whois(struct Client *source_p, struct Client *target_p, int operspy) form_str(RPL_WHOISACTUALLY), target_p->name, target_p->sockhost); +#ifdef RB_IPV6 + if (target_p->localClient->ip.ss_family == AF_INET6 && + (show_ip(source_p, target_p) || + (source_p == target_p && !IsIPSpoof(target_p))) && + ipv4_from_ipv6((struct sockaddr_in6 *)&target_p->localClient->ip, &ip4)) + { + rb_inet_ntop_sock((struct sockaddr *)&ip4, + buf, sizeof buf); + sendto_one_numeric(source_p, RPL_WHOISTEXT, + "%s :Underlying IPv4 is %s", + target_p->name, buf); + } +#endif /* RB_IPV6 */ + sendto_one_numeric(source_p, RPL_WHOISIDLE, form_str(RPL_WHOISIDLE), target_p->name, rb_current_time() - target_p->localClient->last, diff --git a/src/messages.tab b/src/messages.tab index 72dff03f..0843292d 100644 --- a/src/messages.tab +++ b/src/messages.tab @@ -358,7 +358,7 @@ static const char * replies[] = { /* 334 */ NULL, /* 335 */ NULL, /* 336 */ NULL, -/* 337 */ NULL, +/* 337 RPL_WHOISTEXT, */ "%s :%s", /* 338 RPL_WHOISACTUALLY, */ "%s %s :actually using host", /* 339 */ NULL, /* 340 */ NULL,