1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-29 13:49:30 +03:00

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

(This used to be commit 8bd98b643d)
This commit is contained in:
Steve French
2005-03-03 04:07:55 +00:00
committed by Gerald (Jerry) Carter
parent 7f697e6da1
commit 73d7fb0fd0

View File

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