better error message, try to handle server referrals slightly better.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22760 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -87,7 +87,7 @@ check_server_referral(krb5_context context, | |||||||
|     size_t len; |     size_t len; | ||||||
|     krb5_data data; |     krb5_data data; | ||||||
|     PA_DATA *pa; |     PA_DATA *pa; | ||||||
|     int i = 0; |     int i = 0, cmp; | ||||||
|  |  | ||||||
|     if (rep->kdc_rep.padata == NULL) |     if (rep->kdc_rep.padata == NULL) | ||||||
| 	goto noreferral; | 	goto noreferral; | ||||||
| @@ -133,34 +133,25 @@ check_server_referral(krb5_context context, | |||||||
|     } |     } | ||||||
|     krb5_data_free(&data); |     krb5_data_free(&data); | ||||||
|      |      | ||||||
|     printf("encrypted SERVER REFERRAL data ok\n"); |  | ||||||
|      |  | ||||||
|     if (ref.requested_principal_name == NULL || ref.referred_realm == NULL) { |     if (ref.requested_principal_name == NULL || ref.referred_realm == NULL) { | ||||||
| 	free_PA_ServerReferralData(&ref); | 	free_PA_ServerReferralData(&ref); | ||||||
| 	krb5_set_error_string(context, "req princ missing"); | 	krb5_set_error_string(context, "req princ missing"); | ||||||
| 	return KRB5KRB_AP_ERR_MODIFIED; | 	return KRB5KRB_AP_ERR_MODIFIED; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     ret = _krb5_principalname2krb5_principal(context, &principal, |     cmp = _krb5_principal_compare_PrincipalName(context, | ||||||
| 					     *ref.requested_principal_name, | 						*ref.requested_principal_name, | ||||||
| 					     requested->realm); | 						requested); | ||||||
|     if (ret) { |  | ||||||
| 	free_PA_ServerReferralData(&ref); |  | ||||||
| 	return ret; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     ret = krb5_principal_compare(context, principal, requested); |  | ||||||
|     krb5_free_principal(context, principal); |  | ||||||
|     free_PA_ServerReferralData(&ref); |     free_PA_ServerReferralData(&ref); | ||||||
|  |     if (!cmp) { | ||||||
|     printf("referrals request match ? %d\n", ret); | 	krb5_set_error_string(context, "krb5_principal_compare princ missing"); | ||||||
|      | 	return KRB5KRB_AP_ERR_MODIFIED; | ||||||
|     ret = 0; |     } | ||||||
|  |  | ||||||
|     return ret; |     return ret; | ||||||
| noreferral: | noreferral: | ||||||
|     if (krb5_principal_compare(context, requested, returned) == FALSE) { |     if (krb5_principal_compare(context, requested, returned) == FALSE) { | ||||||
| 	krb5_set_error_string(context, "Not same principal returned " | 	krb5_set_error_string(context, "Not same server principal returned " | ||||||
| 			      "as requested"); | 			      "as requested"); | ||||||
| 	return KRB5KRB_AP_ERR_MODIFIED; | 	return KRB5KRB_AP_ERR_MODIFIED; | ||||||
|     } |     } | ||||||
| @@ -257,7 +248,7 @@ check_client_referral(krb5_context context, | |||||||
|  |  | ||||||
| noreferral: | noreferral: | ||||||
|     if (krb5_principal_compare(context, requested, mapped) == FALSE) { |     if (krb5_principal_compare(context, requested, mapped) == FALSE) { | ||||||
| 	krb5_set_error_string(context, "Not same principal returned " | 	krb5_set_error_string(context, "Not same client principal returned " | ||||||
| 			      "as requested"); | 			      "as requested"); | ||||||
| 	return KRB5KRB_AP_ERR_MODIFIED; | 	return KRB5KRB_AP_ERR_MODIFIED; | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand