* Copyright (C) 1995 Olaf Kirch <okir@monad.swb.de>
*/
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <sys/stat.h>
#include <stdlib.h>
+#include <errno.h>
#include <string.h>
#include <ctype.h>
#include "nfslib.h"
#include "exportfs.h"
#include "xio.h"
-static int expsetup(struct nfsctl_export *exparg, nfs_export *exp);
+static int expsetup(struct nfsctl_export *exparg, nfs_export *exp, int unexport);
static int cltsetup(struct nfsctl_client *cltarg, nfs_client *clp);
int
struct nfsctl_export exparg;
struct nfsctl_client cltarg;
- if (!clp->m_exported) {
+ if (!clp->m_exported && (clp->m_type != MCL_GSS)) {
if (!cltsetup(&cltarg, clp))
return 0;
if (nfsaddclient(&cltarg) < 0)
return 0;
clp->m_exported = 1;
}
- if (!expsetup(&exparg, exp))
+ if (!expsetup(&exparg, exp, 0))
return 0;
if (nfsexport(&exparg) < 0)
return 0;
{
struct nfsctl_export exparg;
- if (!expsetup(&exparg, exp) || nfsunexport(&exparg) < 0)
+ if (!expsetup(&exparg, exp, 1) || nfsunexport(&exparg) < 0)
return 0;
exp->m_exported = 0;
return 1;
}
static int
-expsetup(struct nfsctl_export *exparg, nfs_export *exp)
+expsetup(struct nfsctl_export *exparg, nfs_export *exp, int unexport)
{
nfs_client *clp = exp->m_client;
struct stat stb;
- if (stat(exp->m_export.m_path, &stb) < 0)
+ if (stat(exp->m_export.e_path, &stb) < 0)
return 0;
memset(exparg, 0, sizeof(*exparg));
- strncpy(exparg->ex_path, exp->m_export.m_path,
+ strncpy(exparg->ex_path, exp->m_export.e_path,
sizeof (exparg->ex_path) - 1);
strncpy(exparg->ex_client, clp->m_hostname,
sizeof (exparg->ex_client) - 1);
str_tolower(exparg->ex_client);
exparg->ex_flags = exp->m_export.e_flags;
- exparg->ex_dev = stb.st_dev;
+ exparg->ex_dev = (!unexport && (exp->m_export.e_flags & NFSEXP_FSID)) ?
+ exp->m_export.e_fsid : stb.st_dev;
exparg->ex_ino = stb.st_ino;
exparg->ex_anon_uid = exp->m_export.e_anonuid;
exparg->ex_anon_gid = exp->m_export.e_anongid;