1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-01-07 22:30:28 +00:00

Reverse lookup now checks result by additional forward lookup

This commit is contained in:
Florian Westphal 2005-07-25 09:20:10 +00:00
parent 1e9e16fa3b
commit 2e794a6943
2 changed files with 12 additions and 6 deletions

View File

@ -11,6 +11,7 @@
ngIRCd CVSHEAD ngIRCd CVSHEAD
- Reverse DNS lookup code now checks the result by doing an additional lookup.
- Add new IO Layer - Add new IO Layer
ngIRCd 0.9.x ngIRCd 0.9.x
@ -614,4 +615,4 @@ ngIRCd 0.0.1, 31.12.2001
-- --
$Id: ChangeLog,v 1.279 2005/07/07 18:50:23 fw Exp $ $Id: ChangeLog,v 1.280 2005/07/25 09:20:10 fw Exp $

View File

@ -14,7 +14,7 @@
#include "portab.h" #include "portab.h"
static char UNUSED id[] = "$Id: resolve.c,v 1.14 2005/07/24 21:42:00 fw Exp $"; static char UNUSED id[] = "$Id: resolve.c,v 1.15 2005/07/25 09:20:10 fw Exp $";
#include "imp.h" #include "imp.h"
#include <assert.h> #include <assert.h>
@ -189,12 +189,15 @@ Do_ResolveAddr( struct sockaddr_in *Addr, int w_fd )
struct hostent *h; struct hostent *h;
size_t len; size_t len;
struct in_addr *addr; struct in_addr *addr;
char *ntoaptr;
#ifdef IDENTAUTH #ifdef IDENTAUTH
char *res; char *res;
#endif #endif
/* Resolve IP address */ /* Resolve IP address */
#ifdef DEBUG
Log_Resolver( LOG_DEBUG, "Now resolving %s ...", inet_ntoa( Addr->sin_addr )); Log_Resolver( LOG_DEBUG, "Now resolving %s ...", inet_ntoa( Addr->sin_addr ));
#endif
h = gethostbyaddr( (char *)&Addr->sin_addr, sizeof( Addr->sin_addr ), AF_INET ); h = gethostbyaddr( (char *)&Addr->sin_addr, sizeof( Addr->sin_addr ), AF_INET );
if (!h) { if (!h) {
#ifdef h_errno #ifdef h_errno
@ -211,14 +214,16 @@ Do_ResolveAddr( struct sockaddr_in *Addr, int w_fd )
if (memcmp(h->h_addr, &Addr->sin_addr, sizeof (struct in_addr))) { if (memcmp(h->h_addr, &Addr->sin_addr, sizeof (struct in_addr))) {
addr = (struct in_addr*) h->h_addr; addr = (struct in_addr*) h->h_addr;
strlcpy(ipstr, inet_ntoa(*addr), sizeof ipstr); strlcpy(ipstr, inet_ntoa(*addr), sizeof ipstr);
ntoaptr = inet_ntoa( Addr->sin_addr );
Log(LOG_WARNING,"Possible forgery: %s resolved to %s (which is at ip %s!)", Log(LOG_WARNING,"Possible forgery: %s resolved to %s (which is at ip %s!)",
inet_ntoa( Addr->sin_addr), hostname, ipstr); ntoaptr, hostname, ipstr);
strlcpy( hostname, inet_ntoa( Addr->sin_addr ), sizeof( hostname )); strlcpy( hostname, ntoaptr, sizeof hostname);
} }
} else { } else {
ntoaptr = inet_ntoa( Addr->sin_addr );
Log(LOG_WARNING, "Possible forgery: %s resolved to %s (which has no ip address)", Log(LOG_WARNING, "Possible forgery: %s resolved to %s (which has no ip address)",
inet_ntoa( Addr->sin_addr ), hostname); ntoaptr, hostname);
strlcpy( hostname, inet_ntoa( Addr->sin_addr ), sizeof( hostname )); strlcpy( hostname, ntoaptr, sizeof hostname);
} }
} }
Log_Resolver( LOG_DEBUG, "Ok, translated %s to \"%s\".", inet_ntoa( Addr->sin_addr ), hostname ); Log_Resolver( LOG_DEBUG, "Ok, translated %s to \"%s\".", inet_ntoa( Addr->sin_addr ), hostname );