r737: Handle -S and user mount parms
authorSteve French <sfrench@samba.org>
Fri, 14 May 2004 18:05:06 +0000 (18:05 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:51:36 +0000 (10:51 -0500)
(This used to be commit ea597e75237cf14343b217da7119f9ade2303ae5)

source3/client/mount.cifs.c

index ad202d1da102375f6280250a1d5214ebb8f9c1d9..5670a147468c172efb7f68e95037f7f9d60fcdc6 100755 (executable)
@@ -38,7 +38,7 @@
 #include <fcntl.h>
 
 #define MOUNT_CIFS_VERSION_MAJOR "1"
-#define MOUNT_CIFS_VERSION_MINOR "2"
+#define MOUNT_CIFS_VERSION_MINOR "3"
 
 #ifndef MOUNT_CIFS_VENDOR_SUFFIX
 #define MOUNT_CIFS_VENDOR_SUFFIX ""
@@ -285,32 +285,45 @@ static int parse_options(char * options, int * filesys_flags)
 
                if (strncmp(data, "user", 4) == 0) {
                        if (!value || !*value) {
-                               printf("invalid or missing username\n");
-                               return 1;       /* needs_arg; */
-                       }
-                       if (strnlen(value, 260) < 260) {
-                               got_user=1;
-                               percent_char = strchr(value,'%');
-                               if(percent_char) {
-                                       *percent_char = ',';
-                                       if(mountpassword == NULL)
-                                               mountpassword = calloc(65,1);
-                                       if(mountpassword) {
-                                               if(got_password)
-                                                       printf("\nmount.cifs warning - password specified twice\n");
-                                               got_password = 1;
-                                               percent_char++;
-                                               strncpy(mountpassword, percent_char,64);
-                                       /*  remove password from username */
-                                               while(*percent_char != 0) {
-                                                       *percent_char = ',';
+                               if(data[4] == '\0') {
+                                       if(verboseflag)
+                                               printf("\nskipping empty user mount parameter\n");
+                                       /* remove the parm since it would otherwise be confusing
+                                       to the kernel code which would think it was a real username */
+                                               data[0] = ',';
+                                               data[1] = ',';
+                                               data[2] = ',';
+                                               data[3] = ',';
+                                       /* BB remove it from mount line so as not to confuse kernel code */
+                               } else {
+                                       printf("username specified with no parameter\n");
+                                       return 1;       /* needs_arg; */
+                               }
+                       } else {
+                               if (strnlen(value, 260) < 260) {
+                                       got_user=1;
+                                       percent_char = strchr(value,'%');
+                                       if(percent_char) {
+                                               *percent_char = ',';
+                                               if(mountpassword == NULL)
+                                                       mountpassword = calloc(65,1);
+                                               if(mountpassword) {
+                                                       if(got_password)
+                                                               printf("\nmount.cifs warning - password specified twice\n");
+                                                       got_password = 1;
                                                        percent_char++;
+                                                       strncpy(mountpassword, percent_char,64);
+                                               /*  remove password from username */
+                                                       while(*percent_char != 0) {
+                                                               *percent_char = ',';
+                                                               percent_char++;
+                                                       }
                                                }
                                        }
+                               } else {
+                                       printf("username too long\n");
+                                       return 1;
                                }
-                       } else {
-                               printf("username too long\n");
-                               return 1;
                        }
                } else if (strncmp(data, "pass", 4) == 0) {
                        if (!value || !*value) {
@@ -634,7 +647,7 @@ int main(int argc, char ** argv)
 
        /* add sharename in opts string as unc= parm */
 
-       while ((c = getopt_long (argc, argv, "afFhilL:no:O:rsU:vVwt:",
+       while ((c = getopt_long (argc, argv, "afFhilL:no:O:rsSU:vVwt:",
                         longopts, NULL)) != -1) {
                switch (c) {
 /* No code to do the following  options yet */
@@ -712,6 +725,9 @@ int main(int argc, char ** argv)
                                strncpy(mountpassword,optarg,64);
                        }
                        break;
+               case 'S':
+                       get_password_from_file(0 /* stdin */,NULL);
+                       break;
                case 't':
                        break;
                default: