Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
82edf0ac
Commit
82edf0ac
authored
Oct 11, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://cifs.bkbits.net/linux-2.5-with-cifs
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
54165329
9ab64854
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
85 additions
and
102 deletions
+85
-102
fs/cifs/asn1.c
fs/cifs/asn1.c
+1
-1
fs/cifs/cifs_debug.c
fs/cifs/cifs_debug.c
+1
-1
fs/cifs/cifs_debug.h
fs/cifs/cifs_debug.h
+1
-1
fs/cifs/cifssmb.c
fs/cifs/cifssmb.c
+53
-57
fs/cifs/connect.c
fs/cifs/connect.c
+26
-29
fs/cifs/file.c
fs/cifs/file.c
+0
-7
fs/cifs/inode.c
fs/cifs/inode.c
+0
-3
fs/cifs/nterr.c
fs/cifs/nterr.c
+3
-3
No files found.
fs/cifs/asn1.c
View file @
82edf0ac
...
...
@@ -458,7 +458,7 @@ decode_negTokenInit(unsigned char *security_blob, int length,
unsigned
int
cls
,
con
,
tag
,
oidlen
,
rc
;
int
use_ntlmssp
=
FALSE
;
dump_mem
(
" Received SecBlob "
,
security_blob
,
length
);
/* cifs_dump_mem(" Received SecBlob ", security_blob, length); */
asn1_open
(
&
ctx
,
security_blob
,
length
);
...
...
fs/cifs/cifs_debug.c
View file @
82edf0ac
...
...
@@ -32,7 +32,7 @@
#include "cifs_debug.h"
void
dump_mem
(
char
*
label
,
void
*
data
,
int
length
)
cifs_
dump_mem
(
char
*
label
,
void
*
data
,
int
length
)
{
int
i
,
j
;
int
*
intptr
=
data
;
...
...
fs/cifs/cifs_debug.h
View file @
82edf0ac
...
...
@@ -23,7 +23,7 @@
#ifndef _H_CIFS_DEBUG
#define _H_CIFS_DEBUG
void
dump_mem
(
char
*
label
,
void
*
data
,
int
length
);
void
cifs_
dump_mem
(
char
*
label
,
void
*
data
,
int
length
);
extern
int
traceSMB
;
/* flag which enables the function below */
void
dump_smb
(
struct
smb_hdr
*
,
int
);
...
...
fs/cifs/cifssmb.c
View file @
82edf0ac
...
...
@@ -21,7 +21,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
All SMB/CIFS PDU handling routines go here - except for a few
leftovers in connect.c */
/*
SMB/CIFS PDU handling routines here - except for
leftovers in connect.c */
#include <linux/fs.h>
#include <linux/kernel.h>
...
...
@@ -85,7 +85,8 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses,
}
pSMB
->
ByteCount
=
strlen
(
protocols
[
0
].
name
)
+
1
;
strncpy
(
pSMB
->
DialectsArray
,
protocols
[
0
].
name
,
30
);
/* null guaranteed to be at end of source and target buffers anyway */
strncpy
(
pSMB
->
DialectsArray
,
protocols
[
0
].
name
,
30
);
/* null guaranteed to be at end of source and target buffers anyway */
pSMB
->
hdr
.
smb_buf_length
+=
pSMB
->
ByteCount
;
pSMB
->
ByteCount
=
cpu_to_le16
(
pSMB
->
ByteCount
);
...
...
@@ -94,17 +95,19 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses,
(
struct
smb_hdr
*
)
pSMBr
,
&
bytes_returned
,
0
);
if
(
rc
==
0
)
{
ses
->
dialectIndex
=
le16_to_cpu
(
pSMBr
->
DialectIndex
);
ses
->
secMode
=
pSMBr
->
SecurityMode
;
/* one byte - no need to convert this or EncryptionKeyLen field from le, */
ses
->
secMode
=
pSMBr
->
SecurityMode
;
/* one byte - no need to convert this or EncryptionKeyLen from le,*/
ses
->
maxReq
=
le16_to_cpu
(
pSMBr
->
MaxMpxCount
);
/* probably no need to store and check maxvcs */
ses
->
maxBuf
=
min
(
le32_to_cpu
(
pSMBr
->
MaxBufferSize
),
(
__u32
)
CIFS_MAX_MSGSIZE
+
MAX_CIFS_HDR_SIZE
);
ses
->
maxRw
=
le32_to_cpu
(
pSMBr
->
MaxRawSize
);
/* BB le_to_host needed around here and ff */
ses
->
maxRw
=
le32_to_cpu
(
pSMBr
->
MaxRawSize
);
cFYI
(
1
,
(
"
\n
Max buf = %d "
,
ses
->
maxBuf
));
GETU32
(
ses
->
sessid
)
=
le32_to_cpu
(
pSMBr
->
SessionKey
);
ses
->
capabilities
=
le32_to_cpu
(
pSMBr
->
Capabilities
);
ses
->
timeZone
=
le16_to_cpu
(
pSMBr
->
ServerTimeZone
);
/* BB with UTC do we ever need to be using srvr timezone? */
ses
->
timeZone
=
le16_to_cpu
(
pSMBr
->
ServerTimeZone
);
/* BB with UTC do we ever need to be using srvr timezone? */
if
(
pSMBr
->
EncryptionKeyLength
==
CIFS_CRYPTO_KEY_SIZE
)
{
memcpy
(
cryptokey
,
pSMBr
->
u
.
EncryptionKey
,
CIFS_CRYPTO_KEY_SIZE
);
...
...
@@ -495,7 +498,6 @@ CIFSSMBRead(const int xid, const struct cifsTconInfo *tcon,
pSMBr
->
DataLength
=
le16_to_cpu
(
pSMBr
->
DataLength
);
*
nbytes
=
pSMBr
->
DataLength
;
/* BB check that DataLength would not go beyond end of SMB BB */
/* if(pSMBr->DataOffset < pSMBr->ByteCount + sizeof(READ_RSP) - 1 *//* BB fix this length check */
if
(
pSMBr
->
DataLength
>
CIFS_MAX_MSGSIZE
+
MAX_CIFS_HDR_SIZE
)
{
rc
=
-
EIO
;
*
nbytes
=
0
;
...
...
@@ -541,7 +543,7 @@ CIFSSMBWrite(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
DataLengthLow
=
count
;
pSMB
->
DataLengthHigh
=
0
;
pSMB
->
DataOffset
=
cpu_to_le16
(
(
int
)
&
(
pSMB
->
Data
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
cpu_to_le16
(
offsetof
(
struct
smb_com_write_req
,
Data
)
-
4
);
copy_from_user
(
pSMB
->
Data
,
buf
,
pSMB
->
DataLengthLow
);
pSMB
->
ByteCount
+=
pSMB
->
DataLengthLow
+
1
/* pad */
;
...
...
@@ -685,7 +687,8 @@ CIFSSMBRename(const int xid, const struct cifsTconInfo *tcon,
name_len2
++
;
/* signature byte */
}
pSMB
->
ByteCount
=
1
/* 1st signature byte */
+
name_len
+
name_len2
;
/* we could also set search attributes but not needed */
pSMB
->
ByteCount
=
1
/* 1st signature byte */
+
name_len
+
name_len2
;
/* we could also set search attributes but not needed */
pSMB
->
hdr
.
smb_buf_length
+=
pSMB
->
ByteCount
;
pSMB
->
ByteCount
=
cpu_to_le16
(
pSMB
->
ByteCount
);
...
...
@@ -739,8 +742,8 @@ CIFSUnixCreateSymLink(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
;
pSMB
->
ParameterOffset
=
offsetof
(
struct
smb_com_transaction2_spi_req
,
InformationLevel
)
-
4
;
pSMB
->
DataOffset
=
pSMB
->
ParameterOffset
+
pSMB
->
ParameterCount
;
data_offset
=
(
char
*
)
(
&
pSMB
->
hdr
.
Protocol
)
+
pSMB
->
DataOffset
;
...
...
@@ -759,7 +762,7 @@ CIFSUnixCreateSymLink(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
DataCount
=
name_len_target
;
pSMB
->
MaxParameterCount
=
cpu_to_le16
(
2
);
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/*
BB find exact max SMB PDU from sess structure BB
*/
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/*
BB find exact max SMB from sess
*/
pSMB
->
SetupCount
=
1
;
pSMB
->
Reserved3
=
0
;
pSMB
->
SubCommand
=
cpu_to_le16
(
TRANS2_SET_PATH_INFORMATION
);
...
...
@@ -825,8 +828,8 @@ CIFSUnixCreateHardLink(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
;
pSMB
->
ParameterOffset
=
offsetof
(
struct
smb_com_transaction2_spi_req
,
InformationLevel
)
-
4
;
pSMB
->
DataOffset
=
pSMB
->
ParameterOffset
+
pSMB
->
ParameterCount
;
data_offset
=
(
char
*
)
(
&
pSMB
->
hdr
.
Protocol
)
+
pSMB
->
DataOffset
;
...
...
@@ -845,7 +848,7 @@ CIFSUnixCreateHardLink(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
DataCount
=
name_len_target
;
pSMB
->
MaxParameterCount
=
cpu_to_le16
(
2
);
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/* BB find exact max SMB
PDU from sess structure BB
*/
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/* BB find exact max SMB
from sess
*/
pSMB
->
SetupCount
=
1
;
pSMB
->
Reserved3
=
0
;
pSMB
->
SubCommand
=
cpu_to_le16
(
TRANS2_SET_PATH_INFORMATION
);
...
...
@@ -983,9 +986,8 @@ CIFSSMBUnixQuerySymLink(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qpi_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1084,8 +1086,8 @@ CIFSSMBQPathInfo(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
cpu_to_le16
(
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qpi_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1161,9 +1163,8 @@ CIFSSMBUnixQPathInfo(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qpi_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1238,9 +1239,8 @@ CIFSFindSingle(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
pSMB
->
InformationLevel
-
(
int
)
&
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_ffirst_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
/* one byte, no need to le convert */
...
...
@@ -1321,9 +1321,8 @@ CIFSFindFirst(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
ByteCount
=
pSMB
->
TotalParameterCount
+
1
/* pad */
;
pSMB
->
TotalParameterCount
=
cpu_to_le16
(
pSMB
->
TotalParameterCount
);
pSMB
->
ParameterCount
=
pSMB
->
TotalParameterCount
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
pSMB
->
SearchAttributes
-
(
int
)
&
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_ffirst_req
,
SearchAttributes
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
/* one byte no need to make endian neutral */
...
...
@@ -1407,8 +1406,8 @@ CIFSFindNext(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
pSMB
->
SearchHandle
-
(
int
)
&
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_fnext_req
,
SearchHandle
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1532,9 +1531,8 @@ CIFSGetDFSRefer(const int xid, struct cifsSesInfo *ses,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
(
pSMB
->
MaxReferralLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_get_dfs_refer_req
,
MaxReferralLevel
)
-
4
);
pSMB
->
SetupCount
=
1
;
pSMB
->
Reserved3
=
0
;
pSMB
->
SubCommand
=
cpu_to_le16
(
TRANS2_GET_DFS_REFERRAL
);
...
...
@@ -1587,8 +1585,8 @@ CIFSSMBQFSInfo(const int xid, const struct cifsTconInfo *tcon,
pSMB
->
ByteCount
=
pSMB
->
TotalParameterCount
+
1
/* pad */
;
pSMB
->
TotalParameterCount
=
cpu_to_le16
(
pSMB
->
TotalParameterCount
);
pSMB
->
ParameterCount
=
pSMB
->
TotalParameterCount
;
pSMB
->
ParameterOffset
=
cpu_to_le16
(
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qfsi_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1662,8 +1660,8 @@ CIFSSMBQFSAttributeInfo(int xid, struct cifsTconInfo *tcon,
pSMB
->
ByteCount
=
pSMB
->
TotalParameterCount
+
1
/* pad */
;
pSMB
->
TotalParameterCount
=
cpu_to_le16
(
pSMB
->
TotalParameterCount
);
pSMB
->
ParameterCount
=
pSMB
->
TotalParameterCount
;
pSMB
->
ParameterOffset
=
cpu_to_le16
(
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qfsi_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1725,9 +1723,9 @@ CIFSSMBQFSDeviceInfo(int xid, struct cifsTconInfo *tcon,
pSMB
->
ByteCount
=
pSMB
->
TotalParameterCount
+
1
/* pad */
;
pSMB
->
TotalParameterCount
=
cpu_to_le16
(
pSMB
->
TotalParameterCount
);
pSMB
->
ParameterCount
=
pSMB
->
TotalParameterCount
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qfsi_req
,
InformationLevel
)
-
4
);
pSMB
->
DataCount
=
0
;
pSMB
->
DataOffset
=
0
;
pSMB
->
SetupCount
=
1
;
...
...
@@ -1743,7 +1741,8 @@ CIFSSMBQFSDeviceInfo(int xid, struct cifsTconInfo *tcon,
cERROR
(
1
,
(
"
\n
Send error in QFSDeviceInfo = %d
\n
"
,
rc
));
}
else
{
/* decode response */
pSMBr
->
DataOffset
=
le16_to_cpu
(
pSMBr
->
DataOffset
);
if
((
pSMBr
->
ByteCount
<
sizeof
(
FILE_SYSTEM_DEVICE_INFO
))
||
(
pSMBr
->
DataOffset
>
512
))
/* BB also check enough bytes returned */
if
((
pSMBr
->
ByteCount
<
sizeof
(
FILE_SYSTEM_DEVICE_INFO
))
||
(
pSMBr
->
DataOffset
>
512
))
rc
=
-
EIO
;
/* bad smb */
else
{
response_data
=
...
...
@@ -1790,9 +1789,8 @@ CIFSSMBQFSUnixInfo(int xid, struct cifsTconInfo *tcon,
pSMB
->
ByteCount
=
pSMB
->
ParameterCount
+
1
/* pad */
;
pSMB
->
ParameterCount
=
cpu_to_le16
(
pSMB
->
ParameterCount
);
pSMB
->
TotalParameterCount
=
pSMB
->
ParameterCount
;
pSMB
->
ParameterOffset
=
cpu_to_le16
((
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
);
pSMB
->
ParameterOffset
=
cpu_to_le16
(
offsetof
(
struct
smb_com_transaction2_qfsi_req
,
InformationLevel
)
-
4
);
pSMB
->
SetupCount
=
1
;
pSMB
->
Reserved3
=
0
;
pSMB
->
SubCommand
=
cpu_to_le16
(
TRANS2_QUERY_FS_INFORMATION
);
...
...
@@ -1806,7 +1804,7 @@ CIFSSMBQFSUnixInfo(int xid, struct cifsTconInfo *tcon,
cERROR
(
1
,
(
"
\n
Send error in QFSUnixInfo = %d
\n
"
,
rc
));
}
else
{
/* decode response */
pSMBr
->
DataOffset
=
cpu_to_le16
(
pSMBr
->
DataOffset
);
if
((
pSMBr
->
ByteCount
<
13
)
||
(
pSMBr
->
DataOffset
>
512
))
{
/* BB also check enough bytes returned */
if
((
pSMBr
->
ByteCount
<
13
)
||
(
pSMBr
->
DataOffset
>
512
))
{
rc
=
-
EIO
;
/* bad smb */
}
else
{
response_data
=
...
...
@@ -1862,14 +1860,14 @@ CIFSSMBSetEOF(int xid, struct cifsTconInfo *tcon, char *fileName,
pSMB
->
ParameterCount
=
6
+
name_len
;
pSMB
->
DataCount
=
sizeof
(
struct
file_end_of_file_info
);
pSMB
->
MaxParameterCount
=
cpu_to_le16
(
2
);
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/* BB find
exact max SMB PDU from sess structure BB
*/
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/* BB find
max SMB size from sess
*/
pSMB
->
MaxSetupCount
=
0
;
pSMB
->
Reserved
=
0
;
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
;
pSMB
->
ParameterOffset
=
offsetof
(
struct
smb_com_transaction2_spi_req
,
InformationLevel
)
-
4
;
pSMB
->
DataOffset
=
pSMB
->
ParameterOffset
+
pSMB
->
ParameterCount
;
if
(
SetAllocation
)
{
if
(
tcon
->
ses
->
capabilities
&
CAP_INFOLEVEL_PASSTHRU
)
...
...
@@ -1946,15 +1944,15 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
(
int
)
&
(
pSMB
->
Fid
)
-
(
int
)
pSMB
->
hdr
.
Protocol
;
pSMB
->
ParameterOffset
=
offsetof
(
struct
smb_com_transaction2_sfi_req
,
Fid
)
-
4
;
pSMB
->
DataOffset
=
pSMB
->
ParameterOffset
+
pSMB
->
ParameterCount
;
data_offset
=
(
char
*
)
(
&
pSMB
->
hdr
.
Protocol
)
+
pSMB
->
DataOffset
;
pSMB
->
DataCount
=
sizeof
(
struct
file_end_of_file_info
);
pSMB
->
MaxParameterCount
=
cpu_to_le16
(
2
);
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/* BB find
exact max SMB PDU from sess structure BB
*/
pSMB
->
MaxDataCount
=
cpu_to_le16
(
1000
);
/* BB find
max SMB PDU from sess
*/
pSMB
->
SetupCount
=
1
;
pSMB
->
Reserved3
=
0
;
pSMB
->
SubCommand
=
cpu_to_le16
(
TRANS2_SET_FILE_INFORMATION
);
...
...
@@ -2042,8 +2040,8 @@ CIFSSMBSetTimes(int xid, struct cifsTconInfo *tcon, char *fileName,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
;
pSMB
->
ParameterOffset
=
offsetof
(
struct
smb_com_transaction2_spi_req
,
InformationLevel
)
-
4
;
pSMB
->
DataOffset
=
pSMB
->
ParameterOffset
+
pSMB
->
ParameterCount
;
data_offset
=
(
char
*
)
(
&
pSMB
->
hdr
.
Protocol
)
+
pSMB
->
DataOffset
;
pSMB
->
ParameterOffset
=
cpu_to_le16
(
pSMB
->
ParameterOffset
);
...
...
@@ -2118,8 +2116,8 @@ CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon,
pSMB
->
Flags
=
0
;
pSMB
->
Timeout
=
0
;
pSMB
->
Reserved2
=
0
;
pSMB
->
ParameterOffset
=
(
int
)
&
(
pSMB
->
InformationLevel
)
-
(
int
)
pSMB
->
hdr
.
Protocol
;
pSMB
->
ParameterOffset
=
offsetof
(
struct
smb_com_transaction2_spi_req
,
InformationLevel
)
-
4
;
pSMB
->
DataOffset
=
pSMB
->
ParameterOffset
+
pSMB
->
ParameterCount
;
data_offset
=
(
FILE_UNIX_BASIC_INFO
*
)
((
char
*
)
&
pSMB
->
hdr
.
Protocol
+
...
...
@@ -2138,9 +2136,7 @@ CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *tcon,
pSMB
->
Reserved4
=
0
;
pSMB
->
hdr
.
smb_buf_length
+=
pSMB
->
ByteCount
;
data_offset
->
Uid
=
cpu_to_le64
(
uid
);
cFYI
(
1
,
(
"
\n
Uid = %lld from %lld "
,
data_offset
->
Uid
,
uid
));
data_offset
->
Gid
=
cpu_to_le64
(
gid
);
cFYI
(
1
,
(
"
\n
Gid = %lld from %lld "
,
data_offset
->
Gid
,
gid
));
data_offset
->
Permissions
=
cpu_to_le64
(
mode
);
pSMB
->
ByteCount
=
cpu_to_le16
(
pSMB
->
ByteCount
);
rc
=
SendReceive
(
xid
,
tcon
->
ses
,
(
struct
smb_hdr
*
)
pSMB
,
...
...
fs/cifs/connect.c
View file @
82edf0ac
...
...
@@ -168,7 +168,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
}
else
if
(
temp
[
0
]
!=
(
char
)
0
)
{
cERROR
(
1
,
(
"
\n
Unknown RFC 1001 frame received not 0x00 nor 0x85"
));
dump_mem
(
" Received Data is: "
,
temp
,
length
);
cifs_
dump_mem
(
" Received Data is: "
,
temp
,
length
);
break
;
}
else
{
if
((
length
!=
sizeof
(
struct
smb_hdr
)
-
1
)
...
...
@@ -757,8 +757,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
/* Removed following few lines to not send old style password
hash ever - for better security */
/* toUpper(cifs_sb->local_nls, password_with_pad);
SMBencrypt(password_with_pad, cryptKey,session_key);
dump_mem("\nCIFS (Samba encrypt): ", session_key,CIFS_SESSION_KEY_SIZE); */
SMBencrypt(password_with_pad, cryptKey,session_key); */
rc
=
CIFSSessSetup
(
xid
,
pSesInfo
,
volume_info
.
username
,
...
...
@@ -925,7 +924,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses, char *user,
bcc_ptr
+=
CIFS_SESSION_KEY_SIZE
;
if
(
ses
->
capabilities
&
CAP_UNICODE
)
{
if
((
int
)
bcc_ptr
%
2
)
{
/* must be word aligned for Unicode */
if
((
long
)
bcc_ptr
%
2
)
{
/* must be word aligned for Unicode */
*
bcc_ptr
=
0
;
bcc_ptr
++
;
}
...
...
@@ -983,13 +982,12 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses, char *user,
strcpy
(
bcc_ptr
,
CIFS_NETWORK_OPSYS
);
bcc_ptr
+=
strlen
(
CIFS_NETWORK_OPSYS
)
+
1
;
}
BCC
(
smb_buffer
)
=
(
int
)
bcc_ptr
-
(
int
)
pByteArea
(
smb_buffer
);
BCC
(
smb_buffer
)
=
(
long
)
bcc_ptr
-
(
long
)
pByteArea
(
smb_buffer
);
smb_buffer
->
smb_buf_length
+=
BCC
(
smb_buffer
);
BCC
(
smb_buffer
)
=
cpu_to_le16
(
BCC
(
smb_buffer
));
rc
=
SendReceive
(
xid
,
ses
,
smb_buffer
,
smb_buffer_response
,
&
bytes_returned
,
1
);
/* dump_mem("\nSessSetup response is: ", smb_buffer_response, 92);*/
if
(
rc
)
{
/* rc = map_smb_to_linux_error(smb_buffer_response); now done in SendReceive */
}
else
if
((
smb_buffer_response
->
WordCount
==
3
)
...
...
@@ -1011,7 +1009,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses, char *user,
pSMBr
->
resp
.
SecurityBlobLength
;
if
(
smb_buffer
->
Flags2
&=
SMBFLG2_UNICODE
)
{
if
((
int
)
(
bcc_ptr
)
%
2
)
{
if
((
long
)
(
bcc_ptr
)
%
2
)
{
remaining_words
=
(
BCC
(
smb_buffer_response
)
-
1
)
/
2
;
...
...
@@ -1069,7 +1067,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses, char *user,
}
else
{
/* ASCII */
len
=
strnlen
(
bcc_ptr
,
1024
);
if
(((
int
)
bcc_ptr
+
len
)
-
(
int
)
if
(((
long
)
bcc_ptr
+
len
)
-
(
long
)
pByteArea
(
smb_buffer_response
)
<=
BCC
(
smb_buffer_response
))
{
ses
->
serverOS
=
kcalloc
(
len
+
1
,
GFP_KERNEL
);
...
...
@@ -1176,7 +1174,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
bcc_ptr
+=
SecurityBlobLength
;
if
(
ses
->
capabilities
&
CAP_UNICODE
)
{
if
((
int
)
bcc_ptr
%
2
)
{
/* must be word aligned for Unicode strings */
if
((
long
)
bcc_ptr
%
2
)
{
/* must be word aligned for Unicode strings */
*
bcc_ptr
=
0
;
bcc_ptr
++
;
}
...
...
@@ -1229,13 +1227,12 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
strcpy
(
bcc_ptr
,
CIFS_NETWORK_OPSYS
);
bcc_ptr
+=
strlen
(
CIFS_NETWORK_OPSYS
)
+
1
;
}
BCC
(
smb_buffer
)
=
(
int
)
bcc_ptr
-
(
int
)
pByteArea
(
smb_buffer
);
BCC
(
smb_buffer
)
=
(
long
)
bcc_ptr
-
(
long
)
pByteArea
(
smb_buffer
);
smb_buffer
->
smb_buf_length
+=
BCC
(
smb_buffer
);
BCC
(
smb_buffer
)
=
cpu_to_le16
(
BCC
(
smb_buffer
));
rc
=
SendReceive
(
xid
,
ses
,
smb_buffer
,
smb_buffer_response
,
&
bytes_returned
,
1
);
/* dump_mem("\nSessSetup response is: ", smb_buffer_response, 92); */
if
(
rc
)
{
/* rc = map_smb_to_linux_error(smb_buffer_response); *//* done in SendReceive now */
}
else
if
((
smb_buffer_response
->
WordCount
==
3
)
...
...
@@ -1265,7 +1262,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
}
if
(
smb_buffer
->
Flags2
&=
SMBFLG2_UNICODE
)
{
if
((
int
)
(
bcc_ptr
)
%
2
)
{
if
((
long
)
(
bcc_ptr
)
%
2
)
{
remaining_words
=
(
BCC
(
smb_buffer_response
)
-
1
)
/
2
;
...
...
@@ -1328,7 +1325,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
}
else
{
/* ASCII */
len
=
strnlen
(
bcc_ptr
,
1024
);
if
(((
int
)
bcc_ptr
+
len
)
-
(
int
)
if
(((
long
)
bcc_ptr
+
len
)
-
(
long
)
pByteArea
(
smb_buffer_response
)
<=
BCC
(
smb_buffer_response
))
{
ses
->
serverOS
=
kcalloc
(
len
+
1
,
GFP_KERNEL
);
...
...
@@ -1465,16 +1462,16 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
SecurityBlob
->
DomainName
.
MaximumLength
=
cpu_to_le16
(
SecurityBlob
->
DomainName
.
Length
);
SecurityBlob
->
DomainName
.
Buffer
=
cpu_to_le32
((
unsigned
int
)
&
SecurityBlob
->
cpu_to_le32
((
long
)
&
SecurityBlob
->
DomainString
-
(
unsigned
int
)
&
SecurityBlob
->
Signature
);
(
long
)
&
SecurityBlob
->
Signature
);
bcc_ptr
+=
SecurityBlob
->
DomainName
.
Length
;
SecurityBlobLength
+=
SecurityBlob
->
DomainName
.
Length
;
SecurityBlob
->
DomainName
.
Length
=
cpu_to_le16
(
SecurityBlob
->
DomainName
.
Length
);
}
if
(
ses
->
capabilities
&
CAP_UNICODE
)
{
if
((
int
)
bcc_ptr
%
2
)
{
if
((
long
)
bcc_ptr
%
2
)
{
*
bcc_ptr
=
0
;
bcc_ptr
++
;
}
...
...
@@ -1511,7 +1508,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
SecurityBlob
->
NegotiateFlags
=
cpu_to_le32
(
SecurityBlob
->
NegotiateFlags
);
pSMB
->
req
.
SecurityBlobLength
=
cpu_to_le16
(
SecurityBlobLength
);
BCC
(
smb_buffer
)
=
(
int
)
bcc_ptr
-
(
int
)
pByteArea
(
smb_buffer
);
BCC
(
smb_buffer
)
=
(
long
)
bcc_ptr
-
(
long
)
pByteArea
(
smb_buffer
);
smb_buffer
->
smb_buf_length
+=
BCC
(
smb_buffer
);
BCC
(
smb_buffer
)
=
cpu_to_le16
(
BCC
(
smb_buffer
));
...
...
@@ -1564,7 +1561,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
if
(
SecurityBlob2
->
NegotiateFlags
&
NTLMSSP_NEGOTIATE_NTLMV2
)
*
pNTLMv2_flag
=
TRUE
;
if
(
smb_buffer
->
Flags2
&=
SMBFLG2_UNICODE
)
{
if
((
int
)
(
bcc_ptr
)
%
2
)
{
if
((
long
)
(
bcc_ptr
)
%
2
)
{
remaining_words
=
(
BCC
(
smb_buffer_response
)
-
1
)
/
2
;
...
...
@@ -1650,7 +1647,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
}
else
{
/* ASCII */
len
=
strnlen
(
bcc_ptr
,
1024
);
if
(((
int
)
bcc_ptr
+
len
)
-
(
int
)
if
(((
long
)
bcc_ptr
+
len
)
-
(
long
)
pByteArea
(
smb_buffer_response
)
<=
BCC
(
smb_buffer_response
))
{
ses
->
serverOS
=
...
...
@@ -1846,7 +1843,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
SecurityBlobLength += SecurityBlob->WorkstationName.Length;
SecurityBlob->WorkstationName.Length = cpu_to_le16(SecurityBlob->WorkstationName.Length); */
if
((
int
)
bcc_ptr
%
2
)
{
if
((
long
)
bcc_ptr
%
2
)
{
*
bcc_ptr
=
0
;
bcc_ptr
++
;
}
...
...
@@ -1918,7 +1915,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
SecurityBlob
->
NegotiateFlags
=
cpu_to_le32
(
SecurityBlob
->
NegotiateFlags
);
pSMB
->
req
.
SecurityBlobLength
=
cpu_to_le16
(
SecurityBlobLength
);
BCC
(
smb_buffer
)
=
(
int
)
bcc_ptr
-
(
int
)
pByteArea
(
smb_buffer
);
BCC
(
smb_buffer
)
=
(
long
)
bcc_ptr
-
(
long
)
pByteArea
(
smb_buffer
);
smb_buffer
->
smb_buf_length
+=
BCC
(
smb_buffer
);
BCC
(
smb_buffer
)
=
cpu_to_le16
(
BCC
(
smb_buffer
));
...
...
@@ -1959,7 +1956,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
(
"
\n
NTLMSSP response to Authenticate "
));
if
(
smb_buffer
->
Flags2
&=
SMBFLG2_UNICODE
)
{
if
((
int
)
(
bcc_ptr
)
%
2
)
{
if
((
long
)
(
bcc_ptr
)
%
2
)
{
remaining_words
=
(
BCC
(
smb_buffer_response
)
-
1
)
/
2
;
...
...
@@ -2037,8 +2034,8 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
}
else
{
/* ASCII */
len
=
strnlen
(
bcc_ptr
,
1024
);
if
(((
int
)
bcc_ptr
+
len
)
-
(
int
)
pByteArea
(
smb_buffer_response
)
if
(((
long
)
bcc_ptr
+
len
)
-
(
long
)
pByteArea
(
smb_buffer_response
)
<=
BCC
(
smb_buffer_response
))
{
ses
->
serverOS
=
kcalloc
(
len
+
1
,
GFP_KERNEL
);
strncpy
(
ses
->
serverOS
,
bcc_ptr
,
len
);
...
...
@@ -2142,7 +2139,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
strcpy
(
bcc_ptr
,
"?????"
);
bcc_ptr
+=
strlen
(
"?????"
);
bcc_ptr
+=
1
;
BCC
(
smb_buffer
)
=
(
int
)
bcc_ptr
-
(
int
)
pByteArea
(
smb_buffer
);
BCC
(
smb_buffer
)
=
(
long
)
bcc_ptr
-
(
long
)
pByteArea
(
smb_buffer
);
smb_buffer
->
smb_buf_length
+=
BCC
(
smb_buffer
);
BCC
(
smb_buffer
)
=
cpu_to_le16
(
BCC
(
smb_buffer
));
...
...
@@ -2159,8 +2156,8 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
strncpy
(
tcon
->
treeName
,
tree
,
MAX_TREE_SIZE
);
if
(
smb_buffer
->
Flags2
&=
SMBFLG2_UNICODE
)
{
length
=
UniStrnlen
((
wchar_t
*
)
bcc_ptr
,
512
);
if
(((
int
)
bcc_ptr
+
(
2
*
length
))
-
(
int
)
pByteArea
(
smb_buffer_response
)
<=
if
(((
long
)
bcc_ptr
+
(
2
*
length
))
-
(
long
)
pByteArea
(
smb_buffer_response
)
<=
BCC
(
smb_buffer_response
))
{
tcon
->
nativeFileSystem
=
kcalloc
(
length
+
2
,
GFP_KERNEL
);
...
...
@@ -2175,8 +2172,8 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
/* else do not bother copying these informational fields */
}
else
{
length
=
strnlen
(
bcc_ptr
,
1024
);
if
(((
int
)
bcc_ptr
+
length
)
-
(
int
)
pByteArea
(
smb_buffer_response
)
<=
if
(((
long
)
bcc_ptr
+
length
)
-
(
long
)
pByteArea
(
smb_buffer_response
)
<=
BCC
(
smb_buffer_response
))
{
tcon
->
nativeFileSystem
=
kcalloc
(
length
+
1
,
GFP_KERNEL
);
...
...
fs/cifs/file.c
View file @
82edf0ac
...
...
@@ -572,9 +572,6 @@ fill_in_inode(struct inode *tmp_inode,
tmp_inode
->
i_size
=
pfindData
->
EndOfFile
;
tmp_inode
->
i_blocks
=
do_div
(
pfindData
->
AllocationSize
,
tmp_inode
->
i_blksize
);
cFYI
(
1
,
(
"
\n
Finddata alloc size (from smb) %lld"
,
pfindData
->
AllocationSize
));
if
(
pfindData
->
AllocationSize
<
pfindData
->
EndOfFile
)
cFYI
(
1
,
(
"
\n
Server inconsistency Error: it says allocation size less than end of file "
));
cFYI
(
1
,
...
...
@@ -652,10 +649,6 @@ unix_fill_in_inode(struct inode *tmp_inode,
tmp_inode
->
i_size
=
pfindData
->
EndOfFile
;
tmp_inode
->
i_blocks
=
do_div
(
pfindData
->
NumOfBytes
,
tmp_inode
->
i_blksize
);
cFYI
(
0
,
(
"
\n
Finddata alloc size (from smb) %lld"
,
pfindData
->
NumOfBytes
));
/* BB remove */
if
(
pfindData
->
NumOfBytes
<
pfindData
->
EndOfFile
)
cFYI
(
0
,
(
"
\n
Server inconsistency Error: it says allocation size less than end of file "
));
/* BB remove */
cFYI
(
1
,
(
"
\n
CIFS FFIRST: Size %ld and blocks %ld "
,
(
unsigned
long
)
tmp_inode
->
i_size
,
tmp_inode
->
i_blocks
));
/* BB remove */
if
(
S_ISREG
(
tmp_inode
->
i_mode
))
{
cFYI
(
1
,
(
" File inode "
));
tmp_inode
->
i_op
=
&
cifs_file_inode_ops
;
...
...
fs/cifs/inode.c
View file @
82edf0ac
...
...
@@ -131,9 +131,6 @@ cifs_get_inode_info_unix(struct inode **pinode,
inode
->
i_blksize
=
(
pTcon
->
ses
->
maxBuf
-
MAX_CIFS_HDR_SIZE
)
&
0xFFFFFE00
;
inode
->
i_blocks
=
do_div
(
findData
.
NumOfBytes
,
inode
->
i_blksize
);
cFYI
(
1
,
(
"
\n
Finddata alloc size (from smb) %lld"
,
findData
.
NumOfBytes
));
if
(
findData
.
NumOfBytes
<
findData
.
EndOfFile
)
cFYI
(
1
,
(
"
\n
Server inconsistency Error: it says allocation size less than end of file "
));
cFYI
(
1
,
...
...
fs/cifs/nterr.c
View file @
82edf0ac
...
...
@@ -694,8 +694,8 @@ const struct nt_err_code_struct nt_errs[] = {
/*****************************************************************************
Print an error message from the status code
*****************************************************************************/
void
print_status
(
__u32
status_code
)
/*
void
cifs_
print_status(__u32 status_code)
{
int idx = 0;
...
...
@@ -709,4 +709,4 @@ print_status(__u32 status_code)
idx++;
}
return;
}
}
*/
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