(fail_verify_is_ok): new function
(krb5_verify_init_creds): if we cannot get a ticket for host/`hostname` and fail_verify_is_ok just return. use krb5_rd_req git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5205 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -54,6 +54,26 @@ krb5_verify_init_creds_opt_set_ap_req_nofail(krb5_verify_init_creds_opt *options | |||||||
|     options->ap_req_nofail = ap_req_nofail; |     options->ap_req_nofail = ap_req_nofail; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | static krb5_boolean | ||||||
|  | fail_verify_is_ok (krb5_context context, | ||||||
|  | 		   krb5_verify_init_creds_opt *options) | ||||||
|  | { | ||||||
|  |     if ((options->flags & KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL | ||||||
|  | 	&& options->ap_req_nofail == 1) | ||||||
|  | 	|| krb5_config_get_bool (context, | ||||||
|  | 				 NULL, | ||||||
|  | 				 "libdefaults", | ||||||
|  | 				 "verify_ap_req_nofail", | ||||||
|  | 				 NULL)) | ||||||
|  | 	return FALSE; | ||||||
|  |     else | ||||||
|  | 	return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
| krb5_error_code | krb5_error_code | ||||||
| krb5_verify_init_creds(krb5_context context, | krb5_verify_init_creds(krb5_context context, | ||||||
| 		       krb5_creds *creds, | 		       krb5_creds *creds, | ||||||
| @@ -128,8 +148,11 @@ krb5_verify_init_creds(krb5_context context, | |||||||
| 				    local_ccache, | 				    local_ccache, | ||||||
| 				    &match_cred, | 				    &match_cred, | ||||||
| 				    &new_creds); | 				    &new_creds); | ||||||
| 	if (ret) | 	if (ret) { | ||||||
|  | 	    if (fail_verify_is_ok (context, options)) | ||||||
|  | 		ret = 0; | ||||||
| 	    goto cleanup; | 	    goto cleanup; | ||||||
|  | 	} | ||||||
|     } else |     } else | ||||||
| 	new_creds = creds; | 	new_creds = creds; | ||||||
|  |  | ||||||
| @@ -146,35 +169,16 @@ krb5_verify_init_creds(krb5_context context, | |||||||
|     if (ret) |     if (ret) | ||||||
| 	goto cleanup; | 	goto cleanup; | ||||||
|  |  | ||||||
|     ret = krb5_kt_get_entry (context, |     ret = krb5_rd_req (context, | ||||||
| 			     keytab, |  | ||||||
| 			     server, |  | ||||||
| 			     0, |  | ||||||
| 			     KEYTYPE_DES, |  | ||||||
| 			     &entry); |  | ||||||
|     if (ret) { |  | ||||||
| 	if (((options->flags & KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL) &&  |  | ||||||
| 	     options->ap_req_nofail == 1) ||  |  | ||||||
| 	    krb5_config_get_bool (context, |  | ||||||
| 				  NULL, |  | ||||||
| 				  "libdefaults", |  | ||||||
| 				  "verify_ap_req_nofail", |  | ||||||
| 				  NULL)) { |  | ||||||
| 	    goto cleanup; |  | ||||||
| 	} else { |  | ||||||
| 	    ret = 0; |  | ||||||
| 	    goto cleanup; |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     ret = krb5_rd_req_with_keyblock (context, |  | ||||||
| 		       &auth_context, | 		       &auth_context, | ||||||
| 		       &req, | 		       &req, | ||||||
| 		       server, | 		       server, | ||||||
| 				     &entry.keyblock, | 		       keytab, | ||||||
| 		       0, | 		       0, | ||||||
| 		       NULL); | 		       NULL); | ||||||
|  |  | ||||||
|  |     if (ret == KRB5_KT_NOTFOUND && fail_verify_is_ok (context, options)) | ||||||
|  | 	ret = 0; | ||||||
| cleanup: | cleanup: | ||||||
|     if (auth_context) |     if (auth_context) | ||||||
| 	krb5_auth_con_free (context, auth_context); | 	krb5_auth_con_free (context, auth_context); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Assar Westerlund
					Assar Westerlund