diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-05-03 15:09:09 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2012-05-03 15:12:10 -0400 |
commit | bf6a4febaa78bf188896b7b5b02c46562dd08b70 (patch) | |
tree | 54ed00f2f28ff2d98871776be48b73cbb0026a90 | |
parent | c2544b77566690ebec32a2d47c9249548b1a0941 (diff) | |
download | nfs-utils-bf6a4febaa78bf188896b7b5b02c46562dd08b70.tar.gz nfs-utils-bf6a4febaa78bf188896b7b5b02c46562dd08b70.tar.xz nfs-utils-bf6a4febaa78bf188896b7b5b02c46562dd08b70.zip |
mountd: handle allocation failures in auth_unix_ip upcall
From: "J. Bruce Fields" <bfields@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | utils/mountd/cache.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 1ae96fe..7d80432 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -84,7 +84,6 @@ static void auth_unix_ip(FILE *f) char ipaddr[INET6_ADDRSTRLEN]; char *client = NULL; struct addrinfo *tmp = NULL; - struct addrinfo *ai = NULL; if (readline(fileno(f), &lbuf, &lbuflen) != 1) return; @@ -107,12 +106,16 @@ static void auth_unix_ip(FILE *f) /* addr is a valid, interesting address, find the domain name... */ if (!use_ipaddr) { + struct addrinfo *ai = NULL; + ai = client_resolve(tmp->ai_addr); + if (ai == NULL) + goto out; client = client_compose(ai); freeaddrinfo(ai); + if (!client) + goto out; } - freeaddrinfo(tmp); - qword_print(f, "nfsd"); qword_print(f, ipaddr); qword_printuint(f, time(0) + DEFAULT_TTL); @@ -124,6 +127,9 @@ static void auth_unix_ip(FILE *f) xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, client?client: "DEFAULT"); free(client); +out: + freeaddrinfo(tmp); + } static void auth_unix_gid(FILE *f) |