From: Steve Dickson <SteveD@redhat.com>
To: Masatake YAMATO <yamato@redhat.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 1/2] Read /etc/exports.d/*.export as extra export files
Date: Sat, 05 Mar 2011 17:46:11 -0500 [thread overview]
Message-ID: <4D72BD33.70208@RedHat.com> (raw)
In-Reply-To: <20110217.215900.388120588347145930.yamato@redhat.com>
Hello,
On 02/17/2011 07:59 AM, Masatake YAMATO wrote:
> This patch adding a capability to read /etc/exports.d/*.export as
> extra export files to exportfs.
>
> If one wants to add or remove an export entry in a script, currently
> one may have to use sed or something tool for adding or removing the
> line for the entry in /etc/exports file.
>
> With the patch, adding and removing an entry from a script is much easier.
> cat<<EOF... or mv can be used for adding. rm can be used for removing.
>
>
> Signed-off-by: Masatake YAMATO <yamato@redhat.com>
> ---
> support/include/nfslib.h | 6 ++++
> utils/exportfs/exportfs.c | 59 ++++++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 64 insertions(+), 1 deletions(-)
>
> diff --git a/support/include/nfslib.h b/support/include/nfslib.h
> index 53ece0e..864aae2 100644
> --- a/support/include/nfslib.h
> +++ b/support/include/nfslib.h
> @@ -25,6 +25,12 @@
> #ifndef _PATH_EXPORTS
> #define _PATH_EXPORTS "/etc/exports"
> #endif
> +#ifndef _PATH_EXPORTS_D
> +#define _PATH_EXPORTS_D "/etc/exports.d"
> +#endif
> +#ifndef _EXT_EXPORT
> +#define _EXT_EXPORT ".export"
Question: Why do we care about the format of the file that lives in
the _PATH_EXPORTS_D directory? The reason I asked is I created a file
called 'root.exports' which silently failed export those exports.
Now, I realize you added the ".export" explanation to the man page
but is there a particular reason why file in that directory have
to end with ".export"? Out of "easy of use" sake, should any
and all files that exist in that directory be expected to
be exports files?
steved.
> +#endif
> #ifndef _PATH_IDMAPDCONF
> #define _PATH_IDMAPDCONF "/etc/idmapd.conf"
> #endif
> diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
> index b78957f..26d0504 100644
> --- a/utils/exportfs/exportfs.c
> +++ b/utils/exportfs/exportfs.c
> @@ -25,6 +25,7 @@
> #include <fcntl.h>
> #include <netdb.h>
> #include <errno.h>
> +#include <dirent.h>
>
> #include "sockaddr.h"
> #include "misc.h"
> @@ -41,6 +42,7 @@ static void error(nfs_export *exp, int err);
> static void usage(const char *progname);
> static void validate_export(nfs_export *exp);
> static int matchhostname(const char *hostname1, const char *hostname2);
> +static void export_d_read(const char *dname);
>
> int
> main(int argc, char **argv)
> @@ -127,8 +129,10 @@ main(int argc, char **argv)
> return 0;
> }
> }
> - if (f_export && ! f_ignore)
> + if (f_export && ! f_ignore) {
> export_read(_PATH_EXPORTS);
> + export_d_read(_PATH_EXPORTS_D);
> + }
> if (f_export) {
> if (f_all)
> export_all(f_verbose);
> @@ -485,6 +489,59 @@ out:
> return result;
> }
>
> +/* Based on mnt_table_parse_dir() in
> + util-linux-ng/shlibs/mount/src/tab_parse.c */
> +static void
> +export_d_read(const char *dname)
> +{
> + int n = 0, i;
> + struct dirent **namelist = NULL;
> +
> +
> + n = scandir(dname, &namelist, NULL, versionsort);
> + if (n < 0)
> + xlog(L_NOTICE, "scandir %s: %s\n", dname, strerror(errno));
> + else if (n == 0)
> + return;
> +
> + for (i = 0; i < n; i++) {
> + struct dirent *d = namelist[i];
> + size_t namesz;
> + char fname[PATH_MAX + 1];
> + int fname_len;
> +
> +
> + if (d->d_type != DT_UNKNOWN
> + && d->d_type != DT_REG
> + && d->d_type != DT_LNK)
> + continue;
> + if (*d->d_name == '.')
> + continue;
> +
> +#define _EXT_EXPORT_SIZ (sizeof(_EXT_EXPORT) - 1)
> + namesz = strlen(d->d_name);
> + if (!namesz
> + || namesz < _EXT_EXPORT_SIZ + 1
> + || strcmp(d->d_name + (namesz - _EXT_EXPORT_SIZ),
> + _EXT_EXPORT))
> + continue;
> +
> + fname_len = snprintf(fname, PATH_MAX +1, "%s/%s", dname, d->d_name);
> + if (fname_len > PATH_MAX) {
> + xlog(L_WARNING, "Too long file name: %s in %s\n", d->d_name, dname);
> + continue;
> + }
> +
> + export_read(fname);
> + }
> +
> + for (i = 0; i < n; i++)
> + free(namelist[i]);
> + free(namelist);
> +
> + return;
> +}
> +
> static char
> dumpopt(char c, char *fmt, ...)
> {
next prev parent reply other threads:[~2011-03-05 22:46 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-17 12:59 [PATCH 1/2] Read /etc/exports.d/*.export as extra export files Masatake YAMATO
2011-02-17 13:03 ` [PATCH 2/2] Update man pages for /etc/exports.d Masatake YAMATO
2011-03-03 14:01 ` [PATCH 1/2] Read /etc/exports.d/*.export as extra export files Masatake YAMATO
2011-03-03 15:26 ` Ferenc Wagner
[not found] ` <87fwr4rzri.fsf-/U8DR9OPLL8grVaPS+uXcA@public.gmane.org>
2011-03-03 17:50 ` J. Bruce Fields
2011-03-03 20:52 ` Steve Dickson
2011-03-04 6:10 ` Masatake YAMATO
2011-03-04 16:21 ` Steve Dickson
2011-03-05 16:54 ` Masatake YAMATO
2011-03-05 21:42 ` Steve Dickson
2011-03-05 22:46 ` Steve Dickson [this message]
2011-03-06 1:51 ` Jim Rees
2011-03-06 6:11 ` Masatake YAMATO
2011-03-07 13:05 ` Steve Dickson
2011-03-07 13:17 ` Steve Dickson
2011-03-07 13:50 ` Masatake YAMATO
2011-03-07 14:14 ` Steve Dickson
[not found] ` <4D74E830.6020406-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2011-03-07 14:27 ` Masatake YAMATO
2011-03-07 14:02 ` Jim Rees
2011-03-07 14:17 ` Steve Dickson
2011-03-07 14:29 ` Steve Dickson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D72BD33.70208@RedHat.com \
--to=steved@redhat.com \
--cc=linux-nfs@vger.kernel.org \
--cc=yamato@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).