[CIFS] Finish cifs mount option which requests case insensitive path
name matching. Signed-off-by: Steve French (sfrench@us.ibm.com)
This commit is contained in:
parent
c46fa8acdc
commit
d3485d37c0
@ -26,8 +26,7 @@
|
|||||||
#define CIFS_MOUNT_MAP_SPECIAL_CHR 0x20 /* remap illegal chars in filenames */
|
#define CIFS_MOUNT_MAP_SPECIAL_CHR 0x20 /* remap illegal chars in filenames */
|
||||||
#define CIFS_MOUNT_POSIX_PATHS 0x40 /* Negotiate posix pathnames if possible. */
|
#define CIFS_MOUNT_POSIX_PATHS 0x40 /* Negotiate posix pathnames if possible. */
|
||||||
#define CIFS_MOUNT_UNX_EMUL 0x80 /* Network compat with SFUnix emulation */
|
#define CIFS_MOUNT_UNX_EMUL 0x80 /* Network compat with SFUnix emulation */
|
||||||
#define CIFS_MOUNT_CASE_INSENS 0x100 /* Request case insenstive searches */
|
#define CIFS_MOUNT_NO_BRL 0x100 /* No sending byte range locks to srv */
|
||||||
#define CIFS_MOUNT_NO_BRL 0x200 /* No sending byte range locks to srv */
|
|
||||||
|
|
||||||
struct cifs_sb_info {
|
struct cifs_sb_info {
|
||||||
struct cifsTconInfo *tcon; /* primary mount */
|
struct cifsTconInfo *tcon; /* primary mount */
|
||||||
|
@ -110,8 +110,8 @@ enum protocolEnum {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
struct TCP_Server_Info {
|
struct TCP_Server_Info {
|
||||||
char server_Name[SERVER_NAME_LEN_WITH_NULL]; /* 15 chars + X'20'in 16th */
|
char server_Name[SERVER_NAME_LEN_WITH_NULL]; /* 15 chars + X'20' 16th */
|
||||||
char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2]; /* Unicode version of server_Name */
|
char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2];
|
||||||
struct socket *ssocket;
|
struct socket *ssocket;
|
||||||
union {
|
union {
|
||||||
struct sockaddr_in sockAddr;
|
struct sockaddr_in sockAddr;
|
||||||
@ -231,6 +231,7 @@ struct cifsTconInfo {
|
|||||||
FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if file system name truncated */
|
FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if file system name truncated */
|
||||||
FILE_SYSTEM_UNIX_INFO fsUnixInfo;
|
FILE_SYSTEM_UNIX_INFO fsUnixInfo;
|
||||||
unsigned retry:1;
|
unsigned retry:1;
|
||||||
|
unsigned nocase:1;
|
||||||
/* BB add field for back pointer to sb struct? */
|
/* BB add field for back pointer to sb struct? */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1048,6 +1048,11 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
|
|||||||
vol->nobrl = 0;
|
vol->nobrl = 0;
|
||||||
} else if (strnicmp(data, "nobrl", 5) == 0) {
|
} else if (strnicmp(data, "nobrl", 5) == 0) {
|
||||||
vol->nobrl = 1;
|
vol->nobrl = 1;
|
||||||
|
/* turn off mandatory locking in mode
|
||||||
|
if remote locking is turned off since the
|
||||||
|
local vfs will do advisory */
|
||||||
|
if(vol->file_mode == (S_IALLUGO & ~(S_ISUID | S_IXGRP)))
|
||||||
|
vol->file_mode = S_IALLUGO;
|
||||||
} else if (strnicmp(data, "setuids", 7) == 0) {
|
} else if (strnicmp(data, "setuids", 7) == 0) {
|
||||||
vol->setuids = 1;
|
vol->setuids = 1;
|
||||||
} else if (strnicmp(data, "nosetuids", 9) == 0) {
|
} else if (strnicmp(data, "nosetuids", 9) == 0) {
|
||||||
@ -1707,8 +1712,6 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
|
||||||
if(volume_info.sfu_emul)
|
if(volume_info.sfu_emul)
|
||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
|
||||||
if(volume_info.nocase)
|
|
||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CASE_INSENS;
|
|
||||||
if(volume_info.nobrl)
|
if(volume_info.nobrl)
|
||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL;
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL;
|
||||||
|
|
||||||
@ -1727,6 +1730,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||||||
to the same server share the last value passed in
|
to the same server share the last value passed in
|
||||||
for the retry flag is used */
|
for the retry flag is used */
|
||||||
tcon->retry = volume_info.retry;
|
tcon->retry = volume_info.retry;
|
||||||
|
tcon->nocase = volume_info.nocase;
|
||||||
} else {
|
} else {
|
||||||
tcon = tconInfoAlloc();
|
tcon = tconInfoAlloc();
|
||||||
if (tcon == NULL)
|
if (tcon == NULL)
|
||||||
@ -1755,6 +1759,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||||||
if (!rc) {
|
if (!rc) {
|
||||||
atomic_inc(&pSesInfo->inUse);
|
atomic_inc(&pSesInfo->inUse);
|
||||||
tcon->retry = volume_info.retry;
|
tcon->retry = volume_info.retry;
|
||||||
|
tcon->nocase = volume_info.nocase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -375,6 +375,8 @@ header_assemble(struct smb_hdr *buffer, char smb_command /* command */ ,
|
|||||||
}
|
}
|
||||||
if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
|
if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
|
||||||
buffer->Flags2 |= SMBFLG2_DFS;
|
buffer->Flags2 |= SMBFLG2_DFS;
|
||||||
|
if (treeCon->nocase)
|
||||||
|
buffer->Flags |= SMBFLG_CASELESS;
|
||||||
if((treeCon->ses) && (treeCon->ses->server))
|
if((treeCon->ses) && (treeCon->ses->server))
|
||||||
if(treeCon->ses->server->secMode &
|
if(treeCon->ses->server->secMode &
|
||||||
(SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
|
(SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
|
||||||
|
Loading…
Reference in New Issue
Block a user