* [PATCH] mountd: support IPv6 [] escaping with fsloc hosts
@ 2012-04-24 15:00 Weston Andros Adamson
2012-04-27 11:28 ` J. Bruce Fields
2012-05-01 18:57 ` Steve Dickson
0 siblings, 2 replies; 3+ messages in thread
From: Weston Andros Adamson @ 2012-04-24 15:00 UTC (permalink / raw)
To: SteveD; +Cc: bfields, linux-nfs, Weston Andros Adamson
mountd uses colons to split fsloc hosts, but this doesn't work with IPv6
addresses (they contain ':').
To fix this, mountd is changed to expect all IPv6 addresses to be escaped
by '[' and ']' so colons that are part of the address may be skipped.
To fix IPv6 referrals, this patch must be used with the nfsd patch that
properly parses escaped IPv6 addresses in fs_location->hosts.
Signed-off-by: Weston Andros Adamson <dros@netapp.com>
---
utils/mountd/fsloc.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/utils/mountd/fsloc.c b/utils/mountd/fsloc.c
index 704b7a0..bc737d1 100644
--- a/utils/mountd/fsloc.c
+++ b/utils/mountd/fsloc.c
@@ -120,10 +120,11 @@ static struct servers *parse_list(char **list)
*/
static struct servers *method_list(char *data)
{
- char *copy, *ptr=data;
+ char *copy, *ptr=data, *p;
char **list;
int i, listsize;
struct servers *rv=NULL;
+ bool v6esc = false;
xlog(L_NOTICE, "method_list(%s)", data);
for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
@@ -134,9 +135,22 @@ static struct servers *method_list(char *data)
xlog(L_NOTICE, "converted to %s", copy);
if (list && copy) {
ptr = copy;
- for (i=0; i<listsize; i++) {
- list[i] = strsep(&ptr, ":");
+ for (p = ptr, i = 0; *p && i < listsize; p++) {
+ if (*p == '[')
+ v6esc = true;
+ else if (*p == ']')
+ v6esc = false;
+
+ if (!v6esc && *p == ':') {
+ *p = '\0';
+ if (*ptr)
+ list[i++] = ptr;
+ ptr = p + 1;
+ }
}
+ if (*ptr)
+ list[i++] = ptr;
+ list[i] = NULL;
rv = parse_list(list);
}
free(copy);
--
1.7.4.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] mountd: support IPv6 [] escaping with fsloc hosts
2012-04-24 15:00 [PATCH] mountd: support IPv6 [] escaping with fsloc hosts Weston Andros Adamson
@ 2012-04-27 11:28 ` J. Bruce Fields
2012-05-01 18:57 ` Steve Dickson
1 sibling, 0 replies; 3+ messages in thread
From: J. Bruce Fields @ 2012-04-27 11:28 UTC (permalink / raw)
To: Weston Andros Adamson; +Cc: SteveD, linux-nfs
On Tue, Apr 24, 2012 at 11:00:07AM -0400, Weston Andros Adamson wrote:
> mountd uses colons to split fsloc hosts, but this doesn't work with IPv6
> addresses (they contain ':').
> To fix this, mountd is changed to expect all IPv6 addresses to be escaped
> by '[' and ']' so colons that are part of the address may be skipped.
> To fix IPv6 referrals, this patch must be used with the nfsd patch that
> properly parses escaped IPv6 addresses in fs_location->hosts.
Looks OK to me.--b.
>
> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
> ---
> utils/mountd/fsloc.c | 20 +++++++++++++++++---
> 1 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/utils/mountd/fsloc.c b/utils/mountd/fsloc.c
> index 704b7a0..bc737d1 100644
> --- a/utils/mountd/fsloc.c
> +++ b/utils/mountd/fsloc.c
> @@ -120,10 +120,11 @@ static struct servers *parse_list(char **list)
> */
> static struct servers *method_list(char *data)
> {
> - char *copy, *ptr=data;
> + char *copy, *ptr=data, *p;
> char **list;
> int i, listsize;
> struct servers *rv=NULL;
> + bool v6esc = false;
>
> xlog(L_NOTICE, "method_list(%s)", data);
> for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
> @@ -134,9 +135,22 @@ static struct servers *method_list(char *data)
> xlog(L_NOTICE, "converted to %s", copy);
> if (list && copy) {
> ptr = copy;
> - for (i=0; i<listsize; i++) {
> - list[i] = strsep(&ptr, ":");
> + for (p = ptr, i = 0; *p && i < listsize; p++) {
> + if (*p == '[')
> + v6esc = true;
> + else if (*p == ']')
> + v6esc = false;
> +
> + if (!v6esc && *p == ':') {
> + *p = '\0';
> + if (*ptr)
> + list[i++] = ptr;
> + ptr = p + 1;
> + }
> }
> + if (*ptr)
> + list[i++] = ptr;
> + list[i] = NULL;
> rv = parse_list(list);
> }
> free(copy);
> --
> 1.7.4.4
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] mountd: support IPv6 [] escaping with fsloc hosts
2012-04-24 15:00 [PATCH] mountd: support IPv6 [] escaping with fsloc hosts Weston Andros Adamson
2012-04-27 11:28 ` J. Bruce Fields
@ 2012-05-01 18:57 ` Steve Dickson
1 sibling, 0 replies; 3+ messages in thread
From: Steve Dickson @ 2012-05-01 18:57 UTC (permalink / raw)
To: Weston Andros Adamson; +Cc: bfields, linux-nfs
On 04/24/2012 11:00 AM, Weston Andros Adamson wrote:
> mountd uses colons to split fsloc hosts, but this doesn't work with IPv6
> addresses (they contain ':').
> To fix this, mountd is changed to expect all IPv6 addresses to be escaped
> by '[' and ']' so colons that are part of the address may be skipped.
> To fix IPv6 referrals, this patch must be used with the nfsd patch that
> properly parses escaped IPv6 addresses in fs_location->hosts.
>
> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
Committed...
steved.
> ---
> utils/mountd/fsloc.c | 20 +++++++++++++++++---
> 1 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/utils/mountd/fsloc.c b/utils/mountd/fsloc.c
> index 704b7a0..bc737d1 100644
> --- a/utils/mountd/fsloc.c
> +++ b/utils/mountd/fsloc.c
> @@ -120,10 +120,11 @@ static struct servers *parse_list(char **list)
> */
> static struct servers *method_list(char *data)
> {
> - char *copy, *ptr=data;
> + char *copy, *ptr=data, *p;
> char **list;
> int i, listsize;
> struct servers *rv=NULL;
> + bool v6esc = false;
>
> xlog(L_NOTICE, "method_list(%s)", data);
> for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
> @@ -134,9 +135,22 @@ static struct servers *method_list(char *data)
> xlog(L_NOTICE, "converted to %s", copy);
> if (list && copy) {
> ptr = copy;
> - for (i=0; i<listsize; i++) {
> - list[i] = strsep(&ptr, ":");
> + for (p = ptr, i = 0; *p && i < listsize; p++) {
> + if (*p == '[')
> + v6esc = true;
> + else if (*p == ']')
> + v6esc = false;
> +
> + if (!v6esc && *p == ':') {
> + *p = '\0';
> + if (*ptr)
> + list[i++] = ptr;
> + ptr = p + 1;
> + }
> }
> + if (*ptr)
> + list[i++] = ptr;
> + list[i] = NULL;
> rv = parse_list(list);
> }
> free(copy);
> -- 1.7.4.4
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-05-01 18:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-24 15:00 [PATCH] mountd: support IPv6 [] escaping with fsloc hosts Weston Andros Adamson
2012-04-27 11:28 ` J. Bruce Fields
2012-05-01 18:57 ` Steve Dickson
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).