mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
[CIFS] whitespace/formatting fixes
This should be the last big batch of whitespace/formatting fixes. checkpatch warnings for the cifs directory are down about 90% and many of the remaining ones are harder to remove or make the code harder to read. Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
7521a3c566
commit
50c2f75388
27 changed files with 1285 additions and 1160 deletions
|
@ -459,7 +459,7 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
unsigned int cls, con, tag, oidlen, rc;
|
||||
int use_ntlmssp = FALSE;
|
||||
|
||||
*secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default */
|
||||
*secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default*/
|
||||
|
||||
/* cifs_dump_mem(" Received SecBlob ", security_blob, length); */
|
||||
|
||||
|
@ -498,7 +498,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
return 0;
|
||||
} else if ((cls != ASN1_CTX) || (con != ASN1_CON)
|
||||
|| (tag != ASN1_EOC)) {
|
||||
cFYI(1,("cls = %d con = %d tag = %d end = %p (%d) exit 0",
|
||||
cFYI(1,
|
||||
("cls = %d con = %d tag = %d end = %p (%d) exit 0",
|
||||
cls, con, tag, end, *end));
|
||||
return 0;
|
||||
}
|
||||
|
@ -508,7 +509,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
return 0;
|
||||
} else if ((cls != ASN1_UNI) || (con != ASN1_CON)
|
||||
|| (tag != ASN1_SEQ)) {
|
||||
cFYI(1,("cls = %d con = %d tag = %d end = %p (%d) exit 1",
|
||||
cFYI(1,
|
||||
("cls = %d con = %d tag = %d end = %p (%d) exit 1",
|
||||
cls, con, tag, end, *end));
|
||||
return 0;
|
||||
}
|
||||
|
@ -540,32 +542,34 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
rc = asn1_header_decode(&ctx, &end, &cls, &con, &tag);
|
||||
if (!rc) {
|
||||
cFYI(1,
|
||||
("Error 1 decoding negTokenInit header exit 2"));
|
||||
("Error decoding negTokenInit hdr exit2"));
|
||||
return 0;
|
||||
}
|
||||
if ((tag == ASN1_OJI) && (con == ASN1_PRI)) {
|
||||
rc = asn1_oid_decode(&ctx, end, &oid, &oidlen);
|
||||
if(rc) {
|
||||
if (rc) {
|
||||
cFYI(1,
|
||||
("OID len = %d oid = 0x%lx 0x%lx 0x%lx 0x%lx",
|
||||
oidlen, *oid, *(oid + 1), *(oid + 2),
|
||||
*(oid + 3)));
|
||||
rc = compare_oid(oid, oidlen, NTLMSSP_OID,
|
||||
NTLMSSP_OID_LEN);
|
||||
("OID len = %d oid = 0x%lx 0x%lx "
|
||||
"0x%lx 0x%lx",
|
||||
oidlen, *oid, *(oid + 1),
|
||||
*(oid + 2), *(oid + 3)));
|
||||
rc = compare_oid(oid, oidlen,
|
||||
NTLMSSP_OID, NTLMSSP_OID_LEN);
|
||||
kfree(oid);
|
||||
if (rc)
|
||||
use_ntlmssp = TRUE;
|
||||
}
|
||||
} else {
|
||||
cFYI(1,("This should be an oid what is going on? "));
|
||||
cFYI(1, ("Should be an oid what is going on?"));
|
||||
}
|
||||
}
|
||||
|
||||
if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) {
|
||||
cFYI(1,
|
||||
("Error decoding last part of negTokenInit exit 3"));
|
||||
("Error decoding last part negTokenInit exit3"));
|
||||
return 0;
|
||||
} else if ((cls != ASN1_CTX) || (con != ASN1_CON)) { /* tag = 3 indicating mechListMIC */
|
||||
} else if ((cls != ASN1_CTX) || (con != ASN1_CON)) {
|
||||
/* tag = 3 indicating mechListMIC */
|
||||
cFYI(1,
|
||||
("Exit 4 cls = %d con = %d tag = %d end = %p (%d)",
|
||||
cls, con, tag, end, *end));
|
||||
|
@ -573,7 +577,7 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
}
|
||||
if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) {
|
||||
cFYI(1,
|
||||
("Error decoding last part of negTokenInit exit 5"));
|
||||
("Error decoding last part negTokenInit exit5"));
|
||||
return 0;
|
||||
} else if ((cls != ASN1_UNI) || (con != ASN1_CON)
|
||||
|| (tag != ASN1_SEQ)) {
|
||||
|
@ -584,7 +588,7 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
|
||||
if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) {
|
||||
cFYI(1,
|
||||
("Error decoding last part of negTokenInit exit 7"));
|
||||
("Error decoding last part negTokenInit exit 7"));
|
||||
return 0;
|
||||
} else if ((cls != ASN1_CTX) || (con != ASN1_CON)) {
|
||||
cFYI(1,
|
||||
|
@ -594,16 +598,17 @@ decode_negTokenInit(unsigned char *security_blob, int length,
|
|||
}
|
||||
if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) {
|
||||
cFYI(1,
|
||||
("Error decoding last part of negTokenInit exit 9"));
|
||||
("Error decoding last part negTokenInit exit9"));
|
||||
return 0;
|
||||
} else if ((cls != ASN1_UNI) || (con != ASN1_PRI)
|
||||
|| (tag != ASN1_GENSTR)) {
|
||||
cFYI(1,
|
||||
("Exit 10 cls = %d con = %d tag = %d end = %p (%d)",
|
||||
("Exit10 cls = %d con = %d tag = %d end = %p (%d)",
|
||||
cls, con, tag, end, *end));
|
||||
return 0;
|
||||
}
|
||||
cFYI(1, ("Need to call asn1_octets_decode() function for this %s", ctx.pointer)); /* is this UTF-8 or ASCII? */
|
||||
cFYI(1, ("Need to call asn1_octets_decode() function for %s",
|
||||
ctx.pointer)); /* is this UTF-8 or ASCII? */
|
||||
}
|
||||
|
||||
/* if (use_kerberos)
|
||||
|
|
|
@ -145,7 +145,6 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
|
|||
(ses->serverNOS == NULL)) {
|
||||
buf += sprintf(buf, "\nentry for %s not fully "
|
||||
"displayed\n\t", ses->serverName);
|
||||
|
||||
} else {
|
||||
length =
|
||||
sprintf(buf,
|
||||
|
|
|
@ -43,6 +43,6 @@ struct cifs_sb_info {
|
|||
mode_t mnt_dir_mode;
|
||||
int mnt_cifs_flags;
|
||||
int prepathlen;
|
||||
char * prepath;
|
||||
char *prepath;
|
||||
};
|
||||
#endif /* _CIFS_FS_SB_H */
|
||||
|
|
|
@ -66,7 +66,7 @@ cifs_strtoUCS(__le16 * to, const char *from, int len,
|
|||
{
|
||||
int charlen;
|
||||
int i;
|
||||
wchar_t * wchar_to = (wchar_t *)to; /* needed to quiet sparse */
|
||||
wchar_t *wchar_to = (wchar_t *)to; /* needed to quiet sparse */
|
||||
|
||||
for (i = 0; len && *from; i++, from += charlen, len -= charlen) {
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ int cifs_strtoUCS(__le16 *, const char *, int, const struct nls_table *);
|
|||
* Address of the first string
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrcat(wchar_t * ucs1, const wchar_t * ucs2)
|
||||
UniStrcat(wchar_t *ucs1, const wchar_t *ucs2)
|
||||
{
|
||||
wchar_t *anchor = ucs1; /* save a pointer to start of ucs1 */
|
||||
|
||||
|
@ -88,7 +88,7 @@ UniStrcat(wchar_t * ucs1, const wchar_t * ucs2)
|
|||
* or NULL if the character is not in the string
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrchr(const wchar_t * ucs, wchar_t uc)
|
||||
UniStrchr(const wchar_t *ucs, wchar_t uc)
|
||||
{
|
||||
while ((*ucs != uc) && *ucs)
|
||||
ucs++;
|
||||
|
@ -107,7 +107,7 @@ UniStrchr(const wchar_t * ucs, wchar_t uc)
|
|||
* > 0: First string is greater than second
|
||||
*/
|
||||
static inline int
|
||||
UniStrcmp(const wchar_t * ucs1, const wchar_t * ucs2)
|
||||
UniStrcmp(const wchar_t *ucs1, const wchar_t *ucs2)
|
||||
{
|
||||
while ((*ucs1 == *ucs2) && *ucs1) {
|
||||
ucs1++;
|
||||
|
@ -120,7 +120,7 @@ UniStrcmp(const wchar_t * ucs1, const wchar_t * ucs2)
|
|||
* UniStrcpy: Copy a string
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrcpy(wchar_t * ucs1, const wchar_t * ucs2)
|
||||
UniStrcpy(wchar_t *ucs1, const wchar_t *ucs2)
|
||||
{
|
||||
wchar_t *anchor = ucs1; /* save the start of result string */
|
||||
|
||||
|
@ -132,7 +132,7 @@ UniStrcpy(wchar_t * ucs1, const wchar_t * ucs2)
|
|||
* UniStrlen: Return the length of a string (in 16 bit Unicode chars not bytes)
|
||||
*/
|
||||
static inline size_t
|
||||
UniStrlen(const wchar_t * ucs1)
|
||||
UniStrlen(const wchar_t *ucs1)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
|
@ -146,7 +146,7 @@ UniStrlen(const wchar_t * ucs1)
|
|||
* string (length limited)
|
||||
*/
|
||||
static inline size_t
|
||||
UniStrnlen(const wchar_t * ucs1, int maxlen)
|
||||
UniStrnlen(const wchar_t *ucs1, int maxlen)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
|
@ -162,7 +162,7 @@ UniStrnlen(const wchar_t * ucs1, int maxlen)
|
|||
* UniStrncat: Concatenate length limited string
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrncat(wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
||||
UniStrncat(wchar_t *ucs1, const wchar_t *ucs2, size_t n)
|
||||
{
|
||||
wchar_t *anchor = ucs1; /* save pointer to string 1 */
|
||||
|
||||
|
@ -180,7 +180,7 @@ UniStrncat(wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
|||
* UniStrncmp: Compare length limited string
|
||||
*/
|
||||
static inline int
|
||||
UniStrncmp(const wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
||||
UniStrncmp(const wchar_t *ucs1, const wchar_t *ucs2, size_t n)
|
||||
{
|
||||
if (!n)
|
||||
return 0; /* Null strings are equal */
|
||||
|
@ -195,7 +195,7 @@ UniStrncmp(const wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
|||
* UniStrncmp_le: Compare length limited string - native to little-endian
|
||||
*/
|
||||
static inline int
|
||||
UniStrncmp_le(const wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
||||
UniStrncmp_le(const wchar_t *ucs1, const wchar_t *ucs2, size_t n)
|
||||
{
|
||||
if (!n)
|
||||
return 0; /* Null strings are equal */
|
||||
|
@ -210,7 +210,7 @@ UniStrncmp_le(const wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
|||
* UniStrncpy: Copy length limited string with pad
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrncpy(wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
||||
UniStrncpy(wchar_t *ucs1, const wchar_t *ucs2, size_t n)
|
||||
{
|
||||
wchar_t *anchor = ucs1;
|
||||
|
||||
|
@ -227,7 +227,7 @@ UniStrncpy(wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
|||
* UniStrncpy_le: Copy length limited string with pad to little-endian
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrncpy_le(wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
||||
UniStrncpy_le(wchar_t *ucs1, const wchar_t *ucs2, size_t n)
|
||||
{
|
||||
wchar_t *anchor = ucs1;
|
||||
|
||||
|
@ -248,7 +248,7 @@ UniStrncpy_le(wchar_t * ucs1, const wchar_t * ucs2, size_t n)
|
|||
* NULL if no matching string is found
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrstr(const wchar_t * ucs1, const wchar_t * ucs2)
|
||||
UniStrstr(const wchar_t *ucs1, const wchar_t *ucs2)
|
||||
{
|
||||
const wchar_t *anchor1 = ucs1;
|
||||
const wchar_t *anchor2 = ucs2;
|
||||
|
@ -298,7 +298,7 @@ UniToupper(register wchar_t uc)
|
|||
* UniStrupr: Upper case a unicode string
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrupr(register wchar_t * upin)
|
||||
UniStrupr(register wchar_t *upin)
|
||||
{
|
||||
register wchar_t *up;
|
||||
|
||||
|
@ -339,7 +339,7 @@ UniTolower(wchar_t uc)
|
|||
* UniStrlwr: Lower case a unicode string
|
||||
*/
|
||||
static inline wchar_t *
|
||||
UniStrlwr(register wchar_t * upin)
|
||||
UniStrlwr(register wchar_t *upin)
|
||||
{
|
||||
register wchar_t *up;
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ signed char CifsUniUpperTable[512] = {
|
|||
0, -1, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, /* 1a0-1af */
|
||||
-1, 0, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, /* 1b0-1bf */
|
||||
0, 0, 0, 0, 0, -1, -2, 0, -1, -2, 0, -1, -2, 0, -1, 0, /* 1c0-1cf */
|
||||
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -79, 0, -1, /* 1d0-1df */
|
||||
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -79, 0, -1, /* 1d0-1df */
|
||||
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, /* 1e0-1ef */
|
||||
0, 0, -1, -2, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, /* 1f0-1ff */
|
||||
};
|
||||
|
|
|
@ -70,7 +70,7 @@ int cifs_sign_smb(struct smb_hdr *cifs_pdu, struct TCP_Server_Info *server,
|
|||
|
||||
spin_lock(&GlobalMid_Lock);
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber =
|
||||
cpu_to_le32(server->sequence_number);
|
||||
cpu_to_le32(server->sequence_number);
|
||||
cifs_pdu->Signature.Sequence.Reserved = 0;
|
||||
|
||||
*pexpected_response_sequence_number = server->sequence_number++;
|
||||
|
@ -98,9 +98,9 @@ static int cifs_calc_signature2(const struct kvec *iov, int n_vec,
|
|||
|
||||
MD5Init(&context);
|
||||
MD5Update(&context, (char *)&key->data, key->len);
|
||||
for (i=0;i<n_vec;i++) {
|
||||
for (i = 0; i < n_vec; i++) {
|
||||
if (iov[i].iov_base == NULL) {
|
||||
cERROR(1 ,("null iovec entry"));
|
||||
cERROR(1, ("null iovec entry"));
|
||||
return -EIO;
|
||||
} else if (iov[i].iov_len == 0)
|
||||
break; /* bail out if we are sent nothing to sign */
|
||||
|
@ -167,36 +167,38 @@ int cifs_verify_signature(struct smb_hdr *cifs_pdu,
|
|||
return 0;
|
||||
|
||||
if (cifs_pdu->Command == SMB_COM_LOCKING_ANDX) {
|
||||
struct smb_com_lock_req * pSMB =
|
||||
struct smb_com_lock_req *pSMB =
|
||||
(struct smb_com_lock_req *)cifs_pdu;
|
||||
if (pSMB->LockType & LOCKING_ANDX_OPLOCK_RELEASE)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* BB what if signatures are supposed to be on for session but server does not
|
||||
send one? BB */
|
||||
/* BB what if signatures are supposed to be on for session but
|
||||
server does not send one? BB */
|
||||
|
||||
/* Do not need to verify session setups with signature "BSRSPYL " */
|
||||
if(memcmp(cifs_pdu->Signature.SecuritySignature,"BSRSPYL ",8)==0)
|
||||
cFYI(1,("dummy signature received for smb command 0x%x",cifs_pdu->Command));
|
||||
if (memcmp(cifs_pdu->Signature.SecuritySignature, "BSRSPYL ", 8) == 0)
|
||||
cFYI(1, ("dummy signature received for smb command 0x%x",
|
||||
cifs_pdu->Command));
|
||||
|
||||
/* save off the origiginal signature so we can modify the smb and check
|
||||
its signature against what the server sent */
|
||||
memcpy(server_response_sig,cifs_pdu->Signature.SecuritySignature,8);
|
||||
memcpy(server_response_sig, cifs_pdu->Signature.SecuritySignature, 8);
|
||||
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber = cpu_to_le32(expected_sequence_number);
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber =
|
||||
cpu_to_le32(expected_sequence_number);
|
||||
cifs_pdu->Signature.Sequence.Reserved = 0;
|
||||
|
||||
rc = cifs_calculate_signature(cifs_pdu, mac_key,
|
||||
what_we_think_sig_should_be);
|
||||
|
||||
if(rc)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* cifs_dump_mem("what we think it should be: ",
|
||||
what_we_think_sig_should_be, 16); */
|
||||
|
||||
/* cifs_dump_mem("what we think it should be: ",what_we_think_sig_should_be,16); */
|
||||
|
||||
if(memcmp(server_response_sig, what_we_think_sig_should_be, 8))
|
||||
if (memcmp(server_response_sig, what_we_think_sig_should_be, 8))
|
||||
return -EACCES;
|
||||
else
|
||||
return 0;
|
||||
|
@ -218,25 +220,25 @@ int cifs_calculate_mac_key(struct mac_key *key, const char *rn,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int CalcNTLMv2_partial_mac_key(struct cifsSesInfo * ses,
|
||||
const struct nls_table * nls_info)
|
||||
int CalcNTLMv2_partial_mac_key(struct cifsSesInfo *ses,
|
||||
const struct nls_table *nls_info)
|
||||
{
|
||||
char temp_hash[16];
|
||||
struct HMACMD5Context ctx;
|
||||
char * ucase_buf;
|
||||
__le16 * unicode_buf;
|
||||
unsigned int i,user_name_len,dom_name_len;
|
||||
char *ucase_buf;
|
||||
__le16 *unicode_buf;
|
||||
unsigned int i, user_name_len, dom_name_len;
|
||||
|
||||
if(ses == NULL)
|
||||
if (ses == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
E_md4hash(ses->password, temp_hash);
|
||||
|
||||
hmac_md5_init_limK_to_64(temp_hash, 16, &ctx);
|
||||
user_name_len = strlen(ses->userName);
|
||||
if(user_name_len > MAX_USERNAME_SIZE)
|
||||
if (user_name_len > MAX_USERNAME_SIZE)
|
||||
return -EINVAL;
|
||||
if(ses->domainName == NULL)
|
||||
if (ses->domainName == NULL)
|
||||
return -EINVAL; /* BB should we use CIFS_LINUX_DOM */
|
||||
dom_name_len = strlen(ses->domainName);
|
||||
if (dom_name_len > MAX_USERNAME_SIZE)
|
||||
|
@ -251,17 +253,19 @@ int CalcNTLMv2_partial_mac_key(struct cifsSesInfo * ses,
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for (i = 0;i < user_name_len; i++)
|
||||
for (i = 0; i < user_name_len; i++)
|
||||
ucase_buf[i] = nls_info->charset2upper[(int)ses->userName[i]];
|
||||
ucase_buf[i] = 0;
|
||||
user_name_len = cifs_strtoUCS(unicode_buf, ucase_buf, MAX_USERNAME_SIZE*2, nls_info);
|
||||
user_name_len = cifs_strtoUCS(unicode_buf, ucase_buf,
|
||||
MAX_USERNAME_SIZE*2, nls_info);
|
||||
unicode_buf[user_name_len] = 0;
|
||||
user_name_len++;
|
||||
|
||||
for (i = 0; i < dom_name_len; i++)
|
||||
ucase_buf[i] = nls_info->charset2upper[(int)ses->domainName[i]];
|
||||
ucase_buf[i] = 0;
|
||||
dom_name_len = cifs_strtoUCS(unicode_buf+user_name_len, ucase_buf, MAX_USERNAME_SIZE*2, nls_info);
|
||||
dom_name_len = cifs_strtoUCS(unicode_buf+user_name_len, ucase_buf,
|
||||
MAX_USERNAME_SIZE*2, nls_info);
|
||||
|
||||
unicode_buf[user_name_len + dom_name_len] = 0;
|
||||
hmac_md5_update((const unsigned char *) unicode_buf,
|
||||
|
@ -274,21 +278,22 @@ int CalcNTLMv2_partial_mac_key(struct cifsSesInfo * ses,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_CIFS_WEAK_PW_HASH
|
||||
void calc_lanman_hash(struct cifsSesInfo * ses, char * lnm_session_key)
|
||||
void calc_lanman_hash(struct cifsSesInfo *ses, char *lnm_session_key)
|
||||
{
|
||||
int i;
|
||||
char password_with_pad[CIFS_ENCPWD_SIZE];
|
||||
|
||||
if(ses->server == NULL)
|
||||
if (ses->server == NULL)
|
||||
return;
|
||||
|
||||
memset(password_with_pad, 0, CIFS_ENCPWD_SIZE);
|
||||
if(ses->password)
|
||||
if (ses->password)
|
||||
strncpy(password_with_pad, ses->password, CIFS_ENCPWD_SIZE);
|
||||
|
||||
if((ses->server->secMode & SECMODE_PW_ENCRYPT) == 0)
|
||||
if(extended_security & CIFSSEC_MAY_PLNTXT) {
|
||||
memcpy(lnm_session_key, password_with_pad, CIFS_ENCPWD_SIZE);
|
||||
if ((ses->server->secMode & SECMODE_PW_ENCRYPT) == 0)
|
||||
if (extended_security & CIFSSEC_MAY_PLNTXT) {
|
||||
memcpy(lnm_session_key, password_with_pad,
|
||||
CIFS_ENCPWD_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -303,7 +308,7 @@ void calc_lanman_hash(struct cifsSesInfo * ses, char * lnm_session_key)
|
|||
utf8 and other multibyte codepages each need their own strupper
|
||||
function since a byte at a time will ont work. */
|
||||
|
||||
for(i = 0; i < CIFS_ENCPWD_SIZE; i++) {
|
||||
for (i = 0; i < CIFS_ENCPWD_SIZE; i++) {
|
||||
password_with_pad[i] = toupper(password_with_pad[i]);
|
||||
}
|
||||
|
||||
|
@ -314,18 +319,18 @@ void calc_lanman_hash(struct cifsSesInfo * ses, char * lnm_session_key)
|
|||
#endif /* CIFS_WEAK_PW_HASH */
|
||||
|
||||
static int calc_ntlmv2_hash(struct cifsSesInfo *ses,
|
||||
const struct nls_table * nls_cp)
|
||||
const struct nls_table *nls_cp)
|
||||
{
|
||||
int rc = 0;
|
||||
int len;
|
||||
char nt_hash[16];
|
||||
struct HMACMD5Context * pctxt;
|
||||
wchar_t * user;
|
||||
wchar_t * domain;
|
||||
struct HMACMD5Context *pctxt;
|
||||
wchar_t *user;
|
||||
wchar_t *domain;
|
||||
|
||||
pctxt = kmalloc(sizeof(struct HMACMD5Context), GFP_KERNEL);
|
||||
|
||||
if(pctxt == NULL)
|
||||
if (pctxt == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
/* calculate md4 hash of password */
|
||||
|
@ -337,18 +342,18 @@ static int calc_ntlmv2_hash(struct cifsSesInfo *ses,
|
|||
/* convert ses->userName to unicode and uppercase */
|
||||
len = strlen(ses->userName);
|
||||
user = kmalloc(2 + (len * 2), GFP_KERNEL);
|
||||
if(user == NULL)
|
||||
if (user == NULL)
|
||||
goto calc_exit_2;
|
||||
len = cifs_strtoUCS(user, ses->userName, len, nls_cp);
|
||||
UniStrupr(user);
|
||||
hmac_md5_update((char *)user, 2*len, pctxt);
|
||||
|
||||
/* convert ses->domainName to unicode and uppercase */
|
||||
if(ses->domainName) {
|
||||
if (ses->domainName) {
|
||||
len = strlen(ses->domainName);
|
||||
|
||||
domain = kmalloc(2 + (len * 2), GFP_KERNEL);
|
||||
if(domain == NULL)
|
||||
domain = kmalloc(2 + (len * 2), GFP_KERNEL);
|
||||
if (domain == NULL)
|
||||
goto calc_exit_1;
|
||||
len = cifs_strtoUCS(domain, ses->domainName, len, nls_cp);
|
||||
/* the following line was removed since it didn't work well
|
||||
|
@ -370,11 +375,11 @@ calc_exit_2:
|
|||
return rc;
|
||||
}
|
||||
|
||||
void setup_ntlmv2_rsp(struct cifsSesInfo * ses, char * resp_buf,
|
||||
const struct nls_table * nls_cp)
|
||||
void setup_ntlmv2_rsp(struct cifsSesInfo *ses, char *resp_buf,
|
||||
const struct nls_table *nls_cp)
|
||||
{
|
||||
int rc;
|
||||
struct ntlmv2_resp * buf = (struct ntlmv2_resp *)resp_buf;
|
||||
struct ntlmv2_resp *buf = (struct ntlmv2_resp *)resp_buf;
|
||||
struct HMACMD5Context context;
|
||||
|
||||
buf->blob_signature = cpu_to_le32(0x00000101);
|
||||
|
@ -389,8 +394,8 @@ void setup_ntlmv2_rsp(struct cifsSesInfo * ses, char * resp_buf,
|
|||
|
||||
/* calculate buf->ntlmv2_hash */
|
||||
rc = calc_ntlmv2_hash(ses, nls_cp);
|
||||
if(rc)
|
||||
cERROR(1,("could not get v2 hash rc %d",rc));
|
||||
if (rc)
|
||||
cERROR(1, ("could not get v2 hash rc %d", rc));
|
||||
CalcNTLMv2_response(ses, resp_buf);
|
||||
|
||||
/* now calculate the MAC key for NTLMv2 */
|
||||
|
@ -403,16 +408,17 @@ void setup_ntlmv2_rsp(struct cifsSesInfo * ses, char * resp_buf,
|
|||
ses->server->mac_signing_key.len = 16 + sizeof(struct ntlmv2_resp);
|
||||
}
|
||||
|
||||
void CalcNTLMv2_response(const struct cifsSesInfo * ses, char * v2_session_response)
|
||||
void CalcNTLMv2_response(const struct cifsSesInfo *ses,
|
||||
char *v2_session_response)
|
||||
{
|
||||
struct HMACMD5Context context;
|
||||
/* rest of v2 struct already generated */
|
||||
memcpy(v2_session_response + 8, ses->server->cryptKey,8);
|
||||
memcpy(v2_session_response + 8, ses->server->cryptKey, 8);
|
||||
hmac_md5_init_limK_to_64(ses->server->ntlmv2_hash, 16, &context);
|
||||
|
||||
hmac_md5_update(v2_session_response+8,
|
||||
sizeof(struct ntlmv2_resp) - 8, &context);
|
||||
|
||||
hmac_md5_final(v2_session_response,&context);
|
||||
hmac_md5_final(v2_session_response, &context);
|
||||
/* cifs_dump_mem("v2_sess_rsp: ", v2_session_response, 32); */
|
||||
}
|
||||
|
|
|
@ -230,7 +230,7 @@ cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|||
longer available? */
|
||||
}
|
||||
|
||||
static int cifs_permission(struct inode * inode, int mask, struct nameidata *nd)
|
||||
static int cifs_permission(struct inode *inode, int mask, struct nameidata *nd)
|
||||
{
|
||||
struct cifs_sb_info *cifs_sb;
|
||||
|
||||
|
@ -317,15 +317,15 @@ cifs_show_options(struct seq_file *s, struct vfsmount *m)
|
|||
if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID) ||
|
||||
!(cifs_sb->tcon->ses->capabilities & CAP_UNIX))
|
||||
seq_printf(s, ",gid=%d", cifs_sb->mnt_gid);
|
||||
seq_printf(s, ",rsize=%d",cifs_sb->rsize);
|
||||
seq_printf(s, ",wsize=%d",cifs_sb->wsize);
|
||||
seq_printf(s, ",rsize=%d", cifs_sb->rsize);
|
||||
seq_printf(s, ",wsize=%d", cifs_sb->wsize);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CIFS_QUOTA
|
||||
int cifs_xquota_set(struct super_block * sb, int quota_type, qid_t qid,
|
||||
struct fs_disk_quota * pdquota)
|
||||
int cifs_xquota_set(struct super_block *sb, int quota_type, qid_t qid,
|
||||
struct fs_disk_quota *pdquota)
|
||||
{
|
||||
int xid;
|
||||
int rc = 0;
|
||||
|
@ -340,7 +340,7 @@ int cifs_xquota_set(struct super_block * sb, int quota_type, qid_t qid,
|
|||
|
||||
xid = GetXid();
|
||||
if (pTcon) {
|
||||
cFYI(1,("set type: 0x%x id: %d",quota_type,qid));
|
||||
cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
|
||||
} else {
|
||||
return -EIO;
|
||||
}
|
||||
|
@ -349,8 +349,8 @@ int cifs_xquota_set(struct super_block * sb, int quota_type, qid_t qid,
|
|||
return rc;
|
||||
}
|
||||
|
||||
int cifs_xquota_get(struct super_block * sb, int quota_type, qid_t qid,
|
||||
struct fs_disk_quota * pdquota)
|
||||
int cifs_xquota_get(struct super_block *sb, int quota_type, qid_t qid,
|
||||
struct fs_disk_quota *pdquota)
|
||||
{
|
||||
int xid;
|
||||
int rc = 0;
|
||||
|
@ -364,7 +364,7 @@ int cifs_xquota_get(struct super_block * sb, int quota_type, qid_t qid,
|
|||
|
||||
xid = GetXid();
|
||||
if (pTcon) {
|
||||
cFYI(1,("set type: 0x%x id: %d",quota_type,qid));
|
||||
cFYI(1, ("set type: 0x%x id: %d", quota_type, qid));
|
||||
} else {
|
||||
rc = -EIO;
|
||||
}
|
||||
|
@ -373,7 +373,7 @@ int cifs_xquota_get(struct super_block * sb, int quota_type, qid_t qid,
|
|||
return rc;
|
||||
}
|
||||
|
||||
int cifs_xstate_set(struct super_block * sb, unsigned int flags, int operation)
|
||||
int cifs_xstate_set(struct super_block *sb, unsigned int flags, int operation)
|
||||
{
|
||||
int xid;
|
||||
int rc = 0;
|
||||
|
@ -387,7 +387,7 @@ int cifs_xstate_set(struct super_block * sb, unsigned int flags, int operation)
|
|||
|
||||
xid = GetXid();
|
||||
if (pTcon) {
|
||||
cFYI(1,("flags: 0x%x operation: 0x%x",flags,operation));
|
||||
cFYI(1, ("flags: 0x%x operation: 0x%x", flags, operation));
|
||||
} else {
|
||||
rc = -EIO;
|
||||
}
|
||||
|
@ -396,7 +396,7 @@ int cifs_xstate_set(struct super_block * sb, unsigned int flags, int operation)
|
|||
return rc;
|
||||
}
|
||||
|
||||
int cifs_xstate_get(struct super_block * sb, struct fs_quota_stat *qstats)
|
||||
int cifs_xstate_get(struct super_block *sb, struct fs_quota_stat *qstats)
|
||||
{
|
||||
int xid;
|
||||
int rc = 0;
|
||||
|
@ -410,7 +410,7 @@ int cifs_xstate_get(struct super_block * sb, struct fs_quota_stat *qstats)
|
|||
}
|
||||
xid = GetXid();
|
||||
if (pTcon) {
|
||||
cFYI(1,("pqstats %p",qstats));
|
||||
cFYI(1, ("pqstats %p", qstats));
|
||||
} else {
|
||||
rc = -EIO;
|
||||
}
|
||||
|
@ -427,10 +427,10 @@ static struct quotactl_ops cifs_quotactl_ops = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static void cifs_umount_begin(struct vfsmount * vfsmnt, int flags)
|
||||
static void cifs_umount_begin(struct vfsmount *vfsmnt, int flags)
|
||||
{
|
||||
struct cifs_sb_info *cifs_sb;
|
||||
struct cifsTconInfo * tcon;
|
||||
struct cifsTconInfo *tcon;
|
||||
|
||||
if (!(flags & MNT_FORCE))
|
||||
return;
|
||||
|
@ -448,9 +448,8 @@ static void cifs_umount_begin(struct vfsmount * vfsmnt, int flags)
|
|||
|
||||
/* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
|
||||
/* cancel_notify_requests(tcon); */
|
||||
if (tcon->ses && tcon->ses->server)
|
||||
{
|
||||
cFYI(1,("wake up tasks now - umount begin not complete"));
|
||||
if (tcon->ses && tcon->ses->server) {
|
||||
cFYI(1, ("wake up tasks now - umount begin not complete"));
|
||||
wake_up_all(&tcon->ses->server->request_q);
|
||||
wake_up_all(&tcon->ses->server->response_q);
|
||||
msleep(1); /* yield */
|
||||
|
@ -484,9 +483,10 @@ static const struct super_operations cifs_super_ops = {
|
|||
.alloc_inode = cifs_alloc_inode,
|
||||
.destroy_inode = cifs_destroy_inode,
|
||||
/* .drop_inode = generic_delete_inode,
|
||||
.delete_inode = cifs_delete_inode, *//* Do not need the above two functions
|
||||
unless later we add lazy close of inodes or unless the kernel forgets to call
|
||||
us with the same number of releases (closes) as opens */
|
||||
.delete_inode = cifs_delete_inode, */ /* Do not need above two
|
||||
functions unless later we add lazy close of inodes or unless the
|
||||
kernel forgets to call us with the same number of releases (closes)
|
||||
as opens */
|
||||
.show_options = cifs_show_options,
|
||||
.umount_begin = cifs_umount_begin,
|
||||
.remount_fs = cifs_remount,
|
||||
|
@ -696,11 +696,11 @@ const struct file_operations cifs_dir_ops = {
|
|||
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
||||
.dir_notify = cifs_dir_notify,
|
||||
#endif /* CONFIG_CIFS_EXPERIMENTAL */
|
||||
.ioctl = cifs_ioctl,
|
||||
.ioctl = cifs_ioctl,
|
||||
};
|
||||
|
||||
static void
|
||||
cifs_init_once(void *inode, struct kmem_cache * cachep, unsigned long flags)
|
||||
cifs_init_once(void *inode, struct kmem_cache *cachep, unsigned long flags)
|
||||
{
|
||||
struct cifsInodeInfo *cifsi = inode;
|
||||
|
||||
|
@ -752,7 +752,7 @@ cifs_init_request_bufs(void)
|
|||
cifs_min_rcv = 1;
|
||||
else if (cifs_min_rcv > 64) {
|
||||
cifs_min_rcv = 64;
|
||||
cERROR(1,("cifs_min_rcv set to maximum (64)"));
|
||||
cERROR(1, ("cifs_min_rcv set to maximum (64)"));
|
||||
}
|
||||
|
||||
cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
|
||||
|
@ -844,7 +844,7 @@ cifs_destroy_mids(void)
|
|||
kmem_cache_destroy(cifs_oplock_cachep);
|
||||
}
|
||||
|
||||
static int cifs_oplock_thread(void * dummyarg)
|
||||
static int cifs_oplock_thread(void *dummyarg)
|
||||
{
|
||||
struct oplock_q_entry *oplock_item;
|
||||
struct cifsTconInfo *pTcon;
|
||||
|
@ -865,7 +865,7 @@ static int cifs_oplock_thread(void * dummyarg)
|
|||
oplock_item = list_entry(GlobalOplock_Q.next,
|
||||
struct oplock_q_entry, qhead);
|
||||
if (oplock_item) {
|
||||
cFYI(1,("found oplock item to write out"));
|
||||
cFYI(1, ("found oplock item to write out"));
|
||||
pTcon = oplock_item->tcon;
|
||||
inode = oplock_item->pinode;
|
||||
netfid = oplock_item->netfid;
|
||||
|
@ -878,7 +878,8 @@ static int cifs_oplock_thread(void * dummyarg)
|
|||
/* mutex_lock(&inode->i_mutex);*/
|
||||
if (S_ISREG(inode->i_mode)) {
|
||||
rc = filemap_fdatawrite(inode->i_mapping);
|
||||
if (CIFS_I(inode)->clientCanCacheRead == 0) {
|
||||
if (CIFS_I(inode)->clientCanCacheRead
|
||||
== 0) {
|
||||
filemap_fdatawait(inode->i_mapping);
|
||||
invalidate_remote_inode(inode);
|
||||
}
|
||||
|
@ -913,7 +914,7 @@ static int cifs_oplock_thread(void * dummyarg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cifs_dnotify_thread(void * dummyarg)
|
||||
static int cifs_dnotify_thread(void *dummyarg)
|
||||
{
|
||||
struct list_head *tmp;
|
||||
struct cifsSesInfo *ses;
|
||||
|
|
|
@ -45,7 +45,7 @@ extern void cifs_read_inode(struct inode *);
|
|||
extern const struct inode_operations cifs_dir_inode_ops;
|
||||
extern int cifs_create(struct inode *, struct dentry *, int,
|
||||
struct nameidata *);
|
||||
extern struct dentry * cifs_lookup(struct inode *, struct dentry *,
|
||||
extern struct dentry *cifs_lookup(struct inode *, struct dentry *,
|
||||
struct nameidata *);
|
||||
extern int cifs_unlink(struct inode *, struct dentry *);
|
||||
extern int cifs_hardlink(struct dentry *, struct inode *, struct dentry *);
|
||||
|
@ -70,9 +70,9 @@ extern int cifs_open(struct inode *inode, struct file *file);
|
|||
extern int cifs_close(struct inode *inode, struct file *file);
|
||||
extern int cifs_closedir(struct inode *inode, struct file *file);
|
||||
extern ssize_t cifs_user_read(struct file *file, char __user *read_data,
|
||||
size_t read_size, loff_t * poffset);
|
||||
size_t read_size, loff_t *poffset);
|
||||
extern ssize_t cifs_user_write(struct file *file, const char __user *write_data,
|
||||
size_t write_size, loff_t * poffset);
|
||||
size_t write_size, loff_t *poffset);
|
||||
extern int cifs_lock(struct file *, int, struct file_lock *);
|
||||
extern int cifs_fsync(struct file *, struct dentry *, int);
|
||||
extern int cifs_flush(struct file *, fl_owner_t id);
|
||||
|
|
|
@ -366,17 +366,19 @@ struct smb_hdr {
|
|||
#define pByteArea(smb_var) ((unsigned char *)smb_var + sizeof(struct smb_hdr) + (2* smb_var->WordCount) + 2 )
|
||||
|
||||
/*
|
||||
* Computer Name Length
|
||||
* Computer Name Length (since Netbios name was length 16 with last byte 0x20)
|
||||
* No longer as important, now that TCP names are more commonly used to
|
||||
* resolve hosts.
|
||||
*/
|
||||
#define CNLEN 15
|
||||
|
||||
/*
|
||||
* Share Name Length @S8A
|
||||
* Note: This length is limited by the SMB used to get @S8A
|
||||
* the Share info. NetShareEnum only returns 13 @S8A
|
||||
* chars, including the null termination. @S8A
|
||||
* Share Name Length (SNLEN)
|
||||
* Note: This length was limited by the SMB used to get
|
||||
* the Share info. NetShareEnum only returned 13
|
||||
* chars, including the null termination.
|
||||
* This was removed because it no longer is limiting.
|
||||
*/
|
||||
#define SNLEN 12 /*@S8A */
|
||||
|
||||
/*
|
||||
* Comment Length
|
||||
|
@ -806,21 +808,22 @@ typedef struct smb_com_openx_rsp {
|
|||
|
||||
/* Legacy write request for older servers */
|
||||
typedef struct smb_com_writex_req {
|
||||
struct smb_hdr hdr; /* wct = 12 */
|
||||
__u8 AndXCommand;
|
||||
__u8 AndXReserved;
|
||||
__le16 AndXOffset;
|
||||
__u16 Fid;
|
||||
__le32 OffsetLow;
|
||||
__u32 Reserved; /* Timeout */
|
||||
__le16 WriteMode; /* 1 = write through */
|
||||
__le16 Remaining;
|
||||
__le16 Reserved2;
|
||||
__le16 DataLengthLow;
|
||||
__le16 DataOffset;
|
||||
__le16 ByteCount;
|
||||
__u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */
|
||||
char Data[0];
|
||||
struct smb_hdr hdr; /* wct = 12 */
|
||||
__u8 AndXCommand;
|
||||
__u8 AndXReserved;
|
||||
__le16 AndXOffset;
|
||||
__u16 Fid;
|
||||
__le32 OffsetLow;
|
||||
__u32 Reserved; /* Timeout */
|
||||
__le16 WriteMode; /* 1 = write through */
|
||||
__le16 Remaining;
|
||||
__le16 Reserved2;
|
||||
__le16 DataLengthLow;
|
||||
__le16 DataOffset;
|
||||
__le16 ByteCount;
|
||||
__u8 Pad; /* BB check for whether padded to DWORD
|
||||
boundary and optimum performance here */
|
||||
char Data[0];
|
||||
} __attribute__((packed)) WRITEX_REQ;
|
||||
|
||||
typedef struct smb_com_write_req {
|
||||
|
@ -838,7 +841,8 @@ typedef struct smb_com_write_req {
|
|||
__le16 DataOffset;
|
||||
__le32 OffsetHigh;
|
||||
__le16 ByteCount;
|
||||
__u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */
|
||||
__u8 Pad; /* BB check for whether padded to DWORD
|
||||
boundary and optimum performance here */
|
||||
char Data[0];
|
||||
} __attribute__((packed)) WRITE_REQ;
|
||||
|
||||
|
@ -856,17 +860,17 @@ typedef struct smb_com_write_rsp {
|
|||
|
||||
/* legacy read request for older servers */
|
||||
typedef struct smb_com_readx_req {
|
||||
struct smb_hdr hdr; /* wct = 10 */
|
||||
__u8 AndXCommand;
|
||||
__u8 AndXReserved;
|
||||
__le16 AndXOffset;
|
||||
__u16 Fid;
|
||||
__le32 OffsetLow;
|
||||
__le16 MaxCount;
|
||||
__le16 MinCount; /* obsolete */
|
||||
__le32 Reserved;
|
||||
__le16 Remaining;
|
||||
__le16 ByteCount;
|
||||
struct smb_hdr hdr; /* wct = 10 */
|
||||
__u8 AndXCommand;
|
||||
__u8 AndXReserved;
|
||||
__le16 AndXOffset;
|
||||
__u16 Fid;
|
||||
__le32 OffsetLow;
|
||||
__le16 MaxCount;
|
||||
__le16 MinCount; /* obsolete */
|
||||
__le32 Reserved;
|
||||
__le16 Remaining;
|
||||
__le16 ByteCount;
|
||||
} __attribute__((packed)) READX_REQ;
|
||||
|
||||
typedef struct smb_com_read_req {
|
||||
|
@ -897,7 +901,8 @@ typedef struct smb_com_read_rsp {
|
|||
__le16 DataLengthHigh;
|
||||
__u64 Reserved2;
|
||||
__u16 ByteCount;
|
||||
__u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */
|
||||
__u8 Pad; /* BB check for whether padded to DWORD
|
||||
boundary and optimum performance here */
|
||||
char Data[1];
|
||||
} __attribute__((packed)) READ_RSP;
|
||||
|
||||
|
@ -1088,24 +1093,24 @@ typedef struct smb_com_setattr_rsp {
|
|||
/* 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 */
|
||||
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];
|
||||
__le16 ByteCount;
|
||||
__u8 Pad[3];
|
||||
__u8 Parms[0];
|
||||
} __attribute__((packed)) NTRANSACT_REQ;
|
||||
|
||||
typedef struct smb_com_ntransact_rsp {
|
||||
|
@ -1121,7 +1126,7 @@ typedef struct smb_com_ntransact_rsp {
|
|||
__le32 DataDisplacement;
|
||||
__u8 SetupCount; /* 0 */
|
||||
__u16 ByteCount;
|
||||
/* __u8 Pad[3]; */
|
||||
/* __u8 Pad[3]; */
|
||||
/* parms and data follow */
|
||||
} __attribute__((packed)) NTRANSACT_RSP;
|
||||
|
||||
|
@ -1519,19 +1524,19 @@ struct smb_com_transaction2_sfi_rsp {
|
|||
} __attribute__((packed));
|
||||
|
||||
struct smb_t2_qfi_req {
|
||||
struct smb_hdr hdr;
|
||||
struct trans2_req t2;
|
||||
struct smb_hdr hdr;
|
||||
struct trans2_req t2;
|
||||
__u8 Pad;
|
||||
__u16 Fid;
|
||||
__le16 InformationLevel;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct smb_t2_qfi_rsp {
|
||||
struct smb_hdr hdr; /* wct = 10 + SetupCount */
|
||||
struct trans2_resp t2;
|
||||
__u16 ByteCount;
|
||||
__u16 Reserved2; /* parameter word reserved -
|
||||
present for infolevels > 100 */
|
||||
struct smb_hdr hdr; /* wct = 10 + SetupCount */
|
||||
struct trans2_resp t2;
|
||||
__u16 ByteCount;
|
||||
__u16 Reserved2; /* parameter word reserved -
|
||||
present for infolevels > 100 */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
|
@ -1744,7 +1749,9 @@ typedef struct smb_com_transaction2_get_dfs_refer_req {
|
|||
__u8 Reserved3;
|
||||
__le16 SubCommand; /* one setup word */
|
||||
__le16 ByteCount;
|
||||
__u8 Pad[3]; /* Win2K has sent 0x0F01 (max resp length perhaps?) followed by one byte pad - doesn't seem to matter though */
|
||||
__u8 Pad[3]; /* Win2K has sent 0x0F01 (max response length
|
||||
perhaps?) followed by one byte pad - doesn't
|
||||
seem to matter though */
|
||||
__le16 MaxReferralLevel;
|
||||
char RequestFileName[1];
|
||||
} __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ;
|
||||
|
@ -1753,7 +1760,10 @@ typedef struct dfs_referral_level_3 {
|
|||
__le16 VersionNumber;
|
||||
__le16 ReferralSize;
|
||||
__le16 ServerType; /* 0x0001 = CIFS server */
|
||||
__le16 ReferralFlags; /* or proximity - not clear which since always set to zero - SNIA spec says 0x01 means strip off PathConsumed chars before submitting RequestFileName to remote node */
|
||||
__le16 ReferralFlags; /* or proximity - not clear which since it is
|
||||
always set to zero - SNIA spec says 0x01
|
||||
means strip off PathConsumed chars before
|
||||
submitting RequestFileName to remote node */
|
||||
__le16 TimeToLive;
|
||||
__le16 Proximity;
|
||||
__le16 DfsPathOffset;
|
||||
|
@ -1779,11 +1789,13 @@ typedef struct smb_com_transaction_get_dfs_refer_rsp {
|
|||
#define DFSREF_STORAGE_SERVER 0x0002
|
||||
|
||||
/* IOCTL information */
|
||||
/* List of ioctl function codes that look to be of interest to remote clients like this. */
|
||||
/* Need to do some experimentation to make sure they all work remotely. */
|
||||
/* Some of the following such as the encryption/compression ones would be */
|
||||
/* invoked from tools via a specialized hook into the VFS rather than via the */
|
||||
/* standard vfs entry points */
|
||||
/*
|
||||
* List of ioctl function codes that look to be of interest to remote clients
|
||||
* like this one. Need to do some experimentation to make sure they all work
|
||||
* remotely. Some of the following, such as the encryption/compression ones
|
||||
* would be invoked from tools via a specialized hook into the VFS rather
|
||||
* than via the standard vfs entry points
|
||||
*/
|
||||
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 0x00090000
|
||||
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 0x00090004
|
||||
#define FSCTL_REQUEST_BATCH_OPLOCK 0x00090008
|
||||
|
@ -1858,7 +1870,7 @@ typedef struct {
|
|||
__le64 FreeAllocationUnits;
|
||||
__le32 SectorsPerAllocationUnit;
|
||||
__le32 BytesPerSector;
|
||||
} __attribute__((packed)) FILE_SYSTEM_INFO; /* size info, level 0x103 */
|
||||
} __attribute__((packed)) FILE_SYSTEM_INFO; /* size info, level 0x103 */
|
||||
|
||||
typedef struct {
|
||||
__le32 fsid;
|
||||
|
@ -1872,7 +1884,7 @@ typedef struct {
|
|||
__le16 MajorVersionNumber;
|
||||
__le16 MinorVersionNumber;
|
||||
__le64 Capability;
|
||||
} __attribute__((packed)) FILE_SYSTEM_UNIX_INFO; /* Unix extensions info, level 0x200 */
|
||||
} __attribute__((packed)) FILE_SYSTEM_UNIX_INFO; /* Unix extension level 0x200*/
|
||||
|
||||
/* Version numbers for CIFS UNIX major and minor. */
|
||||
#define CIFS_UNIX_MAJOR_VERSION 1
|
||||
|
@ -2296,7 +2308,7 @@ struct fealist {
|
|||
struct data_blob {
|
||||
__u8 *data;
|
||||
size_t length;
|
||||
void (*free) (struct data_blob * data_blob);
|
||||
void (*free) (struct data_blob *data_blob);
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
|
@ -2362,19 +2374,19 @@ struct data_blob {
|
|||
T2 SET_PATH_INFO (SMB_SET_FILE_UNIX_LINK) for symlinks
|
||||
T2 SET_PATH_INFO (SMB_SET_FILE_BASIC_INFO2)
|
||||
T2 QUERY_PATH_INFO (SMB_QUERY_FILE_UNIX_LINK)
|
||||
T2 QUERY_PATH_INFO (SMB_QUERY_FILE_UNIX_BASIC) - BB check for missing inode fields
|
||||
Actually need QUERY_FILE_UNIX_INFO since has inode num
|
||||
BB what about a) blksize/blkbits/blocks
|
||||
T2 QUERY_PATH_INFO (SMB_QUERY_FILE_UNIX_BASIC) BB check for missing
|
||||
inode fields
|
||||
Actually a need QUERY_FILE_UNIX_INFO
|
||||
since has inode num
|
||||
BB what about a) blksize/blkbits/blocks
|
||||
b) i_version
|
||||
c) i_rdev
|
||||
d) notify mask?
|
||||
e) generation
|
||||
f) size_seqcount
|
||||
T2 FIND_FIRST/FIND_NEXT FIND_FILE_UNIX
|
||||
TRANS2_GET_DFS_REFERRAL - OPTIONAL but recommended
|
||||
TRANS2_GET_DFS_REFERRAL - OPTIONAL but recommended
|
||||
T2_QFS_INFO QueryDevice/AttributeInfo - OPTIONAL
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/* xsymlink is a symlink format (used by MacOS) that can be used
|
||||
|
@ -2410,7 +2422,8 @@ typedef struct file_xattr_info {
|
|||
__u32 xattr_value_len;
|
||||
char xattr_name[0];
|
||||
/* followed by xattr_value[xattr_value_len], no pad */
|
||||
} __attribute__((packed)) FILE_XATTR_INFO; /* extended attribute, info level 0x205 */
|
||||
} __attribute__((packed)) FILE_XATTR_INFO; /* extended attribute info
|
||||
level 0x205 */
|
||||
|
||||
|
||||
/* flags for chattr command */
|
||||
|
@ -2436,7 +2449,8 @@ typedef struct file_xattr_info {
|
|||
typedef struct file_chattr_info {
|
||||
__le64 mask; /* list of all possible attribute bits */
|
||||
__le64 mode; /* list of actual attribute bits on this inode */
|
||||
} __attribute__((packed)) FILE_CHATTR_INFO; /* ext attributes (chattr, chflags) level 0x206 */
|
||||
} __attribute__((packed)) FILE_CHATTR_INFO; /* ext attributes
|
||||
(chattr, chflags) level 0x206 */
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -71,12 +71,12 @@ extern void header_assemble(struct smb_hdr *, char /* command */ ,
|
|||
fixed section (word count) in two byte units */);
|
||||
extern int small_smb_init_no_tc(const int smb_cmd, const int wct,
|
||||
struct cifsSesInfo *ses,
|
||||
void ** request_buf);
|
||||
void **request_buf);
|
||||
extern int CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses,
|
||||
const int stage,
|
||||
const struct nls_table *nls_cp);
|
||||
extern __u16 GetNextMid(struct TCP_Server_Info *server);
|
||||
extern struct oplock_q_entry * AllocOplockQEntry(struct inode *, u16,
|
||||
extern struct oplock_q_entry *AllocOplockQEntry(struct inode *, u16,
|
||||
struct cifsTconInfo *);
|
||||
extern void DeleteOplockQEntry(struct oplock_q_entry *);
|
||||
extern struct timespec cifs_NTtimeToUnix(u64 /* utc nanoseconds since 1601 */ );
|
||||
|
@ -146,7 +146,7 @@ extern int get_dfs_path(int xid, struct cifsSesInfo *pSesInfo,
|
|||
const char *old_path,
|
||||
const struct nls_table *nls_codepage,
|
||||
unsigned int *pnum_referrals,
|
||||
unsigned char ** preferrals,
|
||||
unsigned char **preferrals,
|
||||
int remap);
|
||||
extern void reset_cifs_unix_caps(int xid, struct cifsTconInfo *tcon,
|
||||
struct super_block *sb, struct smb_vol *vol);
|
||||
|
@ -323,7 +323,7 @@ extern ssize_t CIFSSMBQAllEAs(const int xid, struct cifsTconInfo *tcon,
|
|||
size_t bufsize, const struct nls_table *nls_codepage,
|
||||
int remap_special_chars);
|
||||
extern ssize_t CIFSSMBQueryEA(const int xid, struct cifsTconInfo *tcon,
|
||||
const unsigned char * searchName, const unsigned char *ea_name,
|
||||
const unsigned char *searchName, const unsigned char *ea_name,
|
||||
unsigned char *ea_value, size_t buf_size,
|
||||
const struct nls_table *nls_codepage, int remap_special_chars);
|
||||
extern int CIFSSMBSetEA(const int xid, struct cifsTconInfo *tcon,
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1035,7 +1035,8 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode)
|
|||
/* if it fails, try another handle - might be */
|
||||
/* dangerous to hold up writepages with retry */
|
||||
if (rc) {
|
||||
cFYI(1, ("failed on reopen file in wp"));
|
||||
cFYI(1,
|
||||
("failed on reopen file in wp"));
|
||||
read_lock(&GlobalSMBSeslock);
|
||||
/* can not use this handle, no write
|
||||
pending on this one after all */
|
||||
|
|
|
@ -285,7 +285,6 @@ static int decode_sfu_inode(struct inode *inode, __u64 size,
|
|||
CIFSSMBClose(xid, pTcon, netfid);
|
||||
}
|
||||
return rc;
|
||||
|
||||
}
|
||||
|
||||
#define SFBITS_MASK (S_ISVTX | S_ISGID | S_ISUID) /* SETFILEBITS valid bits */
|
||||
|
@ -317,8 +316,6 @@ static int get_sfu_uid_mode(struct inode *inode,
|
|||
#else
|
||||
return -EOPNOTSUPP;
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
int cifs_get_inode_info(struct inode **pinode,
|
||||
|
@ -364,7 +361,6 @@ int cifs_get_inode_info(struct inode **pinode,
|
|||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
adjustTZ = TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
/* dump_mem("\nQPathInfo return data",&findData, sizeof(findData)); */
|
||||
if (rc) {
|
||||
|
|
|
@ -274,7 +274,6 @@ cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
|
|||
else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
|
||||
cERROR(1, ("SFU style symlinks not implemented yet"));
|
||||
/* add open and read as in fs/cifs/inode.c */
|
||||
|
||||
} else {
|
||||
rc = CIFSSMBOpen(xid, pTcon, full_path, FILE_OPEN, GENERIC_READ,
|
||||
OPEN_REPARSE_POINT, &fid, &oplock, NULL,
|
||||
|
@ -315,7 +314,9 @@ cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
|
|||
num_referrals));
|
||||
if (referrals) {
|
||||
cFYI(1,("referral string: %s", referrals));
|
||||
strncpy(tmpbuffer, referrals, len-1);
|
||||
strncpy(tmpbuffer,
|
||||
referrals,
|
||||
len-1);
|
||||
}
|
||||
}
|
||||
kfree(referrals);
|
||||
|
|
|
@ -47,8 +47,10 @@ _GetXid(void)
|
|||
|
||||
spin_lock(&GlobalMid_Lock);
|
||||
GlobalTotalActiveXid++;
|
||||
|
||||
/* keep high water mark for number of simultaneous ops in filesystem */
|
||||
if (GlobalTotalActiveXid > GlobalMaxActiveXid)
|
||||
GlobalMaxActiveXid = GlobalTotalActiveXid; /* keep high water mark for number of simultaneous vfs ops in our filesystem */
|
||||
GlobalMaxActiveXid = GlobalTotalActiveXid;
|
||||
if (GlobalTotalActiveXid > 65000)
|
||||
cFYI(1, ("warning: more than 65000 requests active"));
|
||||
xid = GlobalCurrentXid++;
|
||||
|
@ -148,8 +150,8 @@ cifs_buf_get(void)
|
|||
but it may be more efficient to always alloc same size
|
||||
albeit slightly larger than necessary and maxbuffersize
|
||||
defaults to this and can not be bigger */
|
||||
ret_buf =
|
||||
(struct smb_hdr *) mempool_alloc(cifs_req_poolp, GFP_KERNEL | GFP_NOFS);
|
||||
ret_buf = (struct smb_hdr *) mempool_alloc(cifs_req_poolp,
|
||||
GFP_KERNEL | GFP_NOFS);
|
||||
|
||||
/* clear the first few header bytes */
|
||||
/* for most paths, more is cleared in header_assemble */
|
||||
|
@ -187,8 +189,8 @@ cifs_small_buf_get(void)
|
|||
but it may be more efficient to always alloc same size
|
||||
albeit slightly larger than necessary and maxbuffersize
|
||||
defaults to this and can not be bigger */
|
||||
ret_buf =
|
||||
(struct smb_hdr *) mempool_alloc(cifs_sm_req_poolp, GFP_KERNEL | GFP_NOFS);
|
||||
ret_buf = (struct smb_hdr *) mempool_alloc(cifs_sm_req_poolp,
|
||||
GFP_KERNEL | GFP_NOFS);
|
||||
if (ret_buf) {
|
||||
/* No need to clear memory here, cleared in header assemble */
|
||||
/* memset(ret_buf, 0, sizeof(struct smb_hdr) + 27);*/
|
||||
|
|
|
@ -51,7 +51,6 @@ static void dump_cifs_file_struct(struct file *file, char *label)
|
|||
if (cf->srch_inf.emptyDir) {
|
||||
cFYI(1, ("empty dir"));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endif /* DEBUG2 */
|
||||
|
@ -255,7 +254,6 @@ static void fill_in_inode(struct inode *tmp_inode, int new_buf_type,
|
|||
tmp_inode->i_fop = &cifs_file_direct_nobrl_ops;
|
||||
else
|
||||
tmp_inode->i_fop = &cifs_file_direct_ops;
|
||||
|
||||
} else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
|
||||
tmp_inode->i_fop = &cifs_file_nobrl_ops;
|
||||
else
|
||||
|
@ -712,7 +710,7 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon,
|
|||
pos_in_buf = index_to_find - first_entry_in_buffer;
|
||||
cFYI(1, ("found entry - pos_in_buf %d", pos_in_buf));
|
||||
|
||||
for (i=0;(i<(pos_in_buf)) && (current_entry != NULL);i++) {
|
||||
for (i=0; (i < (pos_in_buf)) && (current_entry != NULL); i++) {
|
||||
/* go entry by entry figuring out which is first */
|
||||
current_entry = nxt_dir_entry(current_entry, end_of_smb,
|
||||
cifsFile->srch_inf.info_level);
|
||||
|
@ -982,7 +980,7 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir)
|
|||
char *current_entry;
|
||||
int num_to_fill = 0;
|
||||
char *tmp_buf = NULL;
|
||||
char * end_of_smb;
|
||||
char *end_of_smb;
|
||||
int max_len;
|
||||
|
||||
xid = GetXid();
|
||||
|
|
|
@ -178,8 +178,8 @@ ntv2_owf_gen(const unsigned char owf[16], const char *user_n,
|
|||
const char *domain_n, unsigned char kr_buf[16],
|
||||
const struct nls_table *nls_codepage)
|
||||
{
|
||||
wchar_t * user_u;
|
||||
wchar_t * dom_u;
|
||||
wchar_t *user_u;
|
||||
wchar_t *dom_u;
|
||||
int user_l, domain_l;
|
||||
struct HMACMD5Context ctx;
|
||||
|
||||
|
|
Loading…
Reference in a new issue