Return session key for the NTLMv2 case too
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19533 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		
							
								
								
									
										25
									
								
								kdc/digest.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								kdc/digest.c
									
									
									
									
									
								
							@@ -864,6 +864,7 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
 | 
			
		||||
    case choice_DigestReqInner_ntlmRequest: {
 | 
			
		||||
	krb5_principal clientprincipal;
 | 
			
		||||
	unsigned char sessionkey[16];
 | 
			
		||||
	unsigned char challange[8];
 | 
			
		||||
	uint32_t flags;
 | 
			
		||||
	Key *key = NULL;
 | 
			
		||||
@@ -938,7 +939,6 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
 | 
			
		||||
	/* check if this is NTLMv2 */
 | 
			
		||||
	if (ireq.u.ntlmRequest.ntlm.length != 24) {
 | 
			
		||||
	    unsigned char masterkey[16];
 | 
			
		||||
	    struct ntlm_buf infotarget, answer;
 | 
			
		||||
	    char *targetname;
 | 
			
		||||
 | 
			
		||||
@@ -967,7 +967,7 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
					 challange,
 | 
			
		||||
					 &answer,
 | 
			
		||||
					 &infotarget,
 | 
			
		||||
					 masterkey);
 | 
			
		||||
					 sessionkey);
 | 
			
		||||
	    free(targetname);
 | 
			
		||||
	    if (ret) {
 | 
			
		||||
		krb5_set_error_string(context, "NTLM v2 verify failed");
 | 
			
		||||
@@ -978,6 +978,7 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
 | 
			
		||||
	    free(infotarget.data);
 | 
			
		||||
	    /* */
 | 
			
		||||
 | 
			
		||||
	} else {
 | 
			
		||||
	    struct ntlm_buf answer;
 | 
			
		||||
 | 
			
		||||
@@ -1029,10 +1030,18 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
	    }
 | 
			
		||||
	    free(answer.data);
 | 
			
		||||
 | 
			
		||||
	    if (ireq.u.ntlmRequest.sessionkey) {
 | 
			
		||||
		unsigned char sessionkey[MD4_DIGEST_LENGTH];
 | 
			
		||||
		unsigned char masterkey[MD4_DIGEST_LENGTH];
 | 
			
		||||
	    {
 | 
			
		||||
		MD4_CTX ctx;
 | 
			
		||||
 | 
			
		||||
		MD4_Init(&ctx);
 | 
			
		||||
		MD4_Update(&ctx, 
 | 
			
		||||
			   key->key.keyvalue.data, key->key.keyvalue.length);
 | 
			
		||||
		MD4_Final(sessionkey, &ctx);
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (ireq.u.ntlmRequest.sessionkey) {
 | 
			
		||||
	    unsigned char masterkey[MD4_DIGEST_LENGTH];
 | 
			
		||||
	    RC4_KEY rc4;
 | 
			
		||||
	    size_t len;
 | 
			
		||||
	    
 | 
			
		||||
@@ -1051,11 +1060,6 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
		goto out;
 | 
			
		||||
	    }
 | 
			
		||||
	    
 | 
			
		||||
		MD4_Init(&ctx);
 | 
			
		||||
		MD4_Update(&ctx, 
 | 
			
		||||
			   key->key.keyvalue.data, key->key.keyvalue.length);
 | 
			
		||||
		MD4_Final(sessionkey, &ctx);
 | 
			
		||||
 | 
			
		||||
	    RC4_set_key(&rc4, sizeof(sessionkey), sessionkey);
 | 
			
		||||
	    
 | 
			
		||||
	    RC4(&rc4, sizeof(masterkey),
 | 
			
		||||
@@ -1077,7 +1081,6 @@ _kdc_do_digest(krb5_context context,
 | 
			
		||||
		goto out;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.u.ntlmResponse.success = 1;
 | 
			
		||||
	kdc_log(context, config, 0, "NTLM version %d successful for %s",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user