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; | ||||
|     krb5_error_code kret; | ||||
|     krb5_flags ap_options; | ||||
|     krb5_creds this_cred, *cred; | ||||
|     krb5_creds this_cred, *cred = NULL; | ||||
|     krb5_data outbuf; | ||||
|     krb5_ccache ccache; | ||||
|     krb5_ccache ccache = NULL; | ||||
|     u_int32_t flags; | ||||
|     Authenticator *auth; | ||||
|     krb5_data authenticator; | ||||
|     Checksum cksum; | ||||
|     krb5_enctype enctype; | ||||
| @@ -213,6 +212,7 @@ init_auth | ||||
|     (*context_handle)->more_flags   = 0; | ||||
|     (*context_handle)->ticket       = NULL; | ||||
|     (*context_handle)->lifetime     = GSS_C_INDEFINITE; | ||||
|     (*context_handle)->order	    = NULL; | ||||
|     HEIMDAL_MUTEX_init(&(*context_handle)->ctx_id_mutex); | ||||
|  | ||||
|     kret = krb5_auth_con_init (gssapi_krb5_context, | ||||
| @@ -349,14 +349,13 @@ init_auth | ||||
|     } | ||||
|      | ||||
|     if (req_flags & GSS_C_REPLAY_FLAG) | ||||
| 	;                               /* XXX */ | ||||
| 	flags |= GSS_C_REPLAY_FLAG; | ||||
|     if (req_flags & GSS_C_SEQUENCE_FLAG) | ||||
| 	;                               /* XXX */ | ||||
| 	flags |= GSS_C_SEQUENCE_FLAG; | ||||
|     if (req_flags & GSS_C_ANON_FLAG) | ||||
| 	;                               /* XXX */ | ||||
|     flags |= GSS_C_CONF_FLAG; | ||||
|     flags |= GSS_C_INTEG_FLAG; | ||||
|     flags |= GSS_C_SEQUENCE_FLAG; | ||||
|     flags |= GSS_C_TRANS_FLAG; | ||||
|      | ||||
|     if (ret_flags) | ||||
| @@ -392,7 +391,7 @@ init_auth | ||||
| 				     enctype, | ||||
| 				     cred, | ||||
| 				     &cksum, | ||||
| 				     &auth, | ||||
| 				     NULL, | ||||
| 				     &authenticator, | ||||
| 				     KRB5_KU_AP_REQ_AUTH); | ||||
|  | ||||
| @@ -423,10 +422,21 @@ init_auth | ||||
| 	goto failure; | ||||
|  | ||||
|     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) { | ||||
| 	return GSS_S_CONTINUE_NEEDED; | ||||
|     } 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) | ||||
| 	    *time_rec = lifetime_rec; | ||||
|  | ||||
| @@ -437,15 +447,21 @@ init_auth | ||||
|  failure: | ||||
|     krb5_auth_con_free (gssapi_krb5_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) | ||||
| 	krb5_free_principal (gssapi_krb5_context, | ||||
| 			     (*context_handle)->source); | ||||
|     if((*context_handle)->target) | ||||
| 	krb5_free_principal (gssapi_krb5_context, | ||||
| 			     (*context_handle)->target); | ||||
|     if((*context_handle)->order) | ||||
| 	gssapi_msg_order_destroy(&(*context_handle)->order); | ||||
|     HEIMDAL_MUTEX_destroy(&(*context_handle)->ctx_id_mutex); | ||||
|     free (*context_handle); | ||||
|     krb5_data_free (&outbuf); | ||||
|     *context_handle = GSS_C_NO_CONTEXT; | ||||
|     return ret; | ||||
| } | ||||
| @@ -467,7 +483,7 @@ repl_mutual | ||||
|             OM_uint32 * time_rec | ||||
|            ) | ||||
| { | ||||
|     OM_uint32 ret; | ||||
|     OM_uint32 ret, seq_number; | ||||
|     krb5_error_code kret; | ||||
|     krb5_data indata; | ||||
|     krb5_ap_rep_enc_part *repl; | ||||
| @@ -501,6 +517,20 @@ repl_mutual | ||||
|     krb5_free_ap_rep_enc_part (gssapi_krb5_context, | ||||
| 			       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; | ||||
|  | ||||
|     *minor_status = 0; | ||||
|   | ||||
| @@ -184,11 +184,10 @@ init_auth | ||||
|     OM_uint32 ret = GSS_S_FAILURE; | ||||
|     krb5_error_code kret; | ||||
|     krb5_flags ap_options; | ||||
|     krb5_creds this_cred, *cred; | ||||
|     krb5_creds this_cred, *cred = NULL; | ||||
|     krb5_data outbuf; | ||||
|     krb5_ccache ccache; | ||||
|     krb5_ccache ccache = NULL; | ||||
|     u_int32_t flags; | ||||
|     Authenticator *auth; | ||||
|     krb5_data authenticator; | ||||
|     Checksum cksum; | ||||
|     krb5_enctype enctype; | ||||
| @@ -213,6 +212,7 @@ init_auth | ||||
|     (*context_handle)->more_flags   = 0; | ||||
|     (*context_handle)->ticket       = NULL; | ||||
|     (*context_handle)->lifetime     = GSS_C_INDEFINITE; | ||||
|     (*context_handle)->order	    = NULL; | ||||
|     HEIMDAL_MUTEX_init(&(*context_handle)->ctx_id_mutex); | ||||
|  | ||||
|     kret = krb5_auth_con_init (gssapi_krb5_context, | ||||
| @@ -349,14 +349,13 @@ init_auth | ||||
|     } | ||||
|      | ||||
|     if (req_flags & GSS_C_REPLAY_FLAG) | ||||
| 	;                               /* XXX */ | ||||
| 	flags |= GSS_C_REPLAY_FLAG; | ||||
|     if (req_flags & GSS_C_SEQUENCE_FLAG) | ||||
| 	;                               /* XXX */ | ||||
| 	flags |= GSS_C_SEQUENCE_FLAG; | ||||
|     if (req_flags & GSS_C_ANON_FLAG) | ||||
| 	;                               /* XXX */ | ||||
|     flags |= GSS_C_CONF_FLAG; | ||||
|     flags |= GSS_C_INTEG_FLAG; | ||||
|     flags |= GSS_C_SEQUENCE_FLAG; | ||||
|     flags |= GSS_C_TRANS_FLAG; | ||||
|      | ||||
|     if (ret_flags) | ||||
| @@ -392,7 +391,7 @@ init_auth | ||||
| 				     enctype, | ||||
| 				     cred, | ||||
| 				     &cksum, | ||||
| 				     &auth, | ||||
| 				     NULL, | ||||
| 				     &authenticator, | ||||
| 				     KRB5_KU_AP_REQ_AUTH); | ||||
|  | ||||
| @@ -423,10 +422,21 @@ init_auth | ||||
| 	goto failure; | ||||
|  | ||||
|     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) { | ||||
| 	return GSS_S_CONTINUE_NEEDED; | ||||
|     } 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) | ||||
| 	    *time_rec = lifetime_rec; | ||||
|  | ||||
| @@ -437,15 +447,21 @@ init_auth | ||||
|  failure: | ||||
|     krb5_auth_con_free (gssapi_krb5_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) | ||||
| 	krb5_free_principal (gssapi_krb5_context, | ||||
| 			     (*context_handle)->source); | ||||
|     if((*context_handle)->target) | ||||
| 	krb5_free_principal (gssapi_krb5_context, | ||||
| 			     (*context_handle)->target); | ||||
|     if((*context_handle)->order) | ||||
| 	gssapi_msg_order_destroy(&(*context_handle)->order); | ||||
|     HEIMDAL_MUTEX_destroy(&(*context_handle)->ctx_id_mutex); | ||||
|     free (*context_handle); | ||||
|     krb5_data_free (&outbuf); | ||||
|     *context_handle = GSS_C_NO_CONTEXT; | ||||
|     return ret; | ||||
| } | ||||
| @@ -467,7 +483,7 @@ repl_mutual | ||||
|             OM_uint32 * time_rec | ||||
|            ) | ||||
| { | ||||
|     OM_uint32 ret; | ||||
|     OM_uint32 ret, seq_number; | ||||
|     krb5_error_code kret; | ||||
|     krb5_data indata; | ||||
|     krb5_ap_rep_enc_part *repl; | ||||
| @@ -501,6 +517,20 @@ repl_mutual | ||||
|     krb5_free_ap_rep_enc_part (gssapi_krb5_context, | ||||
| 			       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; | ||||
|  | ||||
|     *minor_status = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand