On Sun, 14 Apr 2013 14:19:18 -0400
[email protected] wrote:

> From: Scott Lovenberg <[email protected]>
> 
> The standard for formatting IPv6 addresses is to enclose them in brackets.
> This patch allows the mount helper to parse IPv6 addresses that are enclosed 
> in brackets.
> There is a slight change of behavior in this patch; specifying the --ip 
> option without
> supplying an address now exits the mount helper rather than just ignoring and 
> continuing.
> 
> Signed-off-by: Scott Lovenberg <[email protected]>
> ---
>  AUTHORS      |    1 +
>  mount.cifs.c |   63 
> ++++++++++++++++++++++++++++++++++++++++++----------------
>  2 files changed, 47 insertions(+), 17 deletions(-)
> 
> diff --git a/AUTHORS b/AUTHORS
> index 2807079..081c2fe 100644
> --- a/AUTHORS
> +++ b/AUTHORS
> @@ -5,5 +5,6 @@ Shirish Pargaonkar <[email protected]>
>  Suresh Jayaraman <[email protected]>
>  Pavel Shilovsky <[email protected]>
>  Igor Druzhinin <[email protected]>
> +Scott Lovenberg <[email protected]>
>  
>  ...and others.
> diff --git a/mount.cifs.c b/mount.cifs.c
> index 3b2b89e..276f50d 100644
> --- a/mount.cifs.c
> +++ b/mount.cifs.c
> @@ -751,6 +751,48 @@ static int parse_opt_token(const char *token)
>       return OPT_ERROR;
>  }
>  
> +/* 
> +  Extract an ipv4 or ipv6 address and put it into parsed_info. 
> +  Returns 0 on success.
> +*/
> +static int parse_ip(char *value, struct parsed_mount_info *parsed_info)
> +{
> +     char *closingBracket = NULL;
> +
> +     if (!value || !*value) {
> +             fprintf(stderr, "target ip address argument missing\n");
> +             return OPT_ERROR;

I think you want something like EX_USAGE here.

> +     }
> +
> +     /* check for ipv6 in brackets */
> +     if (value[0] == '[') {
> +             value++;
> +             /* temporarily null the closing bracket */
> +             closingBracket = strchr(value, ']');
> +             if (closingBracket)
> +                     *closingBracket = '\0';
> +     }
> +
> +     /* check length of address*/
> +     if (strnlen(value, MAX_ADDRESS_LEN + 1) > MAX_ADDRESS_LEN) {
> +             fprintf(stderr, "ip address too long\n");
> +             if (closingBracket)
> +                     *closingBracket = ']';
> +             return EX_USAGE;
> +     }
> +
> +     /* all test pass, copy it */
> +     strcpy(parsed_info->addrlist, value);
> +     if (parsed_info->verboseflag)
> +             fprintf(stderr, "ip address %s override specified\n", value);
> +
> +     /* put back closing bracket */
> +     if (closingBracket)
> +             *closingBracket = ']';
> +
> +     return 0;
> +}
> +
>  static int
>  parse_options(const char *data, struct parsed_mount_info *parsed_info)
>  {
> @@ -861,23 +903,10 @@ parse_options(const char *data, struct 
> parsed_mount_info *parsed_info)
>                       break;
>  
>               case OPT_IP:
> -                     if (!value || !*value) {
> -                             fprintf(stderr,
> -                                     "target ip address argument missing\n");
> -                     } else if (strnlen(value, MAX_ADDRESS_LEN) <=
> -                             MAX_ADDRESS_LEN) {
> -                             strcpy(parsed_info->addrlist, value);
> -                             if (parsed_info->verboseflag)
> -                                     fprintf(stderr,
> -                                             "ip address %s override 
> specified\n",
> -                                             value);
> -                             goto nocopy;
> -                     } else {
> -                             fprintf(stderr, "ip address too long\n");
> -                             return EX_USAGE;
> -
> -                     }
> -                     break;
> +                     rc = parse_ip(value, parsed_info);
> +                     if (rc)
> +                             return rc;                      
> +                     goto nocopy;
>  
>               /* unc || target || path */
>               case OPT_UNC:


-- 
Jeff Layton <[email protected]>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to