X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fnfsexport.c;h=f129fd2e088a6808200043fed007302c92577fdf;hp=97de651ab080a1490cc2784ab0bd0874ee401a69;hb=8fd9fad1ea4b25b8962d70133f476650ef0637b0;hpb=f6a8d3907cd24a4c255234b0161c868763736fdf diff --git a/support/nfs/nfsexport.c b/support/nfs/nfsexport.c index 97de651..f129fd2 100644 --- a/support/nfs/nfsexport.c +++ b/support/nfs/nfsexport.c @@ -6,7 +6,9 @@ * Copyright (C) 1995, 1996 Olaf Kirch */ -#include "config.h" +#ifdef HAVE_CONFIG_H +#include +#endif #include #include @@ -36,20 +38,23 @@ exp_unexp(struct nfsctl_export *exp, int export) char fsidstr[8]; __u16 dev; __u32 inode; + int err; f = fopen("/proc/net/rpc/nfsd.export/channel", "w"); if (f == NULL) return -1; qword_print(f, exp->ex_client); qword_print(f, exp->ex_path); - qword_printint(f, 0x7fffffff); if (export) { + qword_printint(f, 0x7fffffff); qword_printint(f, exp->ex_flags); qword_printint(f, exp->ex_anon_uid); qword_printint(f, exp->ex_anon_gid); qword_printint(f, exp->ex_dev); - } - qword_eol(f); + } else + qword_printint(f, 1); + + err = qword_eol(f); fclose(f); if (stat(exp->ex_path, &stb) != 0) @@ -61,10 +66,13 @@ exp_unexp(struct nfsctl_export *exp, int export) qword_printint(f,1); fsid = exp->ex_dev; qword_printhex(f, (char*)&fsid, 4); - qword_printint(f, 0x7fffffff); - if (export) + if (export) { + qword_printint(f, 0x7fffffff); qword_print(f, exp->ex_path); - qword_eol(f); + } else + qword_printint(f, 1); + + err = qword_eol(f) || err; } qword_print(f,exp->ex_client); qword_printint(f,0); @@ -73,12 +81,14 @@ exp_unexp(struct nfsctl_export *exp, int export) inode = stb.st_ino; memcpy(fsidstr+4, &inode, 4); qword_printhex(f, fsidstr, 8); - qword_printint(f, 0x7fffffff); - if (export) + if (export) { + qword_printint(f, 0x7fffffff); qword_print(f, exp->ex_path); - qword_eol(f); + } else + qword_printint(f, 1); + err = qword_eol(f) || err; fclose(f); - return 0; + return err; } int @@ -86,7 +96,7 @@ nfsexport(struct nfsctl_export *exp) { struct nfsctl_arg arg; int fd; - if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_RDWR))>= 0) { + if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_WRONLY))>= 0) { close(fd); return exp_unexp(exp, 1); } @@ -101,7 +111,7 @@ nfsunexport(struct nfsctl_export *exp) struct nfsctl_arg arg; int fd; - if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_RDWR))>= 0) { + if ((fd=open("/proc/net/rpc/nfsd.fh/channel", O_WRONLY))>= 0) { close(fd); return exp_unexp(exp, 0); }