Show underlying IPv4 in a remote whois.

This commit is contained in:
Jilles Tjoelker 2012-01-08 15:30:18 +01:00
parent 524a5b3ac7
commit ae52fe0ff7
3 changed files with 20 additions and 1 deletions

View file

@ -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

View file

@ -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,

View file

@ -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,