All of lore.kernel.org
 help / color / mirror / Atom feed
* [nfs-utils PATCH] mount.nfs: dont pass options from configuration sections that are not relevant
@ 2013-08-14 15:48 Scott Mayhew
  2013-08-14 17:00 ` Chuck Lever
  2013-08-19 18:26 ` Steve Dickson
  0 siblings, 2 replies; 3+ messages in thread
From: Scott Mayhew @ 2013-08-14 15:48 UTC (permalink / raw)
  To: linux-nfs

The nfsmount.conf file has the following format:

[ section "arg" ]
	tag = value

conf_get_tag_list() currently doesn't check the arg field so we wind up
getting all the options that fall under a particular section value,
instead of just the ones that match the specific "arg" field.  As a
result, we wind up passing options to the mount syscall from sections
that aren't even relevant to the mount operation that is being
performed.

For example, if we have three different server sections, and each
section has an Nfsvers tag, then the string we pass to the mount syscall
will have two extra occurrences of the nfsvers option.  Each option
should appear at most 4 times -- once for the system section, once for
the server-specific section, once for the mount-specific section, and
once for the command line mount options.

Signed-off-by: Scott Mayhew <smayhew@redhat.com>
---
 support/include/conffile.h | 2 +-
 support/nfs/conffile.c     | 4 +++-
 utils/mount/configfile.c   | 2 +-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/support/include/conffile.h b/support/include/conffile.h
index ce7aa21..05ea5d2 100644
--- a/support/include/conffile.h
+++ b/support/include/conffile.h
@@ -54,7 +54,7 @@ extern int      conf_end(int, int);
 extern void     conf_free_list(struct conf_list *);
 extern struct sockaddr *conf_get_address(char *, char *);
 extern struct conf_list *conf_get_list(char *, char *);
-extern struct conf_list *conf_get_tag_list(char *);
+extern struct conf_list *conf_get_tag_list(char *, char *);
 extern int      conf_get_num(char *, char *, int);
 extern char    *conf_get_str(char *, char *);
 extern char    *conf_get_section(char *, char *, char *);
diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
index 5015e94..c3434d5 100644
--- a/support/nfs/conffile.c
+++ b/support/nfs/conffile.c
@@ -565,7 +565,7 @@ cleanup:
 }
 
 struct conf_list *
-conf_get_tag_list(char *section)
+conf_get_tag_list(char *section, char *arg)
 {
 	struct conf_list *list = 0;
 	struct conf_list_node *node;
@@ -579,6 +579,8 @@ conf_get_tag_list(char *section)
 	cb = LIST_FIRST(&conf_bindings[conf_hash (section)]);
 	for (; cb; cb = LIST_NEXT(cb, link)) {
 		if (strcasecmp (section, cb->section) == 0) {
+			if (arg != NULL && strcasecmp(arg, cb->arg) != 0)
+				continue;
 			list->cnt++;
 			node = calloc(1, sizeof *node);
 			if (!node)
diff --git a/utils/mount/configfile.c b/utils/mount/configfile.c
index 6f2ee75..1f1b6e7 100644
--- a/utils/mount/configfile.c
+++ b/utils/mount/configfile.c
@@ -286,7 +286,7 @@ conf_parse_mntopts(char *section, char *arg, char *opts)
 	char *nvalue, *ptr;
 	int argtype;
 
-	list = conf_get_tag_list(section);
+	list = conf_get_tag_list(section, arg);
 	TAILQ_FOREACH(node, &list->fields, link) {
 		/*
 		 * Do not overwrite options if already exists 
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [nfs-utils PATCH] mount.nfs: dont pass options from configuration sections that are not relevant
  2013-08-14 15:48 [nfs-utils PATCH] mount.nfs: dont pass options from configuration sections that are not relevant Scott Mayhew
@ 2013-08-14 17:00 ` Chuck Lever
  2013-08-19 18:26 ` Steve Dickson
  1 sibling, 0 replies; 3+ messages in thread
From: Chuck Lever @ 2013-08-14 17:00 UTC (permalink / raw)
  To: Scott Mayhew; +Cc: linux-nfs


On Aug 14, 2013, at 11:48 AM, Scott Mayhew <smayhew@redhat.com> wrote:

> The nfsmount.conf file has the following format:
> 
> [ section "arg" ]
> 	tag = value
> 
> conf_get_tag_list() currently doesn't check the arg field so we wind up
> getting all the options that fall under a particular section value,
> instead of just the ones that match the specific "arg" field.  As a
> result, we wind up passing options to the mount syscall from sections
> that aren't even relevant to the mount operation that is being
> performed.
> 
> For example, if we have three different server sections, and each
> section has an Nfsvers tag, then the string we pass to the mount syscall
> will have two extra occurrences of the nfsvers option.  Each option
> should appear at most 4 times -- once for the system section, once for
> the server-specific section, once for the mount-specific section, and
> once for the command line mount options.
> 
> Signed-off-by: Scott Mayhew <smayhew@redhat.com>

Acked-by: Chuck Lever <chuck.lever@oracle.com>

Btw, is there still a problem with "sloppy" ?


> ---
> support/include/conffile.h | 2 +-
> support/nfs/conffile.c     | 4 +++-
> utils/mount/configfile.c   | 2 +-
> 3 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/support/include/conffile.h b/support/include/conffile.h
> index ce7aa21..05ea5d2 100644
> --- a/support/include/conffile.h
> +++ b/support/include/conffile.h
> @@ -54,7 +54,7 @@ extern int      conf_end(int, int);
> extern void     conf_free_list(struct conf_list *);
> extern struct sockaddr *conf_get_address(char *, char *);
> extern struct conf_list *conf_get_list(char *, char *);
> -extern struct conf_list *conf_get_tag_list(char *);
> +extern struct conf_list *conf_get_tag_list(char *, char *);
> extern int      conf_get_num(char *, char *, int);
> extern char    *conf_get_str(char *, char *);
> extern char    *conf_get_section(char *, char *, char *);
> diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
> index 5015e94..c3434d5 100644
> --- a/support/nfs/conffile.c
> +++ b/support/nfs/conffile.c
> @@ -565,7 +565,7 @@ cleanup:
> }
> 
> struct conf_list *
> -conf_get_tag_list(char *section)
> +conf_get_tag_list(char *section, char *arg)
> {
> 	struct conf_list *list = 0;
> 	struct conf_list_node *node;
> @@ -579,6 +579,8 @@ conf_get_tag_list(char *section)
> 	cb = LIST_FIRST(&conf_bindings[conf_hash (section)]);
> 	for (; cb; cb = LIST_NEXT(cb, link)) {
> 		if (strcasecmp (section, cb->section) == 0) {
> +			if (arg != NULL && strcasecmp(arg, cb->arg) != 0)
> +				continue;
> 			list->cnt++;
> 			node = calloc(1, sizeof *node);
> 			if (!node)
> diff --git a/utils/mount/configfile.c b/utils/mount/configfile.c
> index 6f2ee75..1f1b6e7 100644
> --- a/utils/mount/configfile.c
> +++ b/utils/mount/configfile.c
> @@ -286,7 +286,7 @@ conf_parse_mntopts(char *section, char *arg, char *opts)
> 	char *nvalue, *ptr;
> 	int argtype;
> 
> -	list = conf_get_tag_list(section);
> +	list = conf_get_tag_list(section, arg);
> 	TAILQ_FOREACH(node, &list->fields, link) {
> 		/*
> 		 * Do not overwrite options if already exists 
> -- 
> 1.7.11.7
> 
> --
> 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

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [nfs-utils PATCH] mount.nfs: dont pass options from configuration sections that are not relevant
  2013-08-14 15:48 [nfs-utils PATCH] mount.nfs: dont pass options from configuration sections that are not relevant Scott Mayhew
  2013-08-14 17:00 ` Chuck Lever
@ 2013-08-19 18:26 ` Steve Dickson
  1 sibling, 0 replies; 3+ messages in thread
From: Steve Dickson @ 2013-08-19 18:26 UTC (permalink / raw)
  To: Scott Mayhew; +Cc: linux-nfs



On 14/08/13 11:48, Scott Mayhew wrote:
> The nfsmount.conf file has the following format:
> 
> [ section "arg" ]
> 	tag = value
> 
> conf_get_tag_list() currently doesn't check the arg field so we wind up
> getting all the options that fall under a particular section value,
> instead of just the ones that match the specific "arg" field.  As a
> result, we wind up passing options to the mount syscall from sections
> that aren't even relevant to the mount operation that is being
> performed.
> 
> For example, if we have three different server sections, and each
> section has an Nfsvers tag, then the string we pass to the mount syscall
> will have two extra occurrences of the nfsvers option.  Each option
> should appear at most 4 times -- once for the system section, once for
> the server-specific section, once for the mount-specific section, and
> once for the command line mount options.
> 
> Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Committed...

steved.

> ---
>  support/include/conffile.h | 2 +-
>  support/nfs/conffile.c     | 4 +++-
>  utils/mount/configfile.c   | 2 +-
>  3 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/support/include/conffile.h b/support/include/conffile.h
> index ce7aa21..05ea5d2 100644
> --- a/support/include/conffile.h
> +++ b/support/include/conffile.h
> @@ -54,7 +54,7 @@ extern int      conf_end(int, int);
>  extern void     conf_free_list(struct conf_list *);
>  extern struct sockaddr *conf_get_address(char *, char *);
>  extern struct conf_list *conf_get_list(char *, char *);
> -extern struct conf_list *conf_get_tag_list(char *);
> +extern struct conf_list *conf_get_tag_list(char *, char *);
>  extern int      conf_get_num(char *, char *, int);
>  extern char    *conf_get_str(char *, char *);
>  extern char    *conf_get_section(char *, char *, char *);
> diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
> index 5015e94..c3434d5 100644
> --- a/support/nfs/conffile.c
> +++ b/support/nfs/conffile.c
> @@ -565,7 +565,7 @@ cleanup:
>  }
>  
>  struct conf_list *
> -conf_get_tag_list(char *section)
> +conf_get_tag_list(char *section, char *arg)
>  {
>  	struct conf_list *list = 0;
>  	struct conf_list_node *node;
> @@ -579,6 +579,8 @@ conf_get_tag_list(char *section)
>  	cb = LIST_FIRST(&conf_bindings[conf_hash (section)]);
>  	for (; cb; cb = LIST_NEXT(cb, link)) {
>  		if (strcasecmp (section, cb->section) == 0) {
> +			if (arg != NULL && strcasecmp(arg, cb->arg) != 0)
> +				continue;
>  			list->cnt++;
>  			node = calloc(1, sizeof *node);
>  			if (!node)
> diff --git a/utils/mount/configfile.c b/utils/mount/configfile.c
> index 6f2ee75..1f1b6e7 100644
> --- a/utils/mount/configfile.c
> +++ b/utils/mount/configfile.c
> @@ -286,7 +286,7 @@ conf_parse_mntopts(char *section, char *arg, char *opts)
>  	char *nvalue, *ptr;
>  	int argtype;
>  
> -	list = conf_get_tag_list(section);
> +	list = conf_get_tag_list(section, arg);
>  	TAILQ_FOREACH(node, &list->fields, link) {
>  		/*
>  		 * Do not overwrite options if already exists 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-08-19 18:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-14 15:48 [nfs-utils PATCH] mount.nfs: dont pass options from configuration sections that are not relevant Scott Mayhew
2013-08-14 17:00 ` Chuck Lever
2013-08-19 18:26 ` Steve Dickson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.