|
@@ -351,9 +351,7 @@ static int
|
|
|
build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp)
|
|
|
{
|
|
|
unsigned int dlen;
|
|
|
- unsigned int wlen;
|
|
|
- unsigned int size = 6 * sizeof(struct ntlmssp2_name);
|
|
|
- __le64 curtime;
|
|
|
+ unsigned int size = 2 * sizeof(struct ntlmssp2_name);
|
|
|
char *defdmname = "WORKGROUP";
|
|
|
unsigned char *blobptr;
|
|
|
struct ntlmssp2_name *attrptr;
|
|
@@ -365,15 +363,14 @@ build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp)
|
|
|
}
|
|
|
|
|
|
dlen = strlen(ses->domainName);
|
|
|
- wlen = strlen(ses->server->hostname);
|
|
|
|
|
|
- /* The length of this blob is a size which is
|
|
|
- * six times the size of a structure which holds name/size +
|
|
|
- * two times the unicode length of a domain name +
|
|
|
- * two times the unicode length of a server name +
|
|
|
- * size of a timestamp (which is 8 bytes).
|
|
|
+ /*
|
|
|
+ * The length of this blob is two times the size of a
|
|
|
+ * structure (av pair) which holds name/size
|
|
|
+ * ( for NTLMSSP_AV_NB_DOMAIN_NAME followed by NTLMSSP_AV_EOL ) +
|
|
|
+ * unicode length of a netbios domain name
|
|
|
*/
|
|
|
- ses->auth_key.len = size + 2 * (2 * dlen) + 2 * (2 * wlen) + 8;
|
|
|
+ ses->auth_key.len = size + 2 * dlen;
|
|
|
ses->auth_key.response = kzalloc(ses->auth_key.len, GFP_KERNEL);
|
|
|
if (!ses->auth_key.response) {
|
|
|
ses->auth_key.len = 0;
|
|
@@ -384,44 +381,15 @@ build_avpair_blob(struct cifs_ses *ses, const struct nls_table *nls_cp)
|
|
|
blobptr = ses->auth_key.response;
|
|
|
attrptr = (struct ntlmssp2_name *) blobptr;
|
|
|
|
|
|
+ /*
|
|
|
+ * As defined in MS-NTLM 3.3.2, just this av pair field
|
|
|
+ * is sufficient as part of the temp
|
|
|
+ */
|
|
|
attrptr->type = cpu_to_le16(NTLMSSP_AV_NB_DOMAIN_NAME);
|
|
|
attrptr->length = cpu_to_le16(2 * dlen);
|
|
|
blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name);
|
|
|
cifs_strtoUCS((__le16 *)blobptr, ses->domainName, dlen, nls_cp);
|
|
|
|
|
|
- blobptr += 2 * dlen;
|
|
|
- attrptr = (struct ntlmssp2_name *) blobptr;
|
|
|
-
|
|
|
- attrptr->type = cpu_to_le16(NTLMSSP_AV_NB_COMPUTER_NAME);
|
|
|
- attrptr->length = cpu_to_le16(2 * wlen);
|
|
|
- blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name);
|
|
|
- cifs_strtoUCS((__le16 *)blobptr, ses->server->hostname, wlen, nls_cp);
|
|
|
-
|
|
|
- blobptr += 2 * wlen;
|
|
|
- attrptr = (struct ntlmssp2_name *) blobptr;
|
|
|
-
|
|
|
- attrptr->type = cpu_to_le16(NTLMSSP_AV_DNS_DOMAIN_NAME);
|
|
|
- attrptr->length = cpu_to_le16(2 * dlen);
|
|
|
- blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name);
|
|
|
- cifs_strtoUCS((__le16 *)blobptr, ses->domainName, dlen, nls_cp);
|
|
|
-
|
|
|
- blobptr += 2 * dlen;
|
|
|
- attrptr = (struct ntlmssp2_name *) blobptr;
|
|
|
-
|
|
|
- attrptr->type = cpu_to_le16(NTLMSSP_AV_DNS_COMPUTER_NAME);
|
|
|
- attrptr->length = cpu_to_le16(2 * wlen);
|
|
|
- blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name);
|
|
|
- cifs_strtoUCS((__le16 *)blobptr, ses->server->hostname, wlen, nls_cp);
|
|
|
-
|
|
|
- blobptr += 2 * wlen;
|
|
|
- attrptr = (struct ntlmssp2_name *) blobptr;
|
|
|
-
|
|
|
- attrptr->type = cpu_to_le16(NTLMSSP_AV_TIMESTAMP);
|
|
|
- attrptr->length = cpu_to_le16(sizeof(__le64));
|
|
|
- blobptr = (unsigned char *)attrptr + sizeof(struct ntlmssp2_name);
|
|
|
- curtime = cpu_to_le64(cifs_UnixTimeToNT(CURRENT_TIME));
|
|
|
- memcpy(blobptr, &curtime, sizeof(__le64));
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|