added DNS spoofing test to host access control

This commit is contained in:
Andrew Tridgell committed 1998-05-20 00:20:12 +00:00
1 parent 6e47bda08e
commit de5fb3744d
1 file changed
+21 -1
+21 -1
View File
@@ -327,8 +327,10 @@ char *client_name(int fd)
int length = sizeof(sa);
static char name_buf[100];
struct hostent *hp;
char **p;
char *def = "UNKNOWN";
strcpy(name_buf,"UNKNOWN");
strcpy(name_buf,def);
if (getpeername(fd, &sa, &length)) {
exit_cleanup(1);
@@ -341,5 +343,23 @@ char *client_name(int fd)
strlcpy(name_buf,(char *)hp->h_name,sizeof(name_buf) - 1);
}
/* do a forward lookup as well to prevent spoofing */
hp = gethostbyname(name_buf);
if (!hp) {
strcpy(name_buf,def);
rprintf(FERROR,"reverse name lookup failed\n");
} else {
for (p=hp->h_addr_list;*p;p++) {
if (memcmp(*p, &sockin->sin_addr, hp->h_length) == 0) {
break;
}
}
if (!*p) {
strcpy(name_buf,def);
rprintf(FERROR,"reverse name lookup mismatch - spoofed address?\n");
}
}
return name_buf;
}