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

sfrench at samba.org sfrench at samba.org
Thu Mar 3 04:07:56 GMT 2005


Author: sfrench
Date: 2005-03-03 04:07:55 +0000 (Thu, 03 Mar 2005)
New Revision: 5640

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

Log:
On failed mount (ENXIO) retry share name in uppercase (fix mount to FastConnect AIX SMB server)

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	2005-03-03 04:05:33 UTC (rev 5639)
+++ branches/SAMBA_3_0/source/client/mount.cifs.c	2005-03-03 04:07:55 UTC (rev 5640)
@@ -24,6 +24,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <pwd.h>
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
@@ -38,7 +39,7 @@
 #include <fcntl.h>
 
 #define MOUNT_CIFS_VERSION_MAJOR "1"
-#define MOUNT_CIFS_VERSION_MINOR "5"
+#define MOUNT_CIFS_VERSION_MINOR "6"
 
 #ifndef MOUNT_CIFS_VENDOR_SUFFIX
 #define MOUNT_CIFS_VENDOR_SUFFIX ""
@@ -657,6 +658,7 @@
 	int gid = 0;
 	int optlen = 0;
 	int orgoptlen = 0;
+	int retry = 0; /* set when we have to retry mount with uppercase */
 	struct stat statbuf;
 	struct utsname sysinfo;
 	struct mntent mountent;
@@ -846,6 +848,7 @@
 	}
 	/* FIXME launch daemon (handles dfs name resolution and credential change) 
 	   remember to clear parms and overwrite password field before launching */
+mount_retry:
 	if(orgoptions) {
 		optlen = strlen(orgoptions);
 		orgoptlen = optlen;
@@ -897,6 +900,8 @@
 		printf("\nmount.cifs kernel mount options %s \n",options);
 	if(mount(share_name, mountpoint, "cifs", flags, options)) {
 	/* remember to kill daemon on error */
+		char * tmp;
+
 		switch (errno) {
 		case 0:
 			printf("mount failed but no error number set\n");
@@ -904,7 +909,21 @@
 		case ENODEV:
 			printf("mount error: cifs filesystem not supported by the system\n");
 			break;
+		case ENXIO:
+			if(retry == 0) {
+				retry = 1;
+				tmp = share_name;
+				while (*tmp && !(((unsigned char)tmp[0]) & 0x80)) {
+					*tmp = toupper((unsigned char)*tmp);
+		        		tmp++;
+				}
+				if(!*tmp) {
+					printf("retrying with upper case share name\n");
+					goto mount_retry;
+				}
+			}
 		default:
+			
 			printf("mount error %d = %s\n",errno,strerror(errno));
 		}
 		printf("Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)\n");



More information about the samba-cvs mailing list