svn commit: samba r2917 - in branches/SAMBA_3_0/source/client: .

sfrench at samba.org sfrench at samba.org
Mon Oct 11 16:30:15 GMT 2004


Author: sfrench
Date: 2004-10-11 16:30:14 +0000 (Mon, 11 Oct 2004)
New Revision: 2917

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_3_0/source/client&rev=2917&nolog=1

Log:
Fix ip address override in mount.cifs mount helper and clean up warning messages from the sparse tool and expand syntax help

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	2004-10-11 14:35:54 UTC (rev 2916)
+++ branches/SAMBA_3_0/source/client/mount.cifs.c	2004-10-11 16:30:14 UTC (rev 2917)
@@ -38,7 +38,7 @@
 #include <fcntl.h>
 
 #define MOUNT_CIFS_VERSION_MAJOR "1"
-#define MOUNT_CIFS_VERSION_MINOR "4"
+#define MOUNT_CIFS_VERSION_MINOR "5"
 
 #ifndef MOUNT_CIFS_VENDOR_SUFFIX
 #define MOUNT_CIFS_VENDOR_SUFFIX ""
@@ -77,7 +77,13 @@
 	printf("\nMount the remote target, specified as a UNC name,");
 	printf(" to a local directory.\n\nOptions:\n");
 	printf("\tuser=<arg>\n\tpass=<arg>\n\tdom=<arg>\n");
-	printf("\nOther less commonly used options are described in the manual page");
+	printf("\nLess commonly used options:");
+	printf("\n\tcredentials=<filename>,guest,perm,noperm,setuids,nosetuids,\n\trw,ro,sep=<char>,iocharset=<codepage>,suid,nosuid,exec,noexec");
+	printf("\n\nOptions not needed for servers supporting CIFS Unix extensions (e.g. most Samba versions):");
+	printf("\n\tuid=<uid>,gid=<gid>,dir_mode=<mode>,file_mode=<mode>");
+	printf("\n\nRarely used options:");
+	printf("\n\tport=<tcpport>,rsize=<size>,wsize=<size>,unc=<unc_name>,ip=<ip_address>,dev,nodev");
+	printf("\n\nOptions are described in more detail in the manual page");
 	printf("\n\tman 8 mount.cifs\n");
 	printf("\nTo display the version number of the mount helper:");
 	printf("\n\t%s -V\n",thisprogram);
@@ -246,9 +252,9 @@
 static int parse_options(char * options, int * filesys_flags)
 {
 	char * data;
-	char * percent_char = 0;
-	char * value = 0;
-	char * next_keyword = 0;
+	char * percent_char = NULL;
+	char * value = NULL;
+	char * next_keyword = NULL;
 	int rc = 0;
 
 	if (!options)
@@ -344,6 +350,8 @@
 			if (!value || !*value) {
 				printf("target ip address argument missing");
 			} else if (strnlen(value, 35) < 35) {
+				if(verboseflag)
+					printf("ip address %s override specified\n",value);
 				got_ip = 1;
 			} else {
 				printf("ip address too long\n");
@@ -497,7 +505,7 @@
 		if(next_keyword)
 			*next_keyword = ',';
 		else
-			data = 0;
+			data = NULL;
 	}
 	return 0;
 }
@@ -515,7 +523,7 @@
 
 	if(length > 1023) {
 		printf("mount error: UNC name too long");
-		return 0;
+		return NULL;
 	}
 	if (strncasecmp("cifs://",unc_name,7) == 0)
 		return parse_cifs_url(unc_name+7);
@@ -526,7 +534,7 @@
 	if(length < 3) {
 		/* BB add code to find DFS root here */
 		printf("\nMounting the DFS root for domain not implemented yet");
-		return 0;
+		return NULL;
 	} else {
 		if(strncmp(unc_name,"//",2) && strncmp(unc_name,"\\\\",2)) {
 			/* check for nfs syntax ie server:share */
@@ -542,7 +550,7 @@
 			} else {
 				printf("mount error: improperly formatted UNC name.");
 				printf(" %s does not begin with \\\\ or //\n",unc_name);
-				return 0;
+				return NULL;
 			}
 		} else {
 continue_unc_parsing:
@@ -553,15 +561,20 @@
 				(share = strchr(unc_name,'\\'))) {
 				*share = 0;  /* temporarily terminate the string */
 				share += 1;
-				host_entry = gethostbyname(unc_name);
+				if(got_ip == 0) {
+					host_entry = gethostbyname(unc_name);
+				}
 				*(share - 1) = '/'; /* put the slash back */
-/*				rc = getipnodebyname(unc_name, AF_INET, AT_ADDRCONFIG ,&rc);*/
+				if(got_ip) {
+					if(verboseflag)
+						printf("ip address specified explicitly\n");
+					return NULL;
+				}
 				if(host_entry == NULL) {
 					printf("mount error: could not find target server. TCP name %s not found ", unc_name);
 					printf(" rc = %d\n",rc);
-					return 0;
-				}
-				else {
+					return NULL;
+				} else {
 					/* BB should we pass an alternate version of the share name as Unicode */
 					/* BB what about ipv6? BB */
 					/* BB add retries with alternate servers in list */
@@ -571,46 +584,46 @@
 					ipaddress_string = inet_ntoa(server_ipaddr);                                                                                     
 					if(ipaddress_string == NULL) {
 						printf("mount error: could not get valid ip address for target server\n");
-						return 0;
+						return NULL;
 					}
 					return ipaddress_string; 
 				}
 			} else {
 				/* BB add code to find DFS root (send null path on get DFS Referral to specified server here */
 				printf("Mounting the DFS root for a particular server not implemented yet\n");
-				return 0;
+				return NULL;
 			}
 		}
 	}
 }
 
 static struct option longopts[] = {
-	{ "all", 0, 0, 'a' },
-	{ "help",0, 0, 'h' },
-	{ "move",0, 0, 'm' },
-	{ "bind",0, 0, 'b' },
-	{ "read-only", 0, 0, 'r' },
-	{ "ro", 0, 0, 'r' },
-	{ "verbose", 0, 0, 'v' },
-	{ "version", 0, 0, 'V' },
-	{ "read-write", 0, 0, 'w' },
-	{ "rw", 0, 0, 'w' },
-	{ "options", 1, 0, 'o' },
-	{ "type", 1, 0, 't' },
-	{ "rsize",1, 0, 'R' },
-	{ "wsize",1, 0, 'W' },
-	{ "uid", 1, 0, '1'},
-	{ "gid", 1, 0, '2'},
-	{ "user",1,0,'u'},
-	{ "username",1,0,'u'},
-	{ "dom",1,0,'d'},
-	{ "domain",1,0,'d'},
-	{ "password",1,0,'p'},
-	{ "pass",1,0,'p'},
-	{ "credentials",1,0,'c'},
-	{ "port",1,0,'P'},
-	/* { "uuid",1,0,'U'}, */ /* BB unimplemented */
-	{ NULL, 0, 0, 0 }
+	{ "all", 0, NULL, 'a' },
+	{ "help",0, NULL, 'h' },
+	{ "move",0, NULL, 'm' },
+	{ "bind",0, NULL, 'b' },
+	{ "read-only", 0, NULL, 'r' },
+	{ "ro", 0, NULL, 'r' },
+	{ "verbose", 0, NULL, 'v' },
+	{ "version", 0, NULL, 'V' },
+	{ "read-write", 0, NULL, 'w' },
+	{ "rw", 0, NULL, 'w' },
+	{ "options", 1, NULL, 'o' },
+	{ "type", 1, NULL, 't' },
+	{ "rsize",1, NULL, 'R' },
+	{ "wsize",1, NULL, 'W' },
+	{ "uid", 1, NULL, '1'},
+	{ "gid", 1, NULL, '2'},
+	{ "user",1,NULL,'u'},
+	{ "username",1,NULL,'u'},
+	{ "dom",1,NULL,'d'},
+	{ "domain",1,NULL,'d'},
+	{ "password",1,NULL,'p'},
+	{ "pass",1,NULL,'p'},
+	{ "credentials",1,NULL,'c'},
+	{ "port",1,NULL,'P'},
+	/* { "uuid",1,NULL,'U'}, */ /* BB unimplemented */
+	{ NULL, 0, NULL, 0 }
 };
 
 int main(int argc, char ** argv)
@@ -767,12 +780,15 @@
 		get_password_from_file(0, getenv("PASSWD_FILE"));
 	}
 
+        if (orgoptions && parse_options(orgoptions, &flags))
+                return -1;
+	
 	ipaddr = parse_server(&share_name);
-	if(ipaddr == NULL)
+	if((ipaddr == NULL) && (got_ip == 0)) {
+		printf("No ip address specified and hostname not found\n");
 		return -1;
+	}
 	
-	if (orgoptions && parse_options(orgoptions, &flags))
-		return -1;
 
 	/* BB save off path and pop after mount returns? */
 	resolved_path = malloc(PATH_MAX+1);



More information about the samba-cvs mailing list