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: Thu, 03 Mar 2011 15:52:16 -0500 [thread overview]
Message-ID: <4D6FFF80.6030102@RedHat.com> (raw)
In-Reply-To: <20110303.230122.1012453714437438591.yamato@redhat.com>
On 03/03/2011 09:01 AM, Masatake YAMATO wrote:
> No comment?
Sorry about that... I was traveling for the couple weeks...
Would you happen to have an example script on how
this new feature would be used? I just want to run
some quick tests...
tia,
steved.
>
>
> Masatake YAMATO
>
>> 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"
>> +#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, ...)
>> {
>> --
>> 1.7.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2011-03-03 20:52 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 [this message]
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
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=4D6FFF80.6030102@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).