If the (exported) path passed to next_mnt() is simply "/", next_mnt()
will not report any children, as none start with "/" followed by
a '/'.
So make a special case for strlen(p)==1. In that case, return all
children.
This gives correct handling if only "/" is exported.
Signed-off-by: NeilBrown <[email protected]>
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index c23d384d24eb..ac36b6d9f21e 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -377,6 +377,7 @@ static char *next_mnt(void **v, char *p)
} else
f = *v;
while ((me = getmntent(f)) != NULL &&
+ l > 1 &&
(strncmp(me->mnt_dir, p, l) != 0 ||
me->mnt_dir[l] != '/'))
;
On 02/15/2015 08:18 PM, NeilBrown wrote:
>
>
> If the (exported) path passed to next_mnt() is simply "/", next_mnt()
> will not report any children, as none start with "/" followed by
> a '/'.
> So make a special case for strlen(p)==1. In that case, return all
> children.
>
> This gives correct handling if only "/" is exported.
>
> Signed-off-by: NeilBrown <[email protected]>
Committed!
steved.
>
> diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
> index c23d384d24eb..ac36b6d9f21e 100644
> --- a/utils/mountd/cache.c
> +++ b/utils/mountd/cache.c
> @@ -377,6 +377,7 @@ static char *next_mnt(void **v, char *p)
> } else
> f = *v;
> while ((me = getmntent(f)) != NULL &&
> + l > 1 &&
> (strncmp(me->mnt_dir, p, l) != 0 ||
> me->mnt_dir[l] != '/'))
> ;
>