Re: [PATCH 1/2] Read /etc/exports.d/*.export as extra export files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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@xxxxxxxxxx>
>> ---
>>  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@xxxxxxxxxxxxxxx
>> 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@xxxxxxxxxxxxxxx
> 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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux