diff options
author | Steve French <sfrench@samba.org> | 2005-03-03 04:07:55 +0000 |
---|---|---|
committer | Steve French <sfrench@samba.org> | 2005-03-03 04:07:55 +0000 |
commit | 325be780fe47fde6d3cffcf7d78276204b1d4fd4 (patch) | |
tree | 4ee2979be6cba1a45ee7fc99efcbb60a0caee598 /source/client | |
parent | d7f69c94259921efc95810566b3c01488eef207d (diff) | |
download | samba-325be780fe47fde6d3cffcf7d78276204b1d4fd4.tar.gz samba-325be780fe47fde6d3cffcf7d78276204b1d4fd4.tar.xz samba-325be780fe47fde6d3cffcf7d78276204b1d4fd4.zip |
r5640: On failed mount (ENXIO) retry share name in uppercase (fix mount to FastConnect AIX SMB server)
Diffstat (limited to 'source/client')
-rwxr-xr-x | source/client/mount.cifs.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/source/client/mount.cifs.c b/source/client/mount.cifs.c index d648629f9c3..5aa6056fe8a 100755 --- a/source/client/mount.cifs.c +++ b/source/client/mount.cifs.c @@ -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 main(int argc, char ** argv) 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 @@ int main(int argc, char ** argv) } /* 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 @@ int main(int argc, char ** argv) 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 @@ int main(int argc, char ** argv) 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"); |