From: Stefan Metzmacher Date: Thu, 26 Jan 2012 16:32:12 +0000 (+0100) Subject: s3:gse: remember the expire time X-Git-Tag: samba-4.0.0alpha21~109 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9ec866fb6cdb672b2a7cb882510e7abd80679491;p=thirdparty%2Fsamba.git s3:gse: remember the expire time metze --- diff --git a/source3/librpc/crypto/gse.c b/source3/librpc/crypto/gse.c index a9c9c474108..64ae97720fe 100644 --- a/source3/librpc/crypto/gse.c +++ b/source3/librpc/crypto/gse.c @@ -44,6 +44,8 @@ struct gse_context { gss_cred_id_t delegated_cred_handle; + NTTIME expire_time; + /* gensec_gse only */ krb5_context k5ctx; krb5_ccache ccache; @@ -290,6 +292,8 @@ static NTSTATUS gse_get_client_auth_token(TALLOC_CTX *mem_ctx, gss_buffer_desc out_data; DATA_BLOB blob = data_blob_null; NTSTATUS status; + OM_uint32 time_rec = 0; + struct timeval tv; in_data.value = token_in->data; in_data.length = token_in->length; @@ -302,10 +306,13 @@ static NTSTATUS gse_get_client_auth_token(TALLOC_CTX *mem_ctx, gse_ctx->gss_want_flags, 0, GSS_C_NO_CHANNEL_BINDINGS, &in_data, NULL, &out_data, - &gse_ctx->gss_got_flags, NULL); + &gse_ctx->gss_got_flags, &time_rec); switch (gss_maj) { case GSS_S_COMPLETE: /* we are done with it */ + tv = timeval_current_ofs(time_rec, 0); + gse_ctx->expire_time = timeval_to_nttime(&tv); + status = NT_STATUS_OK; break; case GSS_S_CONTINUE_NEEDED: @@ -439,6 +446,8 @@ static NTSTATUS gse_get_server_auth_token(TALLOC_CTX *mem_ctx, gss_buffer_desc out_data; DATA_BLOB blob = data_blob_null; NTSTATUS status; + OM_uint32 time_rec = 0; + struct timeval tv; in_data.value = token_in->data; in_data.length = token_in->length; @@ -451,11 +460,15 @@ static NTSTATUS gse_get_server_auth_token(TALLOC_CTX *mem_ctx, &gse_ctx->client_name, &gse_ctx->ret_mech, &out_data, - &gse_ctx->gss_got_flags, NULL, + &gse_ctx->gss_got_flags, + &time_rec, &gse_ctx->delegated_cred_handle); switch (gss_maj) { case GSS_S_COMPLETE: /* we are done with it */ + tv = timeval_current_ofs(time_rec, 0); + gse_ctx->expire_time = timeval_to_nttime(&tv); + status = NT_STATUS_OK; break; case GSS_S_CONTINUE_NEEDED: