summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--utils/mountd/auth.c6
-rw-r--r--utils/mountd/mountd.c7
-rw-r--r--utils/mountd/mountd.h2
3 files changed, 10 insertions, 5 deletions
diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c
index 4f803d7..183c9ea 100644
--- a/utils/mountd/auth.c
+++ b/utils/mountd/auth.c
@@ -46,7 +46,7 @@ auth_init(char *exports)
xtab_mount_write();
}
-int
+time_t
auth_reload()
{
struct stat stb;
@@ -55,7 +55,7 @@ auth_reload()
if (stat(_PATH_ETAB, &stb) < 0)
xlog(L_FATAL, "couldn't stat %s", _PATH_ETAB);
if (stb.st_mtime == last_modified)
- return 0;
+ return last_modified;
last_modified = stb.st_mtime;
export_freeall();
@@ -63,7 +63,7 @@ auth_reload()
// export_read(export_file);
xtab_export_read();
- return 1;
+ return last_modified;
}
static nfs_export *
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
index 72332ce..5204faa 100644
--- a/utils/mountd/mountd.c
+++ b/utils/mountd/mountd.c
@@ -463,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) {
diff --git a/utils/mountd/mountd.h b/utils/mountd/mountd.h
index d64c171..b539278 100644
--- a/utils/mountd/mountd.h
+++ b/utils/mountd/mountd.h
@@ -40,7 +40,7 @@ bool_t mount_mnt_3_svc(struct svc_req *, dirpath *, mountres3 *);
void mount_dispatch(struct svc_req *, SVCXPRT *);
void auth_init(char *export_file);
-int auth_reload(void);
+time_t auth_reload(void);
nfs_export * auth_authenticate(char *what, struct sockaddr_in *sin,
char *path);
void auth_export(nfs_export *exp);