#include "xlog.h"
static void export_all(int verbose);
-static void unexport_all(int verbose);
static void exportfs(char *arg, char *options, int verbose);
static void unexportfs(char *arg, int verbose);
static void exports_update(int verbose);
for (i = optind; i < argc ; i++)
exportfs(argv[i], options, f_verbose);
}
- /* note: xtab_*_read does not update entries if they already exist,
- * so this will not lose new options
+ /* If we are unexporting everything, then
+ * don't care about what should be exported, as that
+ * may require DNS lookups..
*/
- if (!f_reexport)
- xtab_export_read();
- if (!f_export) {
- if (f_all)
- unexport_all(f_verbose);
- else
+ if (! ( !f_export && f_all)) {
+ /* note: xtab_*_read does not update entries if they already exist,
+ * so this will not lose new options
+ */
+ if (!f_reexport)
+ xtab_export_read();
+ if (!f_export)
for (i = optind ; i < argc ; i++)
unexportfs(argv[i], f_verbose);
+ rmtab_read();
}
- rmtab_read();
xtab_mount_read();
exports_update(f_verbose);
xtab_export_write();
nfs_export *exp;
for (exp = exportlist[MCL_FQDN]; exp; exp=exp->m_next) {
- if (exp->m_mayexport && (!exp->m_exported || exp->m_changed)) {
+ if (exp->m_mayexport && ((exp->m_exported<1) || exp->m_changed)) {
if (verbose)
printf("%sexporting %s:%s to kernel\n",
exp->m_exported ?"re":"",
}
}
}
-/*
- * unexport_all finds all entries that are mayexport, and
- * marks them not xtabent and not mayexport
- */
-static void
-unexport_all(int verbose)
-{
- nfs_export *exp;
- int i;
-
- for (i = 0; i < MCL_MAXTYPES; i++) {
- for (exp = exportlist[i]; exp; exp = exp->m_next)
- if (exp->m_mayexport) {
- if (verbose) {
- if (exp->m_exported) {
- printf("unexporting %s:%s from kernel\n",
- exp->m_client->m_hostname,
- exp->m_export.e_path);
- }
- else {
- printf("unexporting %s:%s\n",
- exp->m_client->m_hostname,
- exp->m_export.e_path);
- }
- }
- if (exp->m_exported && !export_unexport(exp))
- error(exp, errno);
- exp->m_xtabent = 0;
- exp->m_mayexport = 0;
- }
- }
-}
static void
if ((htype = client_gettype(hname)) == MCL_FQDN &&
(hp = gethostbyname(hname)) != NULL) {
- hp = hostent_dup (hp);
+ struct hostent *hp2 = hostent_dup (hp);
+ hp = gethostbyaddr(hp2->h_addr, hp2->h_length,
+ hp2->h_addrtype);
+ if (hp) {
+ free(hp2);
+ hp = hostent_dup(hp);
+ } else
+ hp = hp2;
exp = export_find(hp, path);
+ hname = hp->h_name;
} else {
- exp = export_lookup(hname, path);
+ exp = export_lookup(hname, path, 0);
}
if (!exp) {
if (!(eep = mkexportent(hname, path, options)) ||
- !(exp = export_create(eep))) {
+ !(exp = export_create(eep, 0))) {
if (hp) free (hp);
return;
}
c = dumpopt(c, "no_subtree_check");
if (ep->e_flags & NFSEXP_NOAUTHNLM)
c = dumpopt(c, "insecure_locks");
+ if (ep->e_flags & NFSEXP_FSID)
+ c = dumpopt(c, "fsid=%d", ep->e_fsid);
if (ep->e_maptype == CLE_MAP_UGIDD)
c = dumpopt(c, "mapping=ugidd");
else if (ep->e_maptype == CLE_MAP_FILE)