Show underlying IPv4 in a remote whois.
This commit is contained in:
parent
524a5b3ac7
commit
ae52fe0ff7
3 changed files with 20 additions and 1 deletions
|
@ -165,6 +165,7 @@ extern const char *form_str(int);
|
||||||
#define RPL_NOTOPIC 331
|
#define RPL_NOTOPIC 331
|
||||||
#define RPL_TOPIC 332
|
#define RPL_TOPIC 332
|
||||||
#define RPL_TOPICWHOTIME 333
|
#define RPL_TOPICWHOTIME 333
|
||||||
|
#define RPL_WHOISTEXT 337
|
||||||
#define RPL_WHOISACTUALLY 338
|
#define RPL_WHOISACTUALLY 338
|
||||||
|
|
||||||
#define RPL_INVITING 341
|
#define RPL_INVITING 341
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "modules.h"
|
#include "modules.h"
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
#include "s_newconf.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 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);
|
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;
|
hook_data_client hdata;
|
||||||
int visible;
|
int visible;
|
||||||
int extra_space = 0;
|
int extra_space = 0;
|
||||||
|
#ifdef RB_IPV6
|
||||||
|
struct sockaddr_in ip4;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(target_p->user == NULL)
|
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),
|
form_str(RPL_WHOISACTUALLY),
|
||||||
target_p->name, target_p->sockhost);
|
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),
|
sendto_one_numeric(source_p, RPL_WHOISIDLE, form_str(RPL_WHOISIDLE),
|
||||||
target_p->name,
|
target_p->name,
|
||||||
rb_current_time() - target_p->localClient->last,
|
rb_current_time() - target_p->localClient->last,
|
||||||
|
|
|
@ -358,7 +358,7 @@ static const char * replies[] = {
|
||||||
/* 334 */ NULL,
|
/* 334 */ NULL,
|
||||||
/* 335 */ NULL,
|
/* 335 */ NULL,
|
||||||
/* 336 */ NULL,
|
/* 336 */ NULL,
|
||||||
/* 337 */ NULL,
|
/* 337 RPL_WHOISTEXT, */ "%s :%s",
|
||||||
/* 338 RPL_WHOISACTUALLY, */ "%s %s :actually using host",
|
/* 338 RPL_WHOISACTUALLY, */ "%s %s :actually using host",
|
||||||
/* 339 */ NULL,
|
/* 339 */ NULL,
|
||||||
/* 340 */ NULL,
|
/* 340 */ NULL,
|
||||||
|
|
Loading…
Reference in a new issue