(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