diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-05-20 00:20:12 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-05-20 00:20:12 +0000 |
commit | de5fb3744da115dbdb66c7fbb894bf2ad9317fb7 (patch) | |
tree | 58b695f6b58bf6b374a70b9f5ed6fc9803587d15 | |
parent | 6e47bda08e17783f3fc6800884006a5e343d75d5 (diff) | |
download | rsync-de5fb3744da115dbdb66c7fbb894bf2ad9317fb7.tar.gz rsync-de5fb3744da115dbdb66c7fbb894bf2ad9317fb7.tar.bz2 rsync-de5fb3744da115dbdb66c7fbb894bf2ad9317fb7.zip |
added DNS spoofing test to host access control
-rw-r--r-- | socket.c | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -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; } |