X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=support%2Fexport%2Fexport.c;h=93c58b62c61f750a7c41247ed982097a4fa63971;hb=5fb4042ce4eb4fd5e50e3fb0f78bbd20b4d46e78;hp=eef2c3b5fcb5a247bb9e74f4c0f1ec97bc969f03;hpb=d38ea02d0e4bcdc4e0114567028596f7bcba45b9;p=nfs-utils.git diff --git a/support/export/export.c b/support/export/export.c index eef2c3b..93c58b6 100644 --- a/support/export/export.c +++ b/support/export/export.c @@ -6,7 +6,9 @@ * Copyright (C) 1995, 1996 Olaf Kirch */ -#include "config.h" +#ifdef HAVE_CONFIG_H +#include +#endif #include #include @@ -83,11 +85,14 @@ export_init(nfs_export *exp, nfs_client *clp, struct exportent *nep) struct exportent *e = &exp->m_export; dupexportent(e, nep); + if (nep->e_hostname) + e->e_hostname = xstrdup(nep->e_hostname); exp->m_exported = 0; exp->m_xtabent = 0; exp->m_mayexport = 0; exp->m_changed = 0; + exp->m_warned = 0; exp->m_client = clp; clp->m_count++; } @@ -106,6 +111,8 @@ export_dup(nfs_export *exp, struct hostent *hp) new = (nfs_export *) xmalloc(sizeof(*new)); memcpy(new, exp, sizeof(*new)); dupexportent(&new->m_export, &exp->m_export); + if (exp->m_export.e_hostname) + new->m_export.e_hostname = xstrdup(exp->m_export.e_hostname); clp = client_dup(exp->m_client, hp); clp->m_count++; new->m_client = clp; @@ -113,6 +120,7 @@ export_dup(nfs_export *exp, struct hostent *hp) new->m_exported = 0; new->m_xtabent = 0; new->m_changed = 0; + new->m_warned = 0; export_add(new); return new; @@ -129,7 +137,7 @@ export_add(nfs_export *exp) xlog(L_FATAL, "unknown client type in export_add"); epp = exportlist + type; - while (*epp && slen < strlen((*epp)->m_export.e_path)) + while (*epp && slen <= strlen((*epp)->m_export.e_path)) epp = &((*epp)->m_next); exp->m_next = *epp; *epp = exp; @@ -172,10 +180,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 +195,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, '/'); @@ -241,6 +246,9 @@ export_freeall(void) xfree(exp->m_export.e_sqgids); if (exp->m_export.e_mountpoint) free(exp->m_export.e_mountpoint); + if (exp->m_export.e_fslocdata) + xfree(exp->m_export.e_fslocdata); + xfree(exp->m_export.e_hostname); xfree(exp); } exportlist[i] = NULL;