diff options
author | Steve Dickson <steved@redhat.com> | 2009-03-04 15:24:58 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2009-03-04 15:24:58 -0500 |
commit | ae8e7dbe9641dbc69c34bcede416f0d91612d3f1 (patch) | |
tree | 98dbe1323a7c4fffd0f063626f3aab1b5574bc68 /support | |
parent | 681d340e682d95dd9fa6c120de2a24ddb155d581 (diff) | |
download | nfs-utils-ae8e7dbe9641dbc69c34bcede416f0d91612d3f1.tar.gz nfs-utils-ae8e7dbe9641dbc69c34bcede416f0d91612d3f1.tar.xz nfs-utils-ae8e7dbe9641dbc69c34bcede416f0d91612d3f1.zip |
Converted good_client() to correctly use the tcp wrapper
interface and added a note to the mountd man page saying
hostnames will be ignored when they can not be looked up.
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'support')
-rw-r--r-- | support/misc/tcpwrapper.c | 57 |
1 files changed, 7 insertions, 50 deletions
diff --git a/support/misc/tcpwrapper.c b/support/misc/tcpwrapper.c index a9cd908..0ba856f 100644 --- a/support/misc/tcpwrapper.c +++ b/support/misc/tcpwrapper.c @@ -46,7 +46,7 @@ #include <sys/signal.h> #include <sys/queue.h> #include <sys/stat.h> -#include <unistd.h> +#include <tcpd.h> #include "xlog.h" @@ -171,58 +171,15 @@ good_client(daemon, addr) char *daemon; struct sockaddr_in *addr; { - struct hostent *hp; - char **sp; - char *tmpname; - - /* First check the address. */ - if (hosts_ctl(daemon, "", inet_ntoa(addr->sin_addr), "") == DENY) - return DENY; - - /* Now do the hostname lookup */ - hp = gethostbyaddr ((const char *) &(addr->sin_addr), - sizeof (addr->sin_addr), AF_INET); - if (!hp) { - xlog(L_WARNING, - "Warning: Client IP address '%s' not found in host lookup", - inet_ntoa(addr->sin_addr)); - return DENY; /* never heard of it. misconfigured DNS? */ - } - - /* Make sure the hostent is authorative. */ - tmpname = strdup(hp->h_name); - if (!tmpname) { - xlog(L_WARNING, "Warning: No memory for Host access check"); - return DENY; - } - hp = gethostbyname(tmpname); - if (!hp) { - xlog(L_WARNING, - "Warning: Client hostname '%s' not found in host lookup", tmpname); - free(tmpname); - return DENY; /* never heard of it. misconfigured DNS? */ - } - free(tmpname); - - /* Now make sure the address is on the list */ - for (sp = hp->h_addr_list ; *sp ; sp++) { - if (memcmp(*sp, &(addr->sin_addr), hp->h_length) == 0) - break; - } - if (!*sp) - return DENY; /* it was a FAKE. */ + struct request_info req; - /* Check the official name and address. */ - if (hosts_ctl(daemon, hp->h_name, inet_ntoa(addr->sin_addr), "") == DENY) - return DENY; + request_init(&req, RQ_DAEMON, daemon, RQ_CLIENT_SIN, addr, 0); + sock_methods(&req); - /* Now check aliases. */ - for (sp = hp->h_aliases; *sp ; sp++) { - if (hosts_ctl(daemon, *sp, inet_ntoa(addr->sin_addr), "") == DENY) - return DENY; - } + if (hosts_access(&req)) + return ALLOW; - return ALLOW; + return DENY; } /* check_startup - additional startup code */ |