(_gssapi_krb5_ccache_lifetime): break out code used to extract
lifetime from a credential cache git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16239 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -35,6 +35,52 @@
 | 
			
		||||
 | 
			
		||||
RCSID("$Id$");
 | 
			
		||||
 | 
			
		||||
OM_uint32
 | 
			
		||||
_gssapi_krb5_ccache_lifetime(OM_uint32 *minor_status,
 | 
			
		||||
			     krb5_ccache id,
 | 
			
		||||
			     krb5_principal principal,
 | 
			
		||||
			     OM_uint32 *lifetime)
 | 
			
		||||
{
 | 
			
		||||
    krb5_creds in_cred, *out_cred;
 | 
			
		||||
    krb5_const_realm realm;
 | 
			
		||||
    krb5_error_code kret;
 | 
			
		||||
 | 
			
		||||
    memset(&in_cred, 0, sizeof(in_cred));
 | 
			
		||||
    in_cred.client = principal;
 | 
			
		||||
	
 | 
			
		||||
    realm = krb5_principal_get_realm(gssapi_krb5_context,  principal);
 | 
			
		||||
    if (realm == NULL) {
 | 
			
		||||
	gssapi_krb5_clear_status ();
 | 
			
		||||
	*minor_status = KRB5_PRINC_NOMATCH; /* XXX */
 | 
			
		||||
	return GSS_S_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    kret = krb5_make_principal(gssapi_krb5_context, &in_cred.server, 
 | 
			
		||||
			       realm, KRB5_TGS_NAME, realm, NULL);
 | 
			
		||||
    if (kret) {
 | 
			
		||||
	gssapi_krb5_set_error_string();
 | 
			
		||||
	*minor_status = kret;
 | 
			
		||||
	return GSS_S_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    kret = krb5_get_credentials(gssapi_krb5_context, 0, 
 | 
			
		||||
				id, &in_cred, &out_cred);
 | 
			
		||||
    krb5_free_principal(gssapi_krb5_context, in_cred.server);
 | 
			
		||||
    if (kret) {
 | 
			
		||||
	gssapi_krb5_set_error_string();
 | 
			
		||||
	*minor_status = kret;
 | 
			
		||||
	return GSS_S_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *lifetime = out_cred->times.endtime;
 | 
			
		||||
    krb5_free_creds(gssapi_krb5_context, out_cred);
 | 
			
		||||
 | 
			
		||||
    return GSS_S_COMPLETE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static krb5_error_code
 | 
			
		||||
get_keytab(krb5_keytab *keytab)
 | 
			
		||||
{
 | 
			
		||||
@@ -148,32 +194,14 @@ static OM_uint32 acquire_initiator_cred
 | 
			
		||||
	    goto end;
 | 
			
		||||
	handle->lifetime = cred.times.endtime;
 | 
			
		||||
    } else {
 | 
			
		||||
	krb5_creds in_cred, *out_cred;
 | 
			
		||||
	krb5_const_realm realm;
 | 
			
		||||
 | 
			
		||||
	memset(&in_cred, 0, sizeof(in_cred));
 | 
			
		||||
	in_cred.client = handle->principal;
 | 
			
		||||
	
 | 
			
		||||
	realm = krb5_principal_get_realm(gssapi_krb5_context, 
 | 
			
		||||
					 handle->principal);
 | 
			
		||||
	if (realm == NULL) {
 | 
			
		||||
	    kret = KRB5_PRINC_NOMATCH; /* XXX */
 | 
			
		||||
	ret = _gssapi_krb5_ccache_lifetime(minor_status,
 | 
			
		||||
					   ccache,
 | 
			
		||||
					   handle->principal,
 | 
			
		||||
					   &handle->lifetime);
 | 
			
		||||
	if (ret != GSS_S_COMPLETE)
 | 
			
		||||
	    goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	kret = krb5_make_principal(gssapi_krb5_context, &in_cred.server, 
 | 
			
		||||
				   realm, KRB5_TGS_NAME, realm, NULL);
 | 
			
		||||
	if (kret)
 | 
			
		||||
	    goto end;
 | 
			
		||||
 | 
			
		||||
	kret = krb5_get_credentials(gssapi_krb5_context, 0, 
 | 
			
		||||
				    ccache, &in_cred, &out_cred);
 | 
			
		||||
	krb5_free_principal(gssapi_krb5_context, in_cred.server);
 | 
			
		||||
	if (kret)
 | 
			
		||||
	    goto end;
 | 
			
		||||
 | 
			
		||||
	handle->lifetime = out_cred->times.endtime;
 | 
			
		||||
	krb5_free_creds(gssapi_krb5_context, out_cred);
 | 
			
		||||
	kret = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    handle->ccache = ccache;
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,52 @@
 | 
			
		||||
 | 
			
		||||
RCSID("$Id$");
 | 
			
		||||
 | 
			
		||||
OM_uint32
 | 
			
		||||
_gssapi_krb5_ccache_lifetime(OM_uint32 *minor_status,
 | 
			
		||||
			     krb5_ccache id,
 | 
			
		||||
			     krb5_principal principal,
 | 
			
		||||
			     OM_uint32 *lifetime)
 | 
			
		||||
{
 | 
			
		||||
    krb5_creds in_cred, *out_cred;
 | 
			
		||||
    krb5_const_realm realm;
 | 
			
		||||
    krb5_error_code kret;
 | 
			
		||||
 | 
			
		||||
    memset(&in_cred, 0, sizeof(in_cred));
 | 
			
		||||
    in_cred.client = principal;
 | 
			
		||||
	
 | 
			
		||||
    realm = krb5_principal_get_realm(gssapi_krb5_context,  principal);
 | 
			
		||||
    if (realm == NULL) {
 | 
			
		||||
	gssapi_krb5_clear_status ();
 | 
			
		||||
	*minor_status = KRB5_PRINC_NOMATCH; /* XXX */
 | 
			
		||||
	return GSS_S_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    kret = krb5_make_principal(gssapi_krb5_context, &in_cred.server, 
 | 
			
		||||
			       realm, KRB5_TGS_NAME, realm, NULL);
 | 
			
		||||
    if (kret) {
 | 
			
		||||
	gssapi_krb5_set_error_string();
 | 
			
		||||
	*minor_status = kret;
 | 
			
		||||
	return GSS_S_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    kret = krb5_get_credentials(gssapi_krb5_context, 0, 
 | 
			
		||||
				id, &in_cred, &out_cred);
 | 
			
		||||
    krb5_free_principal(gssapi_krb5_context, in_cred.server);
 | 
			
		||||
    if (kret) {
 | 
			
		||||
	gssapi_krb5_set_error_string();
 | 
			
		||||
	*minor_status = kret;
 | 
			
		||||
	return GSS_S_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *lifetime = out_cred->times.endtime;
 | 
			
		||||
    krb5_free_creds(gssapi_krb5_context, out_cred);
 | 
			
		||||
 | 
			
		||||
    return GSS_S_COMPLETE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static krb5_error_code
 | 
			
		||||
get_keytab(krb5_keytab *keytab)
 | 
			
		||||
{
 | 
			
		||||
@@ -148,32 +194,14 @@ static OM_uint32 acquire_initiator_cred
 | 
			
		||||
	    goto end;
 | 
			
		||||
	handle->lifetime = cred.times.endtime;
 | 
			
		||||
    } else {
 | 
			
		||||
	krb5_creds in_cred, *out_cred;
 | 
			
		||||
	krb5_const_realm realm;
 | 
			
		||||
 | 
			
		||||
	memset(&in_cred, 0, sizeof(in_cred));
 | 
			
		||||
	in_cred.client = handle->principal;
 | 
			
		||||
	
 | 
			
		||||
	realm = krb5_principal_get_realm(gssapi_krb5_context, 
 | 
			
		||||
					 handle->principal);
 | 
			
		||||
	if (realm == NULL) {
 | 
			
		||||
	    kret = KRB5_PRINC_NOMATCH; /* XXX */
 | 
			
		||||
	ret = _gssapi_krb5_ccache_lifetime(minor_status,
 | 
			
		||||
					   ccache,
 | 
			
		||||
					   handle->principal,
 | 
			
		||||
					   &handle->lifetime);
 | 
			
		||||
	if (ret != GSS_S_COMPLETE)
 | 
			
		||||
	    goto end;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	kret = krb5_make_principal(gssapi_krb5_context, &in_cred.server, 
 | 
			
		||||
				   realm, KRB5_TGS_NAME, realm, NULL);
 | 
			
		||||
	if (kret)
 | 
			
		||||
	    goto end;
 | 
			
		||||
 | 
			
		||||
	kret = krb5_get_credentials(gssapi_krb5_context, 0, 
 | 
			
		||||
				    ccache, &in_cred, &out_cred);
 | 
			
		||||
	krb5_free_principal(gssapi_krb5_context, in_cred.server);
 | 
			
		||||
	if (kret)
 | 
			
		||||
	    goto end;
 | 
			
		||||
 | 
			
		||||
	handle->lifetime = out_cred->times.endtime;
 | 
			
		||||
	krb5_free_creds(gssapi_krb5_context, out_cred);
 | 
			
		||||
	kret = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    handle->ccache = ccache;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user