summaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/export/export.c9
-rw-r--r--support/export/rmtab.c24
-rw-r--r--support/include/exportfs.h2
3 files changed, 16 insertions, 19 deletions
diff --git a/support/export/export.c b/support/export/export.c
index eef2c3b..eedbb75 100644
--- a/support/export/export.c
+++ b/support/export/export.c
@@ -172,10 +172,9 @@ export_allowed_internal (struct hostent *hp, char *path)
return NULL;
}
-struct exportent *
+nfs_export *
export_allowed(struct hostent *hp, char *path)
{
- static struct exportent ee;
nfs_export *exp;
char epath[MAXPATHLEN+1];
char *p = NULL;
@@ -188,10 +187,8 @@ export_allowed(struct hostent *hp, char *path)
/* Try the longest matching exported pathname. */
while (1) {
exp = export_allowed_internal (hp, epath);
- if (exp) {
- dupexportent(&ee, &exp->m_export);
- return ⅇ
- }
+ if (exp)
+ return exp;
/* We have to treat the root, "/", specially. */
if (p == &epath[1]) break;
p = strrchr(epath, '/');
diff --git a/support/export/rmtab.c b/support/export/rmtab.c
index 3c55267..58e59f4 100644
--- a/support/export/rmtab.c
+++ b/support/export/rmtab.c
@@ -25,7 +25,6 @@ rmtab_read(void)
setrmtabent("r");
while ((rep = getrmtabent(1, NULL)) != NULL) {
- struct exportent *xp;
struct hostent *hp = NULL;
int htype;
@@ -33,22 +32,23 @@ rmtab_read(void)
if (htype == MCL_FQDN
&& (hp = gethostbyname (rep->r_client))
&& (hp = hostent_dup (hp),
- xp = export_allowed (hp, rep->r_path))) {
+ exp = export_allowed (hp, rep->r_path))) {
/* see if the entry already exists, otherwise this was an instantiated
* wild card, and we must add it
*/
- exp = export_lookup(rep->r_client, xp->e_path, 0);
- if (!exp) {
- strncpy (xp->e_hostname, rep->r_client,
- sizeof (xp->e_hostname) - 1);
- xp->e_hostname[sizeof (xp->e_hostname) -1] = '\0';
- exp = export_create(xp, 0);
+ nfs_export *exp2 = export_lookup(rep->r_client,
+ exp->m_export.e_path, 0);
+ if (!exp2) {
+ struct exportent ee;
+ dupexportent(&ee, &exp->m_export);
+ strncpy (ee.e_hostname, rep->r_client,
+ sizeof (ee.e_hostname) - 1);
+ ee.e_hostname[sizeof (ee.e_hostname) -1] = '\0';
+ exp2 = export_create(&ee, 0);
+ exp2->m_changed = exp->m_changed;
}
free (hp);
-
- if (!exp)
- continue;
- exp->m_mayexport = 1;
+ exp2->m_mayexport = 1;
} else if (hp) /* export_allowed failed */
free(hp);
}
diff --git a/support/include/exportfs.h b/support/include/exportfs.h
index dfd51f2..bf5bb67 100644
--- a/support/include/exportfs.h
+++ b/support/include/exportfs.h
@@ -62,7 +62,7 @@ void export_add(nfs_export *);
void export_reset(nfs_export *);
nfs_export * export_lookup(char *hname, char *path, int caconical);
nfs_export * export_find(struct hostent *, char *path);
-struct exportent * export_allowed(struct hostent *, char *path);
+nfs_export * export_allowed(struct hostent *, char *path);
nfs_export * export_create(struct exportent *, int canonical);
nfs_export * export_dup(nfs_export *, struct hostent *);
void export_freeall(void);