#include "mountd.h"
#include "xmalloc.h"
#include "fsloc.h"
+#include "pseudoflavors.h"
#ifdef USE_BLKID
#include "blkid/blkid.h"
dev_missing ++;
if (stat(path, &stb) != 0)
continue;
+ if (!S_ISDIR(stb.st_mode) && !S_ISREG(stb.st_mode)) {
+ continue;
+ }
switch(fsidtype){
case FSID_DEV:
case FSID_MAJOR_MINOR:
release_replicas(servers);
}
+static void write_secinfo(FILE *f, struct exportent *ep)
+{
+ struct sec_entry *p;
+
+ for (p = ep->e_secinfo; p->flav; p++)
+ ; /* Do nothing */
+ if (p == ep->e_secinfo) {
+ /* There was no sec= option */
+ return;
+ }
+ qword_print(f, "secinfo");
+ qword_printint(f, p - ep->e_secinfo);
+ for (p = ep->e_secinfo; p->flav; p++) {
+ qword_printint(f, p->flav->fnum);
+ qword_printint(f, p->flags);
+ }
+
+}
+
static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *exp)
{
qword_print(f, domain);
qword_printint(f, exp->e_anongid);
qword_printint(f, exp->e_fsid);
write_fsloc(f, exp, path);
+ write_secinfo(f, exp);
#if USE_BLKID
if (exp->e_uuid == NULL) {
char u[16];
}
if (found) {
- if (dump_to_cache(f, dom, path, &found->m_export) < 0)
+ if (dump_to_cache(f, dom, path, &found->m_export) < 0) {
+ xlog(L_WARNING,
+ "Cannot export %s, possibly unsupported filesystem"
+ " or fsid= required", path);
dump_to_cache(f, dom, path, NULL);
- else
- mountlist_add(dom, path);
+ }
} else {
dump_to_cache(f, dom, path, NULL);
}
return -1;
err = dump_to_cache(f, domain, exp->e_path, exp);
- mountlist_add(domain, exp->e_path);
+ if (err) {
+ xlog(L_WARNING,
+ "Cannot export %s, possibly unsupported filesystem or"
+ " fsid= required", exp->e_path);
+ }
- while ((exp->e_flags & NFSEXP_CROSSMOUNT) && path) {
+ while (err == 0 && (exp->e_flags & NFSEXP_CROSSMOUNT) && path) {
/* really an 'if', but we can break out of
* a 'while' more easily */
/* Look along 'path' for other filesystems
dev = stb.st_dev;
while(path[l] == '/') {
char c;
- int err;
+ /* errors for submount should fail whole filesystem */
+ int err2;
l++;
while (path[l] != '/' && path[l])
l++;
c = path[l];
path[l] = 0;
- err = lstat(path, &stb);
+ err2 = lstat(path, &stb);
path[l] = c;
- if (err < 0)
+ if (err2 < 0)
break;
if (stb.st_dev == dev)
continue;