Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8ee0344 authored by Steve French's avatar Steve French
Browse files

[CIFS] NTLMv2 support part 4



Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 6d027cfd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -889,7 +889,7 @@ security_flags_write(struct file *file, const char __user *buffer,
	}

	if(flags & ~CIFSSEC_MASK) {
		cERROR(1,("attempt to set unsupported security flags 0x%d",
		cERROR(1,("attempt to set unsupported security flags 0x%x",
			flags & ~CIFSSEC_MASK));
		return -EINVAL;
	}
+40 −0
Original line number Diff line number Diff line
@@ -305,8 +305,44 @@ void calc_lanman_hash(struct cifsSesInfo * ses, char * lnm_session_key)
}
#endif /* CIFS_WEAK_PW_HASH */

static int calc_ntlmv2_hash(const struct cifsSesInfo *ses, 
			    char * ntv2_hash)
{
	int rc = 0;
	int len;
	char nt_hash[16];
	struct HMACMD5Context * pctxt;

	pctxt = kmalloc(sizeof(struct HMACMD5Context), GFP_KERNEL);

	if(pctxt == NULL)
		return -ENOMEM;

	/* calculate md4 hash of password */
	E_md4hash(ses->password, nt_hash);

	/* convERT Domainname to unicode and uppercase */
	hmac_md5_init_limK_to_64(nt_hash, 16, pctxt);

	/* convert ses->userName to unicode and uppercase */

	/* len = ... */  /* BB FIXME BB */

	/* hmac_md5_update(user, len, pctxt); */

	/* convert ses->domainName to unicode and uppercase */

	/* len = ... */  /* BB FIXME BB */
	/* hmac_md5_update(domain, len, pctxt); */

	hmac_md5_final(ntv2_hash, pctxt);

	return rc;
}

void setup_ntlmv2_rsp(const struct cifsSesInfo * ses, char * resp_buf)
{
	int rc;
	struct ntlmv2_resp * buf = (struct ntlmv2_resp *)resp_buf;

	buf->blob_signature = cpu_to_le32(0x00000101);
@@ -316,7 +352,11 @@ void setup_ntlmv2_rsp(const struct cifsSesInfo * ses, char * resp_buf)
	buf->reserved2 = 0;
	buf->names[0].type = 0;
	buf->names[0].length = 0;

	/* calculate buf->ntlmv2_hash */
	rc = calc_ntlmv2_hash(ses,buf->ntlmv2_hash);
	if(rc)
		cERROR(1,("could not get v2 hash rc %d",rc));
}

void CalcNTLMv2_response(const struct cifsSesInfo * ses,char * v2_session_response)