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:
committed by
Gerald (Jerry) Carter
parent
7f697e6da1
commit
73d7fb0fd0
@ -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");
|
||||||
|
Reference in New Issue
Block a user