X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmountd%2Fmountd.c;h=5204faa62b4a1d6b7f750c4923818f9fcec7df51;hb=5112f614e6f05ad6602da8142412a39b1c3efc9c;hp=ee6afe6167bd18fa1260c7fe7757208c1d897136;hpb=5d5d8dc1f093f73825b5c2fc814f0a9a565bd384;p=nfs-utils.git diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index ee6afe6..5204faa 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -29,7 +29,7 @@ extern void cache_open(void); extern struct nfs_fh_len *cache_get_filehandle(nfs_export *exp, int len, char *p); -extern void cache_export(nfs_export *exp); +extern int cache_export(nfs_export *exp); extern void my_svc_run(void); @@ -67,6 +67,7 @@ static struct option longopts[] = { "ha-callout", 1, 0, 'H' }, { "state-directory-path", 1, 0, 's' }, { "num-threads", 1, 0, 't' }, + { "reverse-lookup", 0, 0, 'r' }, { NULL, 0, 0, 0 } }; @@ -415,7 +416,10 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) */ struct nfs_fh_len *fh; - cache_export(exp); + if (cache_export(exp)) { + *error = NFSERR_ACCES; + return NULL; + } fh = cache_get_filehandle(exp, v3?64:32, p); if (fh == NULL) *error = NFSERR_ACCES; @@ -459,14 +463,19 @@ static exports get_exportlist(void) { static exports elist = NULL; + static time_t etime = 0; + time_t atime; struct exportnode *e, *ne; struct groupnode *g, *ng, *c, **cp; nfs_export *exp; int i; - if (!auth_reload() && elist) + atime = auth_reload(); + if (elist && atime == etime) return elist; + etime = atime; + for (e = elist; e != NULL; e = ne) { ne = e->ex_next; for (g = e->ex_groups; g != NULL; g = ng) {