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: Mon, 07 Mar 2011 09:29:16 -0500	[thread overview]
Message-ID: <4D74EBBC.4060007@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>
Committed with the 's/.export/.exports/g' change... 

Again, thanks for your patience!

steved.

> ---
>  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"
> +#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-07 14:29 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
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 [this message]

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=4D74EBBC.4060007@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).