svn commit: samba r22979 - in branches/SAMBA_3_0/source/client: . 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;  }