linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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, ...)
>  {

  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).