Re: [PATCH] Cleanup handling of NULL value passed for a mount option

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

 



Sachin,
Did you doublecheck the other 9 string based parms that we can pass in
(domain etc.) that don't have special casing yet?  Do any of them need
changes too?

On Tue, Apr 10, 2012 at 12:12 PM, Sachin Prabhu <sprabhu@xxxxxxxxxx> wrote:
> Allow blank user= and ip= mount option. Also clean up redundant
> checks for NULL values since the token parser will not actually
> match mount options with NULL values unless explicitly specified.
>
> Signed-off-by: Sachin Prabhu <sprabhu@xxxxxxxxxx>
> Reported-by: Chris Clayton <chris2553@xxxxxxxxxxxxxx>
>
> ---
>  fs/cifs/connect.c |   80 ++++++++++++----------------------------------------
>  1 files changed, 19 insertions(+), 61 deletions(-)
>
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index d81e933..6a86f3d 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -109,6 +109,8 @@ enum {
>
>        /* Options which could be blank */
>        Opt_blank_pass,
> +       Opt_blank_user,
> +       Opt_blank_ip,
>
>        Opt_err
>  };
> @@ -183,11 +185,15 @@ static const match_table_t cifs_mount_option_tokens = {
>        { Opt_wsize, "wsize=%s" },
>        { Opt_actimeo, "actimeo=%s" },
>
> +       { Opt_blank_user, "user=" },
> +       { Opt_blank_user, "username=" },
>        { Opt_user, "user=%s" },
>        { Opt_user, "username=%s" },
>        { Opt_blank_pass, "pass=" },
>        { Opt_pass, "pass=%s" },
>        { Opt_pass, "password=%s" },
> +       { Opt_blank_ip, "ip=" },
> +       { Opt_blank_ip, "addr=" },
>        { Opt_ip, "ip=%s" },
>        { Opt_ip, "addr=%s" },
>        { Opt_unc, "unc=%s" },
> @@ -1534,15 +1540,17 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>
>                /* String Arguments */
>
> +               case Opt_blank_user:
> +                       /* null user, ie. anonymous authentication */
> +                       vol->nullauth = 1;
> +                       vol->username = NULL;
> +                       break;
>                case Opt_user:
>                        string = match_strdup(args);
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               /* null user, ie. anonymous authentication */
> -                               vol->nullauth = 1;
> -                       } else if (strnlen(string, MAX_USERNAME_SIZE) >
> +                       if (strnlen(string, MAX_USERNAME_SIZE) >
>                                                        MAX_USERNAME_SIZE) {
>                                printk(KERN_WARNING "CIFS: username too long\n");
>                                goto cifs_parse_mount_err;
> @@ -1611,14 +1619,15 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        }
>                        vol->password[j] = '\0';
>                        break;
> +               case Opt_blank_ip:
> +                       vol->UNCip = NULL;
> +                       break;
>                case Opt_ip:
>                        string = match_strdup(args);
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               vol->UNCip = NULL;
> -                       } else if (strnlen(string, INET6_ADDRSTRLEN) >
> +                       if (strnlen(string, INET6_ADDRSTRLEN) >
>                                                INET6_ADDRSTRLEN) {
>                                printk(KERN_WARNING "CIFS: ip address "
>                                                    "too long\n");
> @@ -1636,12 +1645,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: invalid path to "
> -                                                   "network resource\n");
> -                               goto cifs_parse_mount_err;
> -                       }
> -
>                        temp_len = strnlen(string, 300);
>                        if (temp_len  == 300) {
>                                printk(KERN_WARNING "CIFS: UNC name too long\n");
> @@ -1670,11 +1673,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: invalid domain"
> -                                                   " name\n");
> -                               goto cifs_parse_mount_err;
> -                       } else if (strnlen(string, 256) == 256) {
> +                       if (strnlen(string, 256) == 256) {
>                                printk(KERN_WARNING "CIFS: domain name too"
>                                                    " long\n");
>                                goto cifs_parse_mount_err;
> @@ -1693,11 +1692,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: srcaddr value not"
> -                                                   " specified\n");
> -                               goto cifs_parse_mount_err;
> -                       } else if (!cifs_convert_address(
> +                       if (!cifs_convert_address(
>                                        (struct sockaddr *)&vol->srcaddr,
>                                        string, strlen(string))) {
>                                printk(KERN_WARNING "CIFS:  Could not parse"
> @@ -1710,11 +1705,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: Invalid path"
> -                                                   " prefix\n");
> -                               goto cifs_parse_mount_err;
> -                       }
>                        temp_len = strnlen(string, 1024);
>                        if (string[0] != '/')
>                                temp_len++; /* missing leading slash */
> @@ -1742,11 +1732,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: Invalid iocharset"
> -                                                   " specified\n");
> -                               goto cifs_parse_mount_err;
> -                       } else if (strnlen(string, 1024) >= 65) {
> +                       if (strnlen(string, 1024) >= 65) {
>                                printk(KERN_WARNING "CIFS: iocharset name "
>                                                    "too long.\n");
>                                goto cifs_parse_mount_err;
> @@ -1771,11 +1757,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: No socket option"
> -                                                   " specified\n");
> -                               goto cifs_parse_mount_err;
> -                       }
>                        if (strnicmp(string, "TCP_NODELAY", 11) == 0)
>                                vol->sockopt_tcp_nodelay = 1;
>                        break;
> @@ -1784,12 +1765,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: Invalid (empty)"
> -                                                   " netbiosname\n");
> -                               break;
> -                       }
> -
>                        memset(vol->source_rfc1001_name, 0x20,
>                                RFC1001_NAME_LEN);
>                        /*
> @@ -1817,11 +1792,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: Empty server"
> -                                       " netbiosname specified\n");
> -                               break;
> -                       }
>                        /* last byte, type, is 0x20 for servr type */
>                        memset(vol->target_rfc1001_name, 0x20,
>                                RFC1001_NAME_LEN_WITH_NULL);
> @@ -1848,12 +1818,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               cERROR(1, "no protocol version specified"
> -                                         " after vers= mount option");
> -                               goto cifs_parse_mount_err;
> -                       }
> -
>                        if (strnicmp(string, "cifs", 4) == 0 ||
>                            strnicmp(string, "1", 1) == 0) {
>                                /* This is the default */
> @@ -1868,12 +1832,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                        if (string == NULL)
>                                goto out_nomem;
>
> -                       if (!*string) {
> -                               printk(KERN_WARNING "CIFS: no security flavor"
> -                                                   " specified\n");
> -                               break;
> -                       }
> -
>                        if (cifs_parse_security_flavors(string, vol) != 0)
>                                goto cifs_parse_mount_err;
>                        break;
> --
> 1.7.7.6
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Thanks,

Steve
ÿôèº{.nÇ+?·?®?­?+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±ýÈ?³ø§¶?¡Ü¨}©?²Æ zÚ&j:+v?¨þø¯ù®w¥þ?à2?Þ?¨è­Ú&¢)ß¡«a¶Úÿÿûàz¿äz¹Þ?ú+?ù???Ý¢jÿ?wèþf



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux