Break out PAC generation
This commit is contained in:
		 Love Hornquist Astrand
					Love Hornquist Astrand
				
			
				
					committed by
					
						 Love Hörnquist Åstrand
						Love Hörnquist Åstrand
					
				
			
			
				
	
			
			
			 Love Hörnquist Åstrand
						Love Hörnquist Åstrand
					
				
			
						parent
						
							94157d4410
						
					
				
				
					commit
					4d63c98125
				
			| @@ -1428,6 +1428,50 @@ send_pac_p(krb5_context context, KDC_REQ *req) | ||||
|     return TRUE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| static krb5_error_code | ||||
| generate_pac(kdc_request_t r, Key *skey) | ||||
| { | ||||
|     krb5_error_code ret; | ||||
|     krb5_pac p = NULL; | ||||
|     krb5_data data; | ||||
|  | ||||
|     ret = _kdc_pac_generate(r->context, r->client, &p); | ||||
|     if (ret) { | ||||
| 	_kdc_r_log(r, 0, "PAC generation failed for -- %s", | ||||
| 		   r->client_name); | ||||
| 	return ret; | ||||
|     } | ||||
|     if (p == NULL) | ||||
| 	return 0; | ||||
|  | ||||
|     ret = _krb5_pac_sign(r->context, p, r->et.authtime, | ||||
| 			 r->client->entry.principal, | ||||
| 			 &skey->key, /* Server key */ | ||||
| 			 &skey->key, /* FIXME: should be krbtgt key */ | ||||
| 			 &data); | ||||
|     krb5_pac_free(r->context, p); | ||||
|     if (ret) { | ||||
| 	_kdc_r_log(r, 0, "PAC signing failed for -- %s", | ||||
| 		   r->client_name); | ||||
| 	return ret; | ||||
|     } | ||||
|      | ||||
|     ret = _kdc_tkt_add_if_relevant_ad(r->context, &r->et, | ||||
| 				      KRB5_AUTHDATA_WIN2K_PAC, | ||||
| 				      &data); | ||||
|     krb5_data_free(&data); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| krb5_boolean | ||||
| _kdc_is_anonymous(krb5_context context, krb5_principal principal) | ||||
| { | ||||
| @@ -1691,7 +1735,7 @@ _kdc_as_rep(kdc_request_t r, | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     if ((found_pa == 0 && require_preauth_p(r))  || b->kdc_options.request_anonymous) { | ||||
|     if (found_pa == 0 && (require_preauth_p(r) || b->kdc_options.request_anonymous)) { | ||||
| 	size_t n; | ||||
|  | ||||
| 	for (n = 0; n < sizeof(pat) / sizeof(pat[0]); n++) { | ||||
| @@ -2053,35 +2097,7 @@ _kdc_as_rep(kdc_request_t r, | ||||
|  | ||||
|     /* Add the PAC */ | ||||
|     if (send_pac_p(context, req)) { | ||||
| 	krb5_pac p = NULL; | ||||
| 	krb5_data data; | ||||
|  | ||||
| 	ret = _kdc_pac_generate(context, r->client, &p); | ||||
| 	if (ret) { | ||||
| 	    kdc_log(context, config, 0, "PAC generation failed for -- %s", | ||||
| 		    r->client_name); | ||||
| 	    goto out; | ||||
| 	} | ||||
| 	if (p != NULL) { | ||||
| 	    ret = _krb5_pac_sign(context, p, et.authtime, | ||||
| 				 r->client->entry.principal, | ||||
| 				 &skey->key, /* Server key */ | ||||
| 				 &skey->key, /* FIXME: should be krbtgt key */ | ||||
| 				 &data); | ||||
| 	    krb5_pac_free(context, p); | ||||
| 	    if (ret) { | ||||
| 		kdc_log(context, config, 0, "PAC signing failed for -- %s", | ||||
| 			r->client_name); | ||||
| 		goto out; | ||||
| 	    } | ||||
|  | ||||
| 	    ret = _kdc_tkt_add_if_relevant_ad(context, &et, | ||||
| 					      KRB5_AUTHDATA_WIN2K_PAC, | ||||
| 					      &data); | ||||
| 	    krb5_data_free(&data); | ||||
| 	    if (ret) | ||||
| 		goto out; | ||||
| 	} | ||||
| 	generate_pac(r, skey); | ||||
|     } | ||||
|  | ||||
|     _kdc_log_timestamp(context, config, "AS-REQ", et.authtime, et.starttime, | ||||
| @@ -2110,7 +2126,7 @@ _kdc_as_rep(kdc_request_t r, | ||||
| 	ret = add_enc_pa_rep(r); | ||||
| 	if (ret) { | ||||
| 	    const char *msg = krb5_get_error_message(r->context, ret); | ||||
| 	    _kdc_r_log(r, 0, "add_enc_pa_rep failed: %d: %s", ret, msg); | ||||
| 	    _kdc_r_log(r, 0, "add_enc_pa_rep failed: %s: %d", msg, ret); | ||||
| 	    krb5_free_error_message(r->context, msg); | ||||
| 	    goto out; | ||||
| 	} | ||||
| @@ -2141,7 +2157,7 @@ out: | ||||
|     /* | ||||
|      * In case of a non proxy error, build an error message. | ||||
|      */ | ||||
|     if(ret != 0 && ret != HDB_ERR_NOT_FOUND_HERE){ | ||||
|     if(ret != 0 && ret != HDB_ERR_NOT_FOUND_HERE) { | ||||
| 	kdc_log(context, config, 10, "as-req: sending error: %d to client", ret); | ||||
| 	ret = _kdc_fast_mk_error(context, | ||||
| 				 &error_method, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user