X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fcache.c;h=942fdbd030f19f59665681acde3aeaf06b6dd308;hp=1ae96fe41ecca26e0ff6d7003137b520f6c1ddbc;hb=d69795533b0c8906e42aa2eb1cf4628cda42a766;hpb=c2544b77566690ebec32a2d47c9249548b1a0941 diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 1ae96fe..942fdbd 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) @@ -969,8 +975,8 @@ static struct exportent *locations_to_export(struct jp_ops *ops, static struct exportent *invoke_junction_ops(void *handle, const char *junction) { + struct exportent *exp = NULL; nfs_fsloc_set_t locations; - struct exportent *exp; enum jp_status status; struct jp_ops *ops; char *error; @@ -996,15 +1002,24 @@ static struct exportent *invoke_junction_ops(void *handle, } status = ops->jp_get_locations(junction, &locations); - if (status != JP_OK) { - xlog(D_GENERAL, "%s: failed to resolve %s: %s", - __func__, junction, ops->jp_error(status)); - return NULL; + switch (status) { + case JP_OK: + break; + case JP_NOTJUNCTION: + xlog(D_GENERAL, "%s: %s is not a junction", + __func__, junction); + goto out; + default: + xlog(L_WARNING, "Dangling junction %s: %s", + junction, ops->jp_error(status)); + goto out; } exp = locations_to_export(ops, locations, junction); ops->jp_put_locations(locations); + +out: ops->jp_done(); return exp; }