CONFIG_JUNCTION was defined for use in Makefiles, but that does not provide a -DCONFIG_JUNCTION on the compiler command line. Add logic to configure.ac to get the compiler flags right. Now that mountd junction support is getting built, a few last minute porting bugs popped out. Fix those up. Reported-by: Yongcheng Yang <yoyang@xxxxxxxxxx> BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1543126 Fixes: 79978ed34973 ("mountd: Solder in support for NFS basic ... ") Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- configure.ac | 8 +++++++- utils/mountd/cache.c | 18 +++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 16eae06..b458891 100644 --- a/configure.ac +++ b/configure.ac @@ -185,7 +185,13 @@ AC_ARG_ENABLE(junction, [enable support for NFS junctions @<:@default=no@:>@])], enable_junction=$enableval, enable_junction=no) -AM_CONDITIONAL(CONFIG_JUNCTION, [test "$enable_junction" = "yes" ]) + if test "$enable_junction" = yes; then + AC_DEFINE(HAVE_JUNCTION_SUPPORT, 1, + [Define this if you want junction support compiled in]) + else + enable_junction= + fi + AM_CONDITIONAL(CONFIG_JUNCTION, [test "$enable_junction" = "yes" ]) AC_ARG_ENABLE(tirpc, [AC_HELP_STRING([--disable-tirpc], diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 6f42512..7e8d403 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -976,8 +976,9 @@ lookup_export(char *dom, char *path, struct addrinfo *ai) return found; } -#ifdef CONFIG_JUNCTION +#ifdef HAVE_JUNCTION_SUPPORT +#include <libxml/parser.h> #include "junction.h" struct nfs_fsloc_set { @@ -1084,8 +1085,7 @@ static bool locations_to_fslocdata(struct nfs_fsloc_set *locations, *ttl = 0; for (;;) { - enum jp_status status; - int len; + int len, status; status = get_next_location(locations, &server, &rootpath, ttl); @@ -1219,7 +1219,7 @@ nfs_get_basic_junction(const char *junct_path, struct nfs_fsloc_set **locset) return EINVAL; } - locset->ns_current = locset->ns_list; + new->ns_current = new->ns_list; new->ns_ttl = 300; *locset = new; return 0; @@ -1242,7 +1242,7 @@ static struct exportent *lookup_junction(char *dom, const char *pathname, status = nfs_get_basic_junction(pathname, &locations); switch (status) { xlog(L_WARNING, "Dangling junction %s: %s", - pathname, strerro(status)); + pathname, strerror(status)); goto out; } @@ -1252,8 +1252,8 @@ static struct exportent *lookup_junction(char *dom, const char *pathname, exp = locations_to_export(locations, pathname, parent); - nfs_free_locations(locset->ns_list); - free(locset); + nfs_free_locations(locations->ns_list); + free(locations); out: xmlCleanupParser(); @@ -1273,7 +1273,7 @@ static void lookup_nonexport(int f, char *buf, int buflen, char *dom, char *path free(eep); } -#else /* !CONFIG_JUNCTION */ +#else /* !HAVE_JUNCTION_SUPPORT */ static void lookup_nonexport(int f, char *buf, int buflen, char *dom, char *path, struct addrinfo *UNUSED(ai)) @@ -1281,7 +1281,7 @@ static void lookup_nonexport(int f, char *buf, int buflen, char *dom, char *path dump_to_cache(f, buf, buflen, dom, path, NULL, 0); } -#endif /* !CONFIG_JUNCTION */ +#endif /* !HAVE_JUNCTION_SUPPORT */ static void nfsd_export(int f) {