You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07: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:
+31
-26
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
/*
|
||||
* The ASB.1/BER parsing code is derived from ip_nat_snmp_basic.c which was in
|
||||
* turn derived from the gxsnmp package by Gregory McLean & Jochen Friedrich
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2000 RP Internet (www.rpi.net.au).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -80,7 +80,7 @@
|
||||
static unsigned long SPNEGO_OID[7] = { 1, 3, 6, 1, 5, 5, 2 };
|
||||
static unsigned long NTLMSSP_OID[10] = { 1, 3, 6, 1, 4, 1, 311, 2, 2, 10 };
|
||||
|
||||
/*
|
||||
/*
|
||||
* ASN.1 context.
|
||||
*/
|
||||
struct asn1_ctx {
|
||||
@@ -190,7 +190,7 @@ asn1_header_decode(struct asn1_ctx *ctx,
|
||||
unsigned char **eoc,
|
||||
unsigned int *cls, unsigned int *con, unsigned int *tag)
|
||||
{
|
||||
unsigned int def = 0;
|
||||
unsigned int def = 0;
|
||||
unsigned int len = 0;
|
||||
|
||||
if (!asn1_id_decode(ctx, cls, con, tag))
|
||||
@@ -331,7 +331,7 @@ static unsigned char asn1_ulong_decode(struct asn1_ctx *ctx,
|
||||
*integer |= ch;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned char
|
||||
asn1_octets_decode(struct asn1_ctx *ctx,
|
||||
@@ -376,7 +376,7 @@ asn1_subid_decode(struct asn1_ctx *ctx, unsigned long *subid)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
asn1_oid_decode(struct asn1_ctx *ctx,
|
||||
unsigned char *eoc, unsigned long **oid, unsigned int *len)
|
||||
{
|
||||
@@ -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,20 +598,21 @@ 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)
|
||||
*secType = Kerberos
|
||||
/* if (use_kerberos)
|
||||
*secType = Kerberos
|
||||
else */
|
||||
if (use_ntlmssp) {
|
||||
*secType = NTLMSSP;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
+14
-14
@@ -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;
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
||||
* the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* uniupr.h - Unicode compressed case ranges
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
+64
-58
@@ -39,7 +39,7 @@ extern void mdfour(unsigned char *out, unsigned char *in, int n);
|
||||
extern void E_md4hash(const unsigned char *passwd, unsigned char *p16);
|
||||
extern void SMBencrypt(unsigned char *passwd, unsigned char *c8,
|
||||
unsigned char *p24);
|
||||
|
||||
|
||||
static int cifs_calculate_signature(const struct smb_hdr *cifs_pdu,
|
||||
const struct mac_key *key, char *signature)
|
||||
{
|
||||
@@ -69,10 +69,10 @@ int cifs_sign_smb(struct smb_hdr *cifs_pdu, struct TCP_Server_Info *server,
|
||||
return rc;
|
||||
|
||||
spin_lock(&GlobalMid_Lock);
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber =
|
||||
cpu_to_le32(server->sequence_number);
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber =
|
||||
cpu_to_le32(server->sequence_number);
|
||||
cifs_pdu->Signature.Sequence.Reserved = 0;
|
||||
|
||||
|
||||
*pexpected_response_sequence_number = server->sequence_number++;
|
||||
server->sequence_number++;
|
||||
spin_unlock(&GlobalMid_Lock);
|
||||
@@ -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,30 +220,30 @@ 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)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
ucase_buf = kmalloc((MAX_USERNAME_SIZE+1), GFP_KERNEL);
|
||||
if (ucase_buf == NULL)
|
||||
return -ENOMEM;
|
||||
@@ -250,18 +252,20 @@ int CalcNTLMv2_partial_mac_key(struct cifsSesInfo * ses,
|
||||
kfree(ucase_buf);
|
||||
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]);
|
||||
}
|
||||
|
||||
@@ -313,19 +318,19 @@ 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)
|
||||
static int calc_ntlmv2_hash(struct cifsSesInfo *ses,
|
||||
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
|
||||
@@ -357,24 +362,24 @@ static int calc_ntlmv2_hash(struct cifsSesInfo *ses,
|
||||
/* UniStrupr(domain); */
|
||||
|
||||
hmac_md5_update((char *)domain, 2*len, pctxt);
|
||||
|
||||
|
||||
kfree(domain);
|
||||
}
|
||||
calc_exit_1:
|
||||
kfree(user);
|
||||
calc_exit_2:
|
||||
/* BB FIXME what about bytes 24 through 40 of the signing key?
|
||||
/* BB FIXME what about bytes 24 through 40 of the signing key?
|
||||
compare with the NTLM example */
|
||||
hmac_md5_final(ses->server->ntlmv2_hash, pctxt);
|
||||
|
||||
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); */
|
||||
}
|
||||
|
||||
+46
-45
@@ -95,7 +95,7 @@ cifs_read_super(struct super_block *sb, void *data,
|
||||
struct inode *inode;
|
||||
struct cifs_sb_info *cifs_sb;
|
||||
int rc = 0;
|
||||
|
||||
|
||||
/* BB should we make this contingent on mount parm? */
|
||||
sb->s_flags |= MS_NODIRATIME | MS_NOATIME;
|
||||
sb->s_fs_info = kzalloc(sizeof(struct cifs_sb_info), GFP_KERNEL);
|
||||
@@ -135,7 +135,7 @@ cifs_read_super(struct super_block *sb, void *data,
|
||||
rc = -ENOMEM;
|
||||
goto out_no_root;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
|
||||
cFYI(1, ("export ops supported"));
|
||||
@@ -153,7 +153,7 @@ out_no_root:
|
||||
out_mount_failed:
|
||||
if (cifs_sb) {
|
||||
if (cifs_sb->local_nls)
|
||||
unload_nls(cifs_sb->local_nls);
|
||||
unload_nls(cifs_sb->local_nls);
|
||||
kfree(cifs_sb);
|
||||
}
|
||||
return rc;
|
||||
@@ -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;
|
||||
|
||||
@@ -238,10 +238,10 @@ static int cifs_permission(struct inode * inode, int mask, struct nameidata *nd)
|
||||
|
||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
|
||||
return 0;
|
||||
} else /* file mode might have been restricted at mount time
|
||||
on the client (above and beyond ACL on servers) for
|
||||
} else /* file mode might have been restricted at mount time
|
||||
on the client (above and beyond ACL on servers) for
|
||||
servers which do not support setting and viewing mode bits,
|
||||
so allowing client to check permissions is useful */
|
||||
so allowing client to check permissions is useful */
|
||||
return generic_permission(inode, mask, NULL);
|
||||
}
|
||||
|
||||
@@ -270,7 +270,7 @@ cifs_alloc_inode(struct super_block *sb)
|
||||
cifs_inode->clientCanCacheRead = FALSE;
|
||||
cifs_inode->clientCanCacheAll = FALSE;
|
||||
cifs_inode->vfs_inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */
|
||||
|
||||
|
||||
/* Can not set i_flags here - they get immediately overwritten
|
||||
to zero by the VFS */
|
||||
/* cifs_inode->vfs_inode.i_flags = S_NOATIME | S_NOCMTIME;*/
|
||||
@@ -317,21 +317,21 @@ 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;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
struct cifsTconInfo *pTcon;
|
||||
|
||||
|
||||
if (cifs_sb)
|
||||
pTcon = cifs_sb->tcon;
|
||||
else
|
||||
@@ -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,9 +373,9 @@ 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 xid;
|
||||
int rc = 0;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
struct cifsTconInfo *pTcon;
|
||||
@@ -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 */
|
||||
@@ -483,10 +482,11 @@ static const struct super_operations cifs_super_ops = {
|
||||
.statfs = cifs_statfs,
|
||||
.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 */
|
||||
/* .drop_inode = generic_delete_inode,
|
||||
.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,
|
||||
@@ -589,11 +589,11 @@ const struct inode_operations cifs_file_inode_ops = {
|
||||
.getxattr = cifs_getxattr,
|
||||
.listxattr = cifs_listxattr,
|
||||
.removexattr = cifs_removexattr,
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
const struct inode_operations cifs_symlink_inode_ops = {
|
||||
.readlink = generic_readlink,
|
||||
.readlink = generic_readlink,
|
||||
.follow_link = cifs_follow_link,
|
||||
.put_link = cifs_put_link,
|
||||
.permission = cifs_permission,
|
||||
@@ -605,7 +605,7 @@ const struct inode_operations cifs_symlink_inode_ops = {
|
||||
.getxattr = cifs_getxattr,
|
||||
.listxattr = cifs_listxattr,
|
||||
.removexattr = cifs_removexattr,
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
const struct file_operations cifs_file_ops = {
|
||||
@@ -631,7 +631,7 @@ const struct file_operations cifs_file_ops = {
|
||||
};
|
||||
|
||||
const struct file_operations cifs_file_direct_ops = {
|
||||
/* no mmap, no aio, no readv -
|
||||
/* no mmap, no aio, no readv -
|
||||
BB reevaluate whether they can be done with directio, no cache */
|
||||
.read = cifs_user_read,
|
||||
.write = cifs_user_write,
|
||||
@@ -671,7 +671,7 @@ const struct file_operations cifs_file_nobrl_ops = {
|
||||
};
|
||||
|
||||
const struct file_operations cifs_file_direct_nobrl_ops = {
|
||||
/* no mmap, no aio, no readv -
|
||||
/* no mmap, no aio, no readv -
|
||||
BB reevaluate whether they can be done with directio, no cache */
|
||||
.read = cifs_user_read,
|
||||
.write = cifs_user_write,
|
||||
@@ -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,
|
||||
@@ -765,7 +765,7 @@ cifs_init_request_bufs(void)
|
||||
/* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
|
||||
almost all handle based requests (but not write response, nor is it
|
||||
sufficient for path based requests). A smaller size would have
|
||||
been more efficient (compacting multiple slab items on one 4k page)
|
||||
been more efficient (compacting multiple slab items on one 4k page)
|
||||
for the case in which debug was on, but this larger size allows
|
||||
more SMBs to use small buffer alloc and is still much more
|
||||
efficient to alloc 1 per page off the slab compared to 17K (5page)
|
||||
@@ -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;
|
||||
@@ -855,7 +855,7 @@ static int cifs_oplock_thread(void * dummyarg)
|
||||
do {
|
||||
if (try_to_freeze())
|
||||
continue;
|
||||
|
||||
|
||||
spin_lock(&GlobalMid_Lock);
|
||||
if (list_empty(&GlobalOplock_Q)) {
|
||||
spin_unlock(&GlobalMid_Lock);
|
||||
@@ -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;
|
||||
|
||||
+3
-3
@@ -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);
|
||||
|
||||
+149
-135
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -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);
|
||||
@@ -312,9 +312,9 @@ extern int CIFSSMBCopy(int xid,
|
||||
const char *fromName,
|
||||
const __u16 target_tid,
|
||||
const char *toName, const int flags,
|
||||
const struct nls_table *nls_codepage,
|
||||
const struct nls_table *nls_codepage,
|
||||
int remap_special_chars);
|
||||
extern int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon,
|
||||
extern int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon,
|
||||
const int notify_subdirs, const __u16 netfid,
|
||||
__u32 filter, struct file *file, int multishot,
|
||||
const struct nls_table *nls_codepage);
|
||||
@@ -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,
|
||||
|
||||
+477
-446
File diff suppressed because it is too large
Load Diff
+413
-342
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -22,7 +22,7 @@
|
||||
* along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* See Documentation/filesystems/Exporting
|
||||
* and examples in fs/exportfs
|
||||
@@ -43,16 +43,16 @@
|
||||
#include "cifsglob.h"
|
||||
#include "cifs_debug.h"
|
||||
|
||||
|
||||
|
||||
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
||||
|
||||
|
||||
static struct dentry *cifs_get_parent(struct dentry *dentry)
|
||||
{
|
||||
/* BB need to add code here eventually to enable export via NFSD */
|
||||
cFYI(1, ("get parent for %p", dentry));
|
||||
return ERR_PTR(-EACCES);
|
||||
}
|
||||
|
||||
|
||||
struct export_operations cifs_export_ops = {
|
||||
.get_parent = cifs_get_parent,
|
||||
/* Following five export operations are unneeded so far and can default:
|
||||
@@ -62,6 +62,6 @@ struct export_operations cifs_export_ops = {
|
||||
.decode_fh =
|
||||
.encode_fs = */
|
||||
};
|
||||
|
||||
|
||||
#endif /* EXPERIMENTAL */
|
||||
|
||||
|
||||
|
||||
+11
-10
@@ -189,7 +189,7 @@ int cifs_open(struct inode *inode, struct file *file)
|
||||
|
||||
/* needed for writepage */
|
||||
pCifsFile->pfile = file;
|
||||
|
||||
|
||||
file->private_data = pCifsFile;
|
||||
break;
|
||||
}
|
||||
@@ -378,7 +378,7 @@ static int cifs_reopen_file(struct file *file, int can_flush)
|
||||
rc = -EBADF;
|
||||
goto reopen_error_exit;
|
||||
}
|
||||
|
||||
|
||||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
@@ -735,7 +735,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
||||
posix_lock_type = CIFS_RDLCK;
|
||||
else
|
||||
posix_lock_type = CIFS_WRLCK;
|
||||
|
||||
|
||||
if (numUnlock == 1)
|
||||
posix_lock_type = CIFS_UNLCK;
|
||||
|
||||
@@ -810,7 +810,7 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data,
|
||||
if (file->private_data == NULL)
|
||||
return -EBADF;
|
||||
open_file = (struct cifsFileInfo *) file->private_data;
|
||||
|
||||
|
||||
xid = GetXid();
|
||||
|
||||
if (*poffset > file->f_path.dentry->d_inode->i_size)
|
||||
@@ -909,7 +909,7 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
|
||||
if (file->private_data == NULL)
|
||||
return -EBADF;
|
||||
open_file = (struct cifsFileInfo *)file->private_data;
|
||||
|
||||
|
||||
xid = GetXid();
|
||||
|
||||
if (*poffset > file->f_path.dentry->d_inode->i_size)
|
||||
@@ -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 */
|
||||
@@ -1136,7 +1137,7 @@ static int cifs_writepages(struct address_space *mapping,
|
||||
int xid;
|
||||
|
||||
cifs_sb = CIFS_SB(mapping->host->i_sb);
|
||||
|
||||
|
||||
/*
|
||||
* If wsize is smaller that the page cache size, default to writing
|
||||
* one page at a time via cifs_writepage
|
||||
@@ -1419,7 +1420,7 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync)
|
||||
|
||||
cFYI(1, ("Sync file - name: %s datasync: 0x%x",
|
||||
dentry->d_name.name, datasync));
|
||||
|
||||
|
||||
rc = filemap_fdatawrite(inode->i_mapping);
|
||||
if (rc == 0)
|
||||
CIFS_I(inode)->write_behind_rc = 0;
|
||||
@@ -1476,7 +1477,7 @@ int cifs_flush(struct file *file, fl_owner_t id)
|
||||
rc = filemap_fdatawrite(inode->i_mapping);
|
||||
if (!rc) /* reset wb rc if we were able to write out dirty pages */
|
||||
CIFS_I(inode)->write_behind_rc = 0;
|
||||
|
||||
|
||||
cFYI(1, ("Flush inode %p file %p rc %d", inode, file, rc));
|
||||
|
||||
return rc;
|
||||
@@ -1914,7 +1915,7 @@ int is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
|
||||
|
||||
if (cifsInode)
|
||||
open_file = find_writable_file(cifsInode);
|
||||
|
||||
|
||||
if (open_file) {
|
||||
struct cifs_sb_info *cifs_sb;
|
||||
|
||||
|
||||
+12
-16
@@ -92,7 +92,7 @@ int cifs_get_inode_info_unix(struct inode **pinode,
|
||||
} /* note ino incremented to unique num in new_inode */
|
||||
if (sb->s_flags & MS_NOATIME)
|
||||
(*pinode)->i_flags |= S_NOATIME | S_NOCMTIME;
|
||||
|
||||
|
||||
insert_inode_hash(*pinode);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ int cifs_get_inode_info_unix(struct inode **pinode,
|
||||
inode->i_mode |= S_IFREG;
|
||||
cFYI(1, ("unknown type %d", type));
|
||||
}
|
||||
|
||||
|
||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
|
||||
inode->i_uid = cifs_sb->mnt_uid;
|
||||
else
|
||||
@@ -149,7 +149,7 @@ int cifs_get_inode_info_unix(struct inode **pinode,
|
||||
inode->i_gid = cifs_sb->mnt_gid;
|
||||
else
|
||||
inode->i_gid = le64_to_cpu(findData.Gid);
|
||||
|
||||
|
||||
inode->i_nlink = le64_to_cpu(findData.Nlinks);
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
@@ -235,7 +235,7 @@ static int decode_sfu_inode(struct inode *inode, __u64 size,
|
||||
} else if (size < 8) {
|
||||
return -EINVAL; /* EOPNOTSUPP? */
|
||||
}
|
||||
|
||||
|
||||
rc = CIFSSMBOpen(xid, pTcon, path, FILE_OPEN, GENERIC_READ,
|
||||
CREATE_NOT_DIR, &netfid, &oplock, NULL,
|
||||
cifs_sb->local_nls,
|
||||
@@ -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) {
|
||||
@@ -513,7 +509,7 @@ int cifs_get_inode_info(struct inode **pinode,
|
||||
/* BB add code here -
|
||||
validate if device or weird share or device type? */
|
||||
}
|
||||
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
if (is_size_safe_to_change(cifsInfo, le64_to_cpu(pfindData->EndOfFile))) {
|
||||
/* can not safely shrink the file size here if the
|
||||
@@ -836,7 +832,7 @@ static void posix_fill_in_inode(struct inode *tmp_inode,
|
||||
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
|
||||
@@ -898,7 +894,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
||||
if ((pTcon->ses->capabilities & CAP_UNIX) &&
|
||||
(CIFS_UNIX_POSIX_PATH_OPS_CAP &
|
||||
le64_to_cpu(pTcon->fsUnixInfo.Capability))) {
|
||||
@@ -909,7 +905,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
|
||||
rc = -ENOMEM;
|
||||
goto mkdir_out;
|
||||
}
|
||||
|
||||
|
||||
rc = CIFSPOSIXCreate(xid, pTcon, SMB_O_DIRECTORY | SMB_O_CREAT,
|
||||
mode, NULL /* netfid */, pInfo, &oplock,
|
||||
full_path, cifs_sb->local_nls,
|
||||
@@ -963,7 +959,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
|
||||
kfree(pInfo);
|
||||
goto mkdir_out;
|
||||
}
|
||||
|
||||
|
||||
/* BB add setting the equivalent of mode via CreateX w/ACLs */
|
||||
rc = CIFSSMBMkDir(xid, pTcon, full_path, cifs_sb->local_nls,
|
||||
cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
@@ -1316,7 +1312,7 @@ int cifs_revalidate(struct dentry *direntry)
|
||||
}
|
||||
}
|
||||
/* mutex_unlock(&direntry->d_inode->i_mutex); */
|
||||
|
||||
|
||||
kfree(full_path);
|
||||
FreeXid(xid);
|
||||
return rc;
|
||||
@@ -1433,7 +1429,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
||||
} else
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
if (full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
@@ -1588,7 +1584,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
||||
stamps are changed explicitly (i.e. by utime()
|
||||
since we would then have a mix of client and
|
||||
server times */
|
||||
|
||||
|
||||
if (set_time && (attrs->ia_valid & ATTR_CTIME)) {
|
||||
set_time = TRUE;
|
||||
/* Although Samba throws this field away
|
||||
|
||||
+3
-2
@@ -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);
|
||||
|
||||
+3
-3
@@ -4,17 +4,17 @@
|
||||
a implementation of MD4 designed for use in the SMB authentication protocol
|
||||
Copyright (C) Andrew Tridgell 1997-1998.
|
||||
Modified by Steve French (sfrench@us.ibm.com) 2002-2003
|
||||
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
+7
-5
@@ -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);*/
|
||||
|
||||
+1
-1
@@ -816,7 +816,7 @@ map_smb_to_linux_error(struct smb_hdr *smb)
|
||||
cFYI(1, (" !!Mapping smb error code %d to POSIX err %d !!",
|
||||
smberrcode, rc));
|
||||
|
||||
/* generic corrective action e.g. reconnect SMB session on
|
||||
/* generic corrective action e.g. reconnect SMB session on
|
||||
* ERRbaduid could be added */
|
||||
|
||||
return rc;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user