Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
0a4b92c0
Commit
0a4b92c0
authored
Jan 12, 2006
by
Steve French
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CIFS] Add worker function for Get ACL cifs style
Signed-off-by:
Steve French
<
sfrench@us.ibm.com
>
parent
94bc2be3
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
292 additions
and
20 deletions
+292
-20
fs/cifs/CHANGES
fs/cifs/CHANGES
+3
-1
fs/cifs/cifs_fs_sb.h
fs/cifs/cifs_fs_sb.h
+3
-2
fs/cifs/cifsglob.h
fs/cifs/cifsglob.h
+2
-0
fs/cifs/cifspdu.h
fs/cifs/cifspdu.h
+78
-11
fs/cifs/cifsproto.h
fs/cifs/cifsproto.h
+3
-0
fs/cifs/cifssmb.c
fs/cifs/cifssmb.c
+176
-3
fs/cifs/connect.c
fs/cifs/connect.c
+7
-0
fs/cifs/transport.c
fs/cifs/transport.c
+0
-1
fs/cifs/xattr.c
fs/cifs/xattr.c
+20
-2
No files found.
fs/cifs/CHANGES
View file @
0a4b92c0
Version 1.40
------------
Use fsuid (fsgid) more consistently instead of uid (gid). Improve performance
of readpages by eliminating one extra memcpy.
of readpages by eliminating one extra memcpy. Allow update of file size
from remote server even if file is open for write as long as mount is
directio.
Version 1.39
------------
...
...
fs/cifs/cifs_fs_sb.h
View file @
0a4b92c0
...
...
@@ -24,9 +24,10 @@
#define CIFS_MOUNT_DIRECT_IO 8
/* do not write nor read through page cache */
#define CIFS_MOUNT_NO_XATTR 0x10
/* if set - disable xattr support */
#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_UNX_EMUL
0x80
/* Network compat with SFUnix emulation */
#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_NO_BRL 0x100
/* No sending byte range locks to srv */
#define CIFS_MOUNT_CIFS_ACL 0x200
/* send ACL requests to non-POSIX srv */
struct
cifs_sb_info
{
struct
cifsTconInfo
*
tcon
;
/* primary mount */
...
...
fs/cifs/cifsglob.h
View file @
0a4b92c0
...
...
@@ -233,6 +233,8 @@ struct cifsTconInfo {
atomic_t
num_hardlinks
;
atomic_t
num_symlinks
;
atomic_t
num_locks
;
atomic_t
num_acl_get
;
atomic_t
num_acl_set
;
#ifdef CONFIG_CIFS_STATS2
unsigned
long
long
time_writes
;
unsigned
long
long
time_reads
;
...
...
fs/cifs/cifspdu.h
View file @
0a4b92c0
...
...
@@ -528,7 +528,7 @@ typedef union smb_com_session_setup_andx {
/* STRING PrimaryDomain */
/* STRING NativeOS */
/* STRING NativeLanMan */
}
__attribute__
((
packed
))
old_req
;
/* pre-NTLM (LANMAN2.1) request
format */
}
__attribute__
((
packed
))
old_req
;
/* pre-NTLM (LANMAN2.1) req
format */
struct
{
/* default (NTLM) response format */
struct
smb_hdr
hdr
;
/* wct = 3 */
...
...
@@ -540,7 +540,7 @@ typedef union smb_com_session_setup_andx {
unsigned
char
NativeOS
[
1
];
/* followed by */
/* unsigned char * NativeLanMan; */
/* unsigned char * PrimaryDomain; */
}
__attribute__
((
packed
))
old_resp
;
/* pre-NTLM (LANMAN2.1) response format
*/
}
__attribute__
((
packed
))
old_resp
;
/* pre-NTLM (LANMAN2.1) response
*/
}
__attribute__
((
packed
))
SESSION_SETUP_ANDX
;
#define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux"
...
...
@@ -1007,10 +1007,49 @@ typedef struct smb_com_setattr_rsp {
/* empty wct response to setattr */
/***************************************************/
/* NT Transact structure defintions follow */
/* Currently only ioctl and notify are implemented */
/***************************************************/
/*******************************************************/
/* NT Transact structure defintions follow */
/* Currently only ioctl, acl (get security descriptor) */
/* and notify are implemented */
/*******************************************************/
typedef
struct
smb_com_ntransact_req
{
struct
smb_hdr
hdr
;
/* wct >= 19 */
__u8
MaxSetupCount
;
__u16
Reserved
;
__le32
TotalParameterCount
;
__le32
TotalDataCount
;
__le32
MaxParameterCount
;
__le32
MaxDataCount
;
__le32
ParameterCount
;
__le32
ParameterOffset
;
__le32
DataCount
;
__le32
DataOffset
;
__u8
SetupCount
;
/* four setup words follow subcommand */
/* SNIA spec incorrectly included spurious pad here */
__le16
SubCommand
;
/* 2 = IOCTL/FSCTL */
/* SetupCount words follow then */
__le16
ByteCount
;
__u8
Pad
[
3
];
__u8
Parms
[
0
];
}
__attribute__
((
packed
))
NTRANSACT_REQ
;
typedef
struct
smb_com_ntransact_rsp
{
struct
smb_hdr
hdr
;
/* wct = 18 */
__u8
Reserved
[
3
];
__le32
TotalParameterCount
;
__le32
TotalDataCount
;
__le32
ParameterCount
;
__le32
ParameterOffset
;
__le32
ParameterDisplacement
;
__le32
DataCount
;
__le32
DataOffset
;
__le32
DataDisplacement
;
__u8
SetupCount
;
/* 0 */
__u16
ByteCount
;
/* __u8 Pad[3]; */
/* parms and data follow */
}
__attribute__
((
packed
))
NTRANSACT_RSP
;
typedef
struct
smb_com_transaction_ioctl_req
{
struct
smb_hdr
hdr
;
/* wct = 23 */
__u8
MaxSetupCount
;
...
...
@@ -1025,11 +1064,11 @@ typedef struct smb_com_transaction_ioctl_req {
__le32
DataOffset
;
__u8
SetupCount
;
/* four setup words follow subcommand */
/* SNIA spec incorrectly included spurious pad here */
__le16
SubCommand
;
/* 2 = IOCTL/FSCTL */
__le16
SubCommand
;
/* 2 = IOCTL/FSCTL */
__le32
FunctionCode
;
__u16
Fid
;
__u8
IsFsctl
;
/* 1 = File System Control, 0 = device control (IOCTL)
*/
__u8
IsRootFlag
;
/* 1 = apply command to root of share (must be DFS
share)
*/
__u8
IsFsctl
;
/* 1 = File System Control 0 = device control (IOCTL)
*/
__u8
IsRootFlag
;
/* 1 = apply command to root of share (must be DFS
)
*/
__le16
ByteCount
;
__u8
Pad
[
3
];
__u8
Data
[
1
];
...
...
@@ -1049,9 +1088,35 @@ typedef struct smb_com_transaction_ioctl_rsp {
__u8
SetupCount
;
/* 1 */
__le16
ReturnedDataLen
;
__u16
ByteCount
;
__u8
Pad
[
3
];
}
__attribute__
((
packed
))
TRANSACT_IOCTL_RSP
;
#define CIFS_ACL_OWNER 1
#define CIFS_ACL_GROUP 2
#define CIFS_ACL_DACL 4
#define CIFS_ACL_SACL 8
typedef
struct
smb_com_transaction_qsec_req
{
struct
smb_hdr
hdr
;
/* wct = 19 */
__u8
MaxSetupCount
;
__u16
Reserved
;
__le32
TotalParameterCount
;
__le32
TotalDataCount
;
__le32
MaxParameterCount
;
__le32
MaxDataCount
;
__le32
ParameterCount
;
__le32
ParameterOffset
;
__le32
DataCount
;
__le32
DataOffset
;
__u8
SetupCount
;
/* no setup words follow subcommand */
/* SNIA spec incorrectly included spurious pad here */
__le16
SubCommand
;
/* 6 = QUERY_SECURITY_DESC */
__le16
ByteCount
;
/* bcc = 3 + 8 */
__u8
Pad
[
3
];
__u16
Fid
;
__u16
Reserved2
;
__le32
AclFlags
;
}
__attribute__
((
packed
))
QUERY_SEC_DESC_REQ
;
typedef
struct
smb_com_transaction_change_notify_req
{
struct
smb_hdr
hdr
;
/* wct = 23 */
__u8
MaxSetupCount
;
...
...
@@ -1072,10 +1137,12 @@ typedef struct smb_com_transaction_change_notify_req {
__u8
WatchTree
;
/* 1 = Monitor subdirectories */
__u8
Reserved2
;
__le16
ByteCount
;
/* __u8 Pad[3];*/
/*
__u8 Pad[3];*/
/* __u8 Data[1];*/
}
__attribute__
((
packed
))
TRANSACT_CHANGE_NOTIFY_REQ
;
/* BB eventually change to use generic ntransact rsp struct
and validation routine */
typedef
struct
smb_com_transaction_change_notify_rsp
{
struct
smb_hdr
hdr
;
/* wct = 18 */
__u8
Reserved
[
3
];
...
...
fs/cifs/cifsproto.h
View file @
0a4b92c0
...
...
@@ -299,6 +299,9 @@ extern int CIFSSMBSetEA(const int xid, struct cifsTconInfo *tcon,
const
char
*
fileName
,
const
char
*
ea_name
,
const
void
*
ea_value
,
const
__u16
ea_value_len
,
const
struct
nls_table
*
nls_codepage
,
int
remap_special_chars
);
extern
int
CIFSSMBGetCIFSACL
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
__u16
fid
,
char
*
acl_inf
,
const
int
buflen
,
const
int
acl_type
/* ACCESS vs. DEFAULT */
);
extern
int
CIFSSMBGetPosixACL
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
const
unsigned
char
*
searchName
,
char
*
acl_inf
,
const
int
buflen
,
const
int
acl_type
,
...
...
fs/cifs/cifssmb.c
View file @
0a4b92c0
...
...
@@ -1926,6 +1926,90 @@ querySymLinkRetry:
return
rc
;
}
/* Initialize NT TRANSACT SMB into small smb request buffer.
This assumes that all NT TRANSACTS that we init here have
total parm and data under about 400 bytes (to fit in small cifs
buffer size), which is the case so far, it easily fits. NB:
Setup words themselves and ByteCount
MaxSetupCount (size of returned setup area) and
MaxParameterCount (returned parms size) must be set by caller */
static
int
smb_init_ntransact
(
const
__u16
sub_command
,
const
int
setup_count
,
const
int
parm_len
,
struct
cifsTconInfo
*
tcon
,
void
**
ret_buf
)
{
int
rc
;
__u32
temp_offset
;
struct
smb_com_ntransact_req
*
pSMB
;
rc
=
small_smb_init
(
SMB_COM_NT_TRANSACT
,
19
+
setup_count
,
tcon
,
(
void
**
)
&
pSMB
);
if
(
rc
)
return
rc
;
*
ret_buf
=
(
void
*
)
pSMB
;
pSMB
->
Reserved
=
0
;
pSMB
->
TotalParameterCount
=
cpu_to_le32
(
parm_len
);
pSMB
->
TotalDataCount
=
0
;
pSMB
->
MaxDataCount
=
cpu_to_le32
((
tcon
->
ses
->
server
->
maxBuf
-
MAX_CIFS_HDR_SIZE
)
&
0xFFFFFF00
);
pSMB
->
ParameterCount
=
pSMB
->
TotalParameterCount
;
pSMB
->
DataCount
=
pSMB
->
TotalDataCount
;
temp_offset
=
offsetof
(
struct
smb_com_ntransact_req
,
Parms
)
+
(
setup_count
*
2
)
-
4
/* for rfc1001 length itself */
;
pSMB
->
ParameterOffset
=
cpu_to_le32
(
temp_offset
);
pSMB
->
DataOffset
=
cpu_to_le32
(
temp_offset
+
parm_len
);
pSMB
->
SetupCount
=
setup_count
;
/* no need to le convert byte fields */
pSMB
->
SubCommand
=
cpu_to_le16
(
sub_command
);
return
0
;
}
static
int
validate_ntransact
(
char
*
buf
,
char
**
ppparm
,
char
**
ppdata
,
int
*
pdatalen
,
int
*
pparmlen
)
{
char
*
end_of_smb
;
__u32
data_count
,
data_offset
,
parm_count
,
parm_offset
;
struct
smb_com_ntransact_rsp
*
pSMBr
;
if
(
buf
==
NULL
)
return
-
EINVAL
;
pSMBr
=
(
struct
smb_com_ntransact_rsp
*
)
buf
;
/* ByteCount was converted from little endian in SendReceive */
end_of_smb
=
2
/* sizeof byte count */
+
pSMBr
->
ByteCount
+
(
char
*
)
&
pSMBr
->
ByteCount
;
data_offset
=
le32_to_cpu
(
pSMBr
->
DataOffset
);
data_count
=
le32_to_cpu
(
pSMBr
->
DataCount
);
parm_offset
=
le32_to_cpu
(
pSMBr
->
ParameterOffset
);
parm_count
=
le32_to_cpu
(
pSMBr
->
ParameterCount
);
*
ppparm
=
(
char
*
)
&
pSMBr
->
hdr
.
Protocol
+
parm_offset
;
*
ppdata
=
(
char
*
)
&
pSMBr
->
hdr
.
Protocol
+
data_offset
;
/* should we also check that parm and data areas do not overlap? */
if
(
*
ppparm
>
end_of_smb
)
{
cFYI
(
1
,(
"parms start after end of smb"
));
return
-
EINVAL
;
}
else
if
(
parm_count
+
*
ppparm
>
end_of_smb
)
{
cFYI
(
1
,(
"parm end after end of smb"
));
return
-
EINVAL
;
}
else
if
(
*
ppdata
>
end_of_smb
)
{
cFYI
(
1
,(
"data starts after end of smb"
));
return
-
EINVAL
;
}
else
if
(
data_count
+
*
ppdata
>
end_of_smb
)
{
cFYI
(
1
,(
"data %p + count %d (%p) ends after end of smb %p start %p"
,
*
ppdata
,
data_count
,
(
data_count
+
*
ppdata
),
end_of_smb
,
pSMBr
));
/* BB FIXME */
return
-
EINVAL
;
}
else
if
(
parm_count
+
data_count
>
pSMBr
->
ByteCount
)
{
cFYI
(
1
,(
"parm count and data count larger than SMB"
));
return
-
EINVAL
;
}
return
0
;
}
int
CIFSSMBQueryReparseLinkInfo
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
const
unsigned
char
*
searchName
,
...
...
@@ -1948,7 +2032,8 @@ CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
pSMB
->
TotalDataCount
=
0
;
pSMB
->
MaxParameterCount
=
cpu_to_le32
(
2
);
/* BB find exact data count max from sess structure BB */
pSMB
->
MaxDataCount
=
cpu_to_le32
(
4000
);
pSMB
->
MaxDataCount
=
cpu_to_le32
((
tcon
->
ses
->
server
->
maxBuf
-
MAX_CIFS_HDR_SIZE
)
&
0xFFFFFF00
);
pSMB
->
MaxSetupCount
=
4
;
pSMB
->
Reserved
=
0
;
pSMB
->
ParameterOffset
=
0
;
...
...
@@ -1975,7 +2060,9 @@ CIFSSMBQueryReparseLinkInfo(const int xid, struct cifsTconInfo *tcon,
rc
=
-
EIO
;
/* bad smb */
else
{
if
(
data_count
&&
(
data_count
<
2048
))
{
char
*
end_of_smb
=
pSMBr
->
ByteCount
+
(
char
*
)
&
pSMBr
->
ByteCount
;
char
*
end_of_smb
=
2
/* sizeof byte count */
+
pSMBr
->
ByteCount
+
(
char
*
)
&
pSMBr
->
ByteCount
;
struct
reparse_data
*
reparse_buf
=
(
struct
reparse_data
*
)
((
char
*
)
&
pSMBr
->
hdr
.
Protocol
+
data_offset
);
...
...
@@ -2219,6 +2306,7 @@ queryAclRetry:
rc
=
SendReceive
(
xid
,
tcon
->
ses
,
(
struct
smb_hdr
*
)
pSMB
,
(
struct
smb_hdr
*
)
pSMBr
,
&
bytes_returned
,
0
);
cifs_stats_inc
(
&
tcon
->
num_acl_get
);
if
(
rc
)
{
cFYI
(
1
,
(
"Send error in Query POSIX ACL = %d"
,
rc
));
}
else
{
...
...
@@ -2406,6 +2494,87 @@ GetExtAttrOut:
#endif
/* CONFIG_POSIX */
/* Convert CIFS ACL to POSIX form */
static
int
parse_sec_desc
(
struct
sec_desc
*
psec_desc
,
int
acl_len
)
{
CHECK
ON
OTHER
COMPUTER
TO
SEE
IF
FORMAT
ENCODED
IN
CIFSPDU
.
H
ALREADY
return
0
;
}
/* Get Security Descriptor (by handle) from remote server for a file or dir */
int
CIFSSMBGetCIFSACL
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
__u16
fid
,
/* BB fix up return info */
char
*
acl_inf
,
const
int
buflen
,
const
int
acl_type
/* ACCESS/DEFAULT not sure implication */
)
{
int
rc
=
0
;
int
buf_type
=
0
;
QUERY_SEC_DESC_REQ
*
pSMB
;
struct
kvec
iov
[
1
];
cFYI
(
1
,
(
"GetCifsACL"
));
rc
=
smb_init_ntransact
(
NT_TRANSACT_QUERY_SECURITY_DESC
,
0
,
8
/* parm len */
,
tcon
,
(
void
**
)
&
pSMB
);
if
(
rc
)
return
rc
;
pSMB
->
MaxParameterCount
=
cpu_to_le32
(
4
);
/* BB TEST with big acls that might need to be e.g. larger than 16K */
pSMB
->
MaxSetupCount
=
0
;
pSMB
->
Fid
=
fid
;
/* file handle always le */
pSMB
->
AclFlags
=
cpu_to_le32
(
CIFS_ACL_OWNER
|
CIFS_ACL_GROUP
|
CIFS_ACL_DACL
);
pSMB
->
ByteCount
=
cpu_to_le16
(
11
);
/* 3 bytes pad + 8 bytes parm */
pSMB
->
hdr
.
smb_buf_length
+=
11
;
iov
[
0
].
iov_base
=
(
char
*
)
pSMB
;
iov
[
0
].
iov_len
=
pSMB
->
hdr
.
smb_buf_length
+
4
;
rc
=
SendReceive2
(
xid
,
tcon
->
ses
,
iov
,
1
/* num iovec */
,
&
buf_type
,
0
);
cifs_stats_inc
(
&
tcon
->
num_acl_get
);
if
(
rc
)
{
cFYI
(
1
,
(
"Send error in QuerySecDesc = %d"
,
rc
));
}
else
{
/* decode response */
struct
sec_desc
*
psec_desc
;
__le32
*
parm
;
int
parm_len
;
int
data_len
;
int
acl_len
;
struct
smb_com_ntransact_rsp
*
pSMBr
;
/* validate_nttransact */
rc
=
validate_ntransact
(
iov
[
0
].
iov_base
,
(
char
**
)
&
parm
,
(
char
**
)
&
psec_desc
,
&
parm_len
,
&
data_len
);
if
(
rc
)
goto
qsec_out
;
pSMBr
=
(
struct
smb_com_ntransact_rsp
*
)
iov
[
0
].
iov_base
;
cERROR
(
1
,(
"smb %p parm %p data %p"
,
pSMBr
,
parm
,
psec_desc
));
/* BB removeme BB */
if
(
le32_to_cpu
(
pSMBr
->
ParameterCount
)
!=
4
)
{
rc
=
-
EIO
;
/* bad smb */
goto
qsec_out
;
}
/* BB check that data area is minimum length and as big as acl_len */
acl_len
=
le32_to_cpu
(
*
(
__le32
*
)
parm
);
/* BB check if(acl_len > bufsize) */
parse_sec_desc
(
psec_desc
,
acl_len
);
}
qsec_out:
if
(
buf_type
==
CIFS_SMALL_BUFFER
)
cifs_small_buf_release
(
iov
[
0
].
iov_base
);
else
if
(
buf_type
==
CIFS_LARGE_BUFFER
)
cifs_buf_release
(
iov
[
0
].
iov_base
);
cifs_small_buf_release
(
pSMB
);
return
rc
;
}
/* Legacy Query Path Information call for lookup to old servers such
as Win9x/WinME */
int
SMBQueryInformation
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
...
...
@@ -4304,7 +4473,7 @@ int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon,
{
int
rc
=
0
;
struct
smb_com_transaction_change_notify_req
*
pSMB
=
NULL
;
struct
smb_com_transaction_change_notify_rsp
*
pSMBr
=
NULL
;
struct
smb_com_
n
transaction_change_notify_rsp
*
pSMBr
=
NULL
;
struct
dir_notify_req
*
dnotify_req
;
int
bytes_returned
;
...
...
@@ -4319,6 +4488,10 @@ int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon,
pSMB
->
MaxParameterCount
=
cpu_to_le32
(
2
);
/* BB find exact data count max from sess structure BB */
pSMB
->
MaxDataCount
=
0
;
/* same in little endian or be */
/* BB VERIFY verify which is correct for above BB */
pSMB
->
MaxDataCount
=
cpu_to_le32
((
tcon
->
ses
->
server
->
maxBuf
-
MAX_CIFS_HDR_SIZE
)
&
0xFFFFFF00
);
pSMB
->
MaxSetupCount
=
4
;
pSMB
->
Reserved
=
0
;
pSMB
->
ParameterOffset
=
0
;
...
...
fs/cifs/connect.c
View file @
0a4b92c0
...
...
@@ -76,6 +76,7 @@ struct smb_vol {
unsigned
setuids
:
1
;
unsigned
noperm
:
1
;
unsigned
no_psx_acl
:
1
;
/* set if posix acl support should be disabled */
unsigned
cifs_acl
:
1
;
unsigned
no_xattr
:
1
;
/* set if xattr (EA) support should be disabled*/
unsigned
server_ino
:
1
;
/* use inode numbers from server ie UniqueId */
unsigned
direct_io
:
1
;
...
...
@@ -1159,6 +1160,10 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
vol
->
server_ino
=
1
;
}
else
if
(
strnicmp
(
data
,
"noserverino"
,
9
)
==
0
)
{
vol
->
server_ino
=
0
;
}
else
if
(
strnicmp
(
data
,
"cifsacl"
,
7
)
==
0
)
{
vol
->
cifs_acl
=
1
;
}
else
if
(
strnicmp
(
data
,
"nocifsacl"
,
9
)
==
0
)
{
vol
->
cifs_acl
=
0
;
}
else
if
(
strnicmp
(
data
,
"acl"
,
3
)
==
0
)
{
vol
->
no_psx_acl
=
0
;
}
else
if
(
strnicmp
(
data
,
"noacl"
,
5
)
==
0
)
{
...
...
@@ -1806,6 +1811,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
cifs_sb
->
mnt_cifs_flags
|=
CIFS_MOUNT_UNX_EMUL
;
if
(
volume_info
.
nobrl
)
cifs_sb
->
mnt_cifs_flags
|=
CIFS_MOUNT_NO_BRL
;
if
(
volume_info
.
cifs_acl
)
cifs_sb
->
mnt_cifs_flags
|=
CIFS_MOUNT_CIFS_ACL
;
if
(
volume_info
.
direct_io
)
{
cFYI
(
1
,(
"mounting share using direct i/o"
));
...
...
fs/cifs/transport.c
View file @
0a4b92c0
...
...
@@ -489,7 +489,6 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
receive_len
,
xid
));
rc
=
-
EIO
;
}
else
{
/* rcvd frame is ok */
if
(
midQ
->
resp_buf
&&
(
midQ
->
midState
==
MID_RESPONSE_RECEIVED
))
{
...
...
fs/cifs/xattr.c
View file @
0a4b92c0
...
...
@@ -254,7 +254,8 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
rc
=
CIFSSMBQueryEA
(
xid
,
pTcon
,
full_path
,
ea_name
,
ea_value
,
buf_size
,
cifs_sb
->
local_nls
,
cifs_sb
->
mnt_cifs_flags
&
CIFS_MOUNT_MAP_SPECIAL_CHR
);
}
else
if
(
strncmp
(
ea_name
,
POSIX_ACL_XATTR_ACCESS
,
strlen
(
POSIX_ACL_XATTR_ACCESS
))
==
0
)
{
}
else
if
(
strncmp
(
ea_name
,
POSIX_ACL_XATTR_ACCESS
,
strlen
(
POSIX_ACL_XATTR_ACCESS
))
==
0
)
{
#ifdef CONFIG_CIFS_POSIX
if
(
sb
->
s_flags
&
MS_POSIXACL
)
rc
=
CIFSSMBGetPosixACL
(
xid
,
pTcon
,
full_path
,
...
...
@@ -262,10 +263,27 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
cifs_sb
->
local_nls
,
cifs_sb
->
mnt_cifs_flags
&
CIFS_MOUNT_MAP_SPECIAL_CHR
);
/* else if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) {
__u16 fid;
int oplock = FALSE;
rc = CIFSSMBOpen(xid, pTcon, full_path,
FILE_OPEN, GENERIC_READ, 0, &fid,
&oplock, NULL, cifs_sb->local_nls,
cifs_sb->mnt_cifs_flags &
CIFS_MOUNT_MAP_SPECIAL_CHR);
if(rc == 0) {
rc = CIFSSMBGetCIFSACL(xid, pTcon, fid,
ea_value, buf_size,
ACL_TYPE_ACCESS);
CIFSSMBClose(xid, pTcon, fid)
}
} */
/* BB enable after fixing up return data */
#else
cFYI
(
1
,(
"query POSIX ACL not supported yet"
));
#endif
/* CONFIG_CIFS_POSIX */
}
else
if
(
strncmp
(
ea_name
,
POSIX_ACL_XATTR_DEFAULT
,
strlen
(
POSIX_ACL_XATTR_DEFAULT
))
==
0
)
{
}
else
if
(
strncmp
(
ea_name
,
POSIX_ACL_XATTR_DEFAULT
,
strlen
(
POSIX_ACL_XATTR_DEFAULT
))
==
0
)
{
#ifdef CONFIG_CIFS_POSIX
if
(
sb
->
s_flags
&
MS_POSIXACL
)
rc
=
CIFSSMBGetPosixACL
(
xid
,
pTcon
,
full_path
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment