remember to free data
use sequence number verifier git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12365 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -184,11 +184,10 @@ init_auth
|
|||||||
OM_uint32 ret = GSS_S_FAILURE;
|
OM_uint32 ret = GSS_S_FAILURE;
|
||||||
krb5_error_code kret;
|
krb5_error_code kret;
|
||||||
krb5_flags ap_options;
|
krb5_flags ap_options;
|
||||||
krb5_creds this_cred, *cred;
|
krb5_creds this_cred, *cred = NULL;
|
||||||
krb5_data outbuf;
|
krb5_data outbuf;
|
||||||
krb5_ccache ccache;
|
krb5_ccache ccache = NULL;
|
||||||
u_int32_t flags;
|
u_int32_t flags;
|
||||||
Authenticator *auth;
|
|
||||||
krb5_data authenticator;
|
krb5_data authenticator;
|
||||||
Checksum cksum;
|
Checksum cksum;
|
||||||
krb5_enctype enctype;
|
krb5_enctype enctype;
|
||||||
@@ -213,6 +212,7 @@ init_auth
|
|||||||
(*context_handle)->more_flags = 0;
|
(*context_handle)->more_flags = 0;
|
||||||
(*context_handle)->ticket = NULL;
|
(*context_handle)->ticket = NULL;
|
||||||
(*context_handle)->lifetime = GSS_C_INDEFINITE;
|
(*context_handle)->lifetime = GSS_C_INDEFINITE;
|
||||||
|
(*context_handle)->order = NULL;
|
||||||
HEIMDAL_MUTEX_init(&(*context_handle)->ctx_id_mutex);
|
HEIMDAL_MUTEX_init(&(*context_handle)->ctx_id_mutex);
|
||||||
|
|
||||||
kret = krb5_auth_con_init (gssapi_krb5_context,
|
kret = krb5_auth_con_init (gssapi_krb5_context,
|
||||||
@@ -349,14 +349,13 @@ init_auth
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (req_flags & GSS_C_REPLAY_FLAG)
|
if (req_flags & GSS_C_REPLAY_FLAG)
|
||||||
; /* XXX */
|
flags |= GSS_C_REPLAY_FLAG;
|
||||||
if (req_flags & GSS_C_SEQUENCE_FLAG)
|
if (req_flags & GSS_C_SEQUENCE_FLAG)
|
||||||
; /* XXX */
|
flags |= GSS_C_SEQUENCE_FLAG;
|
||||||
if (req_flags & GSS_C_ANON_FLAG)
|
if (req_flags & GSS_C_ANON_FLAG)
|
||||||
; /* XXX */
|
; /* XXX */
|
||||||
flags |= GSS_C_CONF_FLAG;
|
flags |= GSS_C_CONF_FLAG;
|
||||||
flags |= GSS_C_INTEG_FLAG;
|
flags |= GSS_C_INTEG_FLAG;
|
||||||
flags |= GSS_C_SEQUENCE_FLAG;
|
|
||||||
flags |= GSS_C_TRANS_FLAG;
|
flags |= GSS_C_TRANS_FLAG;
|
||||||
|
|
||||||
if (ret_flags)
|
if (ret_flags)
|
||||||
@@ -392,7 +391,7 @@ init_auth
|
|||||||
enctype,
|
enctype,
|
||||||
cred,
|
cred,
|
||||||
&cksum,
|
&cksum,
|
||||||
&auth,
|
NULL,
|
||||||
&authenticator,
|
&authenticator,
|
||||||
KRB5_KU_AP_REQ_AUTH);
|
KRB5_KU_AP_REQ_AUTH);
|
||||||
|
|
||||||
@@ -423,10 +422,21 @@ init_auth
|
|||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
krb5_data_free (&outbuf);
|
krb5_data_free (&outbuf);
|
||||||
|
krb5_free_creds(gssapi_krb5_context, cred);
|
||||||
|
free_Checksum(&cksum);
|
||||||
|
if (initiator_cred_handle == GSS_C_NO_CREDENTIAL)
|
||||||
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
|
|
||||||
if (flags & GSS_C_MUTUAL_FLAG) {
|
if (flags & GSS_C_MUTUAL_FLAG) {
|
||||||
return GSS_S_CONTINUE_NEEDED;
|
return GSS_S_CONTINUE_NEEDED;
|
||||||
} else {
|
} else {
|
||||||
|
ret = gssapi_msg_order_create(minor_status,
|
||||||
|
&(*context_handle)->order,
|
||||||
|
gssapi_msg_order_f(flags),
|
||||||
|
0, 0);
|
||||||
|
if (ret)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
if (time_rec)
|
if (time_rec)
|
||||||
*time_rec = lifetime_rec;
|
*time_rec = lifetime_rec;
|
||||||
|
|
||||||
@@ -437,15 +447,21 @@ init_auth
|
|||||||
failure:
|
failure:
|
||||||
krb5_auth_con_free (gssapi_krb5_context,
|
krb5_auth_con_free (gssapi_krb5_context,
|
||||||
(*context_handle)->auth_context);
|
(*context_handle)->auth_context);
|
||||||
|
krb5_data_free (&outbuf);
|
||||||
|
if(cred)
|
||||||
|
krb5_free_creds(gssapi_krb5_context, cred);
|
||||||
|
if (ccache && initiator_cred_handle == GSS_C_NO_CREDENTIAL)
|
||||||
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
if((*context_handle)->source)
|
if((*context_handle)->source)
|
||||||
krb5_free_principal (gssapi_krb5_context,
|
krb5_free_principal (gssapi_krb5_context,
|
||||||
(*context_handle)->source);
|
(*context_handle)->source);
|
||||||
if((*context_handle)->target)
|
if((*context_handle)->target)
|
||||||
krb5_free_principal (gssapi_krb5_context,
|
krb5_free_principal (gssapi_krb5_context,
|
||||||
(*context_handle)->target);
|
(*context_handle)->target);
|
||||||
|
if((*context_handle)->order)
|
||||||
|
gssapi_msg_order_destroy(&(*context_handle)->order);
|
||||||
HEIMDAL_MUTEX_destroy(&(*context_handle)->ctx_id_mutex);
|
HEIMDAL_MUTEX_destroy(&(*context_handle)->ctx_id_mutex);
|
||||||
free (*context_handle);
|
free (*context_handle);
|
||||||
krb5_data_free (&outbuf);
|
|
||||||
*context_handle = GSS_C_NO_CONTEXT;
|
*context_handle = GSS_C_NO_CONTEXT;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -467,7 +483,7 @@ repl_mutual
|
|||||||
OM_uint32 * time_rec
|
OM_uint32 * time_rec
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
OM_uint32 ret;
|
OM_uint32 ret, seq_number;
|
||||||
krb5_error_code kret;
|
krb5_error_code kret;
|
||||||
krb5_data indata;
|
krb5_data indata;
|
||||||
krb5_ap_rep_enc_part *repl;
|
krb5_ap_rep_enc_part *repl;
|
||||||
@@ -501,6 +517,20 @@ repl_mutual
|
|||||||
krb5_free_ap_rep_enc_part (gssapi_krb5_context,
|
krb5_free_ap_rep_enc_part (gssapi_krb5_context,
|
||||||
repl);
|
repl);
|
||||||
|
|
||||||
|
krb5_auth_getremoteseqnumber (gssapi_krb5_context,
|
||||||
|
(*context_handle)->auth_context,
|
||||||
|
&seq_number);
|
||||||
|
|
||||||
|
ret = gssapi_msg_order_create(minor_status,
|
||||||
|
&(*context_handle)->order,
|
||||||
|
gssapi_msg_order_f((*context_handle)->flags),
|
||||||
|
seq_number, 0);
|
||||||
|
if (ret) {
|
||||||
|
HEIMDAL_MUTEX_unlock(&(*context_handle)->ctx_id_mutex);
|
||||||
|
gssapi_krb5_set_error_string ();
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
(*context_handle)->more_flags |= OPEN;
|
(*context_handle)->more_flags |= OPEN;
|
||||||
|
|
||||||
*minor_status = 0;
|
*minor_status = 0;
|
||||||
|
@@ -184,11 +184,10 @@ init_auth
|
|||||||
OM_uint32 ret = GSS_S_FAILURE;
|
OM_uint32 ret = GSS_S_FAILURE;
|
||||||
krb5_error_code kret;
|
krb5_error_code kret;
|
||||||
krb5_flags ap_options;
|
krb5_flags ap_options;
|
||||||
krb5_creds this_cred, *cred;
|
krb5_creds this_cred, *cred = NULL;
|
||||||
krb5_data outbuf;
|
krb5_data outbuf;
|
||||||
krb5_ccache ccache;
|
krb5_ccache ccache = NULL;
|
||||||
u_int32_t flags;
|
u_int32_t flags;
|
||||||
Authenticator *auth;
|
|
||||||
krb5_data authenticator;
|
krb5_data authenticator;
|
||||||
Checksum cksum;
|
Checksum cksum;
|
||||||
krb5_enctype enctype;
|
krb5_enctype enctype;
|
||||||
@@ -213,6 +212,7 @@ init_auth
|
|||||||
(*context_handle)->more_flags = 0;
|
(*context_handle)->more_flags = 0;
|
||||||
(*context_handle)->ticket = NULL;
|
(*context_handle)->ticket = NULL;
|
||||||
(*context_handle)->lifetime = GSS_C_INDEFINITE;
|
(*context_handle)->lifetime = GSS_C_INDEFINITE;
|
||||||
|
(*context_handle)->order = NULL;
|
||||||
HEIMDAL_MUTEX_init(&(*context_handle)->ctx_id_mutex);
|
HEIMDAL_MUTEX_init(&(*context_handle)->ctx_id_mutex);
|
||||||
|
|
||||||
kret = krb5_auth_con_init (gssapi_krb5_context,
|
kret = krb5_auth_con_init (gssapi_krb5_context,
|
||||||
@@ -349,14 +349,13 @@ init_auth
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (req_flags & GSS_C_REPLAY_FLAG)
|
if (req_flags & GSS_C_REPLAY_FLAG)
|
||||||
; /* XXX */
|
flags |= GSS_C_REPLAY_FLAG;
|
||||||
if (req_flags & GSS_C_SEQUENCE_FLAG)
|
if (req_flags & GSS_C_SEQUENCE_FLAG)
|
||||||
; /* XXX */
|
flags |= GSS_C_SEQUENCE_FLAG;
|
||||||
if (req_flags & GSS_C_ANON_FLAG)
|
if (req_flags & GSS_C_ANON_FLAG)
|
||||||
; /* XXX */
|
; /* XXX */
|
||||||
flags |= GSS_C_CONF_FLAG;
|
flags |= GSS_C_CONF_FLAG;
|
||||||
flags |= GSS_C_INTEG_FLAG;
|
flags |= GSS_C_INTEG_FLAG;
|
||||||
flags |= GSS_C_SEQUENCE_FLAG;
|
|
||||||
flags |= GSS_C_TRANS_FLAG;
|
flags |= GSS_C_TRANS_FLAG;
|
||||||
|
|
||||||
if (ret_flags)
|
if (ret_flags)
|
||||||
@@ -392,7 +391,7 @@ init_auth
|
|||||||
enctype,
|
enctype,
|
||||||
cred,
|
cred,
|
||||||
&cksum,
|
&cksum,
|
||||||
&auth,
|
NULL,
|
||||||
&authenticator,
|
&authenticator,
|
||||||
KRB5_KU_AP_REQ_AUTH);
|
KRB5_KU_AP_REQ_AUTH);
|
||||||
|
|
||||||
@@ -423,10 +422,21 @@ init_auth
|
|||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
krb5_data_free (&outbuf);
|
krb5_data_free (&outbuf);
|
||||||
|
krb5_free_creds(gssapi_krb5_context, cred);
|
||||||
|
free_Checksum(&cksum);
|
||||||
|
if (initiator_cred_handle == GSS_C_NO_CREDENTIAL)
|
||||||
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
|
|
||||||
if (flags & GSS_C_MUTUAL_FLAG) {
|
if (flags & GSS_C_MUTUAL_FLAG) {
|
||||||
return GSS_S_CONTINUE_NEEDED;
|
return GSS_S_CONTINUE_NEEDED;
|
||||||
} else {
|
} else {
|
||||||
|
ret = gssapi_msg_order_create(minor_status,
|
||||||
|
&(*context_handle)->order,
|
||||||
|
gssapi_msg_order_f(flags),
|
||||||
|
0, 0);
|
||||||
|
if (ret)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
if (time_rec)
|
if (time_rec)
|
||||||
*time_rec = lifetime_rec;
|
*time_rec = lifetime_rec;
|
||||||
|
|
||||||
@@ -437,15 +447,21 @@ init_auth
|
|||||||
failure:
|
failure:
|
||||||
krb5_auth_con_free (gssapi_krb5_context,
|
krb5_auth_con_free (gssapi_krb5_context,
|
||||||
(*context_handle)->auth_context);
|
(*context_handle)->auth_context);
|
||||||
|
krb5_data_free (&outbuf);
|
||||||
|
if(cred)
|
||||||
|
krb5_free_creds(gssapi_krb5_context, cred);
|
||||||
|
if (ccache && initiator_cred_handle == GSS_C_NO_CREDENTIAL)
|
||||||
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
if((*context_handle)->source)
|
if((*context_handle)->source)
|
||||||
krb5_free_principal (gssapi_krb5_context,
|
krb5_free_principal (gssapi_krb5_context,
|
||||||
(*context_handle)->source);
|
(*context_handle)->source);
|
||||||
if((*context_handle)->target)
|
if((*context_handle)->target)
|
||||||
krb5_free_principal (gssapi_krb5_context,
|
krb5_free_principal (gssapi_krb5_context,
|
||||||
(*context_handle)->target);
|
(*context_handle)->target);
|
||||||
|
if((*context_handle)->order)
|
||||||
|
gssapi_msg_order_destroy(&(*context_handle)->order);
|
||||||
HEIMDAL_MUTEX_destroy(&(*context_handle)->ctx_id_mutex);
|
HEIMDAL_MUTEX_destroy(&(*context_handle)->ctx_id_mutex);
|
||||||
free (*context_handle);
|
free (*context_handle);
|
||||||
krb5_data_free (&outbuf);
|
|
||||||
*context_handle = GSS_C_NO_CONTEXT;
|
*context_handle = GSS_C_NO_CONTEXT;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -467,7 +483,7 @@ repl_mutual
|
|||||||
OM_uint32 * time_rec
|
OM_uint32 * time_rec
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
OM_uint32 ret;
|
OM_uint32 ret, seq_number;
|
||||||
krb5_error_code kret;
|
krb5_error_code kret;
|
||||||
krb5_data indata;
|
krb5_data indata;
|
||||||
krb5_ap_rep_enc_part *repl;
|
krb5_ap_rep_enc_part *repl;
|
||||||
@@ -501,6 +517,20 @@ repl_mutual
|
|||||||
krb5_free_ap_rep_enc_part (gssapi_krb5_context,
|
krb5_free_ap_rep_enc_part (gssapi_krb5_context,
|
||||||
repl);
|
repl);
|
||||||
|
|
||||||
|
krb5_auth_getremoteseqnumber (gssapi_krb5_context,
|
||||||
|
(*context_handle)->auth_context,
|
||||||
|
&seq_number);
|
||||||
|
|
||||||
|
ret = gssapi_msg_order_create(minor_status,
|
||||||
|
&(*context_handle)->order,
|
||||||
|
gssapi_msg_order_f((*context_handle)->flags),
|
||||||
|
seq_number, 0);
|
||||||
|
if (ret) {
|
||||||
|
HEIMDAL_MUTEX_unlock(&(*context_handle)->ctx_id_mutex);
|
||||||
|
gssapi_krb5_set_error_string ();
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
(*context_handle)->more_flags |= OPEN;
|
(*context_handle)->more_flags |= OPEN;
|
||||||
|
|
||||||
*minor_status = 0;
|
*minor_status = 0;
|
||||||
|
Reference in New Issue
Block a user