Author: sfrench
Date: 2007-05-17 22:28:28 +0000 (Thu, 17 May 2007)
New Revision: 22979

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22979

Log:
Revert previous checkin (which had some debug junk) and fix misc frees that
valgrind noticed

Modified:
   branches/SAMBA_3_0/source/client/mount.cifs.c


Changeset:
Modified: branches/SAMBA_3_0/source/client/mount.cifs.c
===================================================================
--- branches/SAMBA_3_0/source/client/mount.cifs.c       2007-05-17 22:27:42 UTC 
(rev 22978)
+++ branches/SAMBA_3_0/source/client/mount.cifs.c       2007-05-17 22:28:28 UTC 
(rev 22979)
@@ -79,8 +79,8 @@
 static char * mountpassword = NULL;
 char * domain_name = NULL;
 char * prefixpath = NULL;
-char * servern = NULL;
 
+
 /* BB finish BB
 
         cifs_umount
@@ -128,8 +128,7 @@
        struct passwd *password = getpwuid(getuid());
 
        if (password) {
-               if(password->pw_name);
-                       username = strdup(password->pw_name);
+               username = password->pw_name;
        }
        return username;
 }
@@ -420,11 +419,6 @@
                                printf("password too long\n");
                                return 1;
                        }
-               } else if (strncmp(data, "sec", 3) == 0) {
-                       if (value) {
-                               if (!strcmp(value, "none"))
-                                       got_password = 1;
-                       }
                } else if (strncmp(data, "ip", 2) == 0) {
                        if (!value || !*value) {
                                printf("target ip address argument missing");
@@ -573,6 +567,8 @@
                        *filesys_flags &= ~MS_NOEXEC;
                } else if (strncmp(data, "guest", 5) == 0) {
                        got_password=1;
+                        /* remove the parm since it would otherwise be logged 
by kern */
+                       goto nocopy;
                } else if (strncmp(data, "ro", 2) == 0) {
                        *filesys_flags |= MS_RDONLY;
                } else if (strncmp(data, "rw", 2) == 0) {
@@ -809,9 +805,6 @@
                                if(got_ip == 0) {
                                        host_entry = gethostbyname(unc_name);
                                }
-                               if(strnlen(unc_name, 16) < 16) {
-                                       servern = strdup(unc_name);
-                               }
                                *(share - 1) = '/'; /* put the slash back */
                                if ((prefixpath = strchr(share, '/'))) {
                                        *prefixpath = 0;  /* permanently 
terminate the string */
@@ -888,7 +881,7 @@
        char * uuid = NULL;
        char * mountpoint = NULL;
        char * options = NULL;
-       char * resolved_path;
+       char * resolved_path = NULL;
        char * temp;
        int rc;
        int rsize = 0;
@@ -899,7 +892,6 @@
        int optlen = 0;
        int orgoptlen = 0;
        int retry = 0; /* set when we have to retry mount with uppercase */
-       int retry_with_rfc1001name = 0; /* set when we have to retry with 
netbios name */
        struct stat statbuf;
        struct utsname sysinfo;
        struct mntent mountent;
@@ -1085,12 +1077,15 @@
                get_password_from_file(0, getenv("PASSWD_FILE"));
        }
 
-        if (orgoptions && parse_options(&orgoptions, &flags))
-                return -1;
+        if (orgoptions && parse_options(&orgoptions, &flags)) {
+                rc = -1;
+               goto mount_exit;
+       }
        ipaddr = parse_server(&share_name);
        if((ipaddr == NULL) && (got_ip == 0)) {
                printf("No ip address specified and hostname not found\n");
-               return -1;
+               rc = -1;
+               goto mount_exit;
        }
        
        /* BB save off path and pop after mount returns? */
@@ -1104,17 +1099,20 @@
        }
        if(chdir(mountpoint)) {
                printf("mount error: can not change directory into mount target 
%s\n",mountpoint);
-               return -1;
+               rc = -1;
+               goto mount_exit;
        }
 
        if(stat (".", &statbuf)) {
                printf("mount error: mount point %s does not 
exist\n",mountpoint);
-               return -1;
+               rc = -1;
+               goto mount_exit;
        }
 
        if (S_ISDIR(statbuf.st_mode) == 0) {
                printf("mount error: mount point %s is not a 
directory\n",mountpoint);
-               return -1;
+               rc = -1;
+               goto mount_exit;
        }
 
        if((getuid() != 0) && (geteuid() == 0)) {
@@ -1160,40 +1158,28 @@
                optlen += strlen(ipaddr) + 4;
        if(mountpassword)
                optlen += strlen(mountpassword) + 6;
-       if(options) {
-               printf("\norg options %s at %p\n", options, options); /* BB 
removeme BB */
-
+       if(options)
                free(options);
-       }
-       options = malloc(optlen + 10 + 64 /* space for commas in password */ + 
8 /* space for domain=  , domain name itself was counted as part of the length 
username string above */) + 9 /* servern=" */ + 16 /* space for maximum RFC1001 
name */;
+       options = (char *)malloc(optlen + 10 + 64 /* space for commas in 
password */ + 8 /* space for domain=  , domain name itself was counted as part 
of the length username string above */);
+
        if(options == NULL) {
                printf("Could not allocate memory for mount options\n");
                return -1;
        }
+               
 
-       printf("\noptions %s at %p\n", options, options); /* BB removeme BB */  
        
-       options = realloc(options, 3350); /* BB removeme BB */
-       printf("\nrealloc seems ok\n"); /* BB removeme BB */
        options[0] = 0;
        strncat(options,"unc=",4);
        strcat(options,share_name);
        /* scan backwards and reverse direction of slash */
        temp = strrchr(options, '/');
-       options = realloc(options, 980); /* BB removeme BB */
-       printf("\nrealloc seemms very ok\n"); /* BB removeme BB */
        if(temp > options + 6)
                *temp = '\\';
        if(ipaddr) {
                strncat(options,",ip=",4);
                strcat(options,ipaddr);
        }
-       if((servern) && retry_with_rfc1001name) {
-               strcat(options, ",servern=");
-               strcat(options, servern);
-       }       
-        printf("\noptions1 %s at %p\n", options, options); /* BB removeme BB */
-        options = realloc(options, 1000); /* BB removeme BB */
-       printf("realloc1 ok\n"); /* BB removeme BB */
+
        if(user_name) {
                /* check for syntax like user=domain\user */
                if(got_domain == 0)
@@ -1217,7 +1203,6 @@
                strncat(options,",pass=",6);
                strcat(options,mountpassword);
        }
-        printf("\noptions2 %s at %p\n", options, options); /* BB removeme BB */
 
        strncat(options,",ver=",5);
        strcat(options,MOUNT_CIFS_VERSION_MAJOR);
@@ -1226,9 +1211,6 @@
                strcat(options,",");
                strcat(options,orgoptions);
        }
-
-        printf("\noptions2 at %p\n", options); /* BB removeme BB */
-
        if(prefixpath) {
                strncat(options,",prefixpath=",12);
                strcat(options,prefixpath); /* no need to cat the / */
@@ -1246,22 +1228,6 @@
                case ENODEV:
                        printf("mount error: cifs filesystem not supported by 
the system\n");
                        break;
-               case ENOENT:
-               case EHOSTDOWN:
-                       /* If this is so old as to not support *SMBSERVER called
-                          name for RFC1001, we can get this error . We also
-                          need to uppercase the sharename for these old servers
-                          so fall through to retry code below. On retry the
-                          code will add "servern=" */
-                       tmp = servern;
-                       if((retry == 0) && tmp) {
-                               retry_with_rfc1001name = 1;
-                               while (*tmp && !(((unsigned char)tmp[0]) & 
0x80)) {
-                                       *tmp = toupper((unsigned char)*tmp);
-                                       tmp++;
-                               }
-                               printf("Adding Netbios name of server to mount 
based on server part of UNC name\n");
-                       }
                case ENXIO:
                        if(retry == 0) {
                                retry = 1;
@@ -1310,7 +1276,7 @@
                                                
strcat(mountent.mnt_opts,",user=");
                                                
strcat(mountent.mnt_opts,mount_user);
                                        }
-                                       free(mount_user);
+                                       /* free(mount_user); do not free static 
mem */
                                }
                        }
                        mountent.mnt_freq = 0;
@@ -1332,9 +1298,7 @@
        }
 
        if(options) {
-               options = realloc(options, 1000); /* BB removeme BB */
-               printf("\noptions freed %p\n", options); /* BB removeme BB */
-/* memset(options,0,optlen); */
+               memset(options,0,optlen);
                free(options);
        }
 
@@ -1345,17 +1309,10 @@
        if(resolved_path) {
                free(resolved_path);
        }
-       
-       if(servern) {
-               free(servern);
-       }
 
        if(free_share_name) {
                free(share_name);
-       }
-       if(user_name)
-               free(user_name);
-
+               }
        return rc;
 }
 

Reply via email to