From: Chuck Lever Date: Fri, 19 Oct 2012 14:24:07 +0000 (-0400) Subject: mountd: Warn when a broken junction is encountered X-Git-Tag: debian/1%1.2.8-1~11^2^2~86 X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=d69795533b0c8906e42aa2eb1cf4628cda42a766;p=nfs-utils.git mountd: Warn when a broken junction is encountered A broken junction is a problem that administrators will want to know about and correct. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson --- diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 7d80432..942fdbd 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -975,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; @@ -1002,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; }