diff options
author | Uri Simchoni <uri@samba.org> | 2016-04-18 23:08:38 +0300 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2016-04-26 12:00:48 +0200 |
commit | aec25b0cc232286c3e4d85de7f00483c09f7c66e (patch) | |
tree | f624f80a36b7a7dfbf4be4931d5e4630383eeb2f | |
parent | 9729bdc58f40b413f97af1b9dfe25d641a371e62 (diff) | |
download | samba-aec25b0cc232286c3e4d85de7f00483c09f7c66e.tar.gz |
libads: record session expiry for spnego sasl binds
With the move to gensec-based spnego, record the session expiry
in tgs_expire, so that libads users such as winbindd can use this info
to determine how long to keep the connection.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11852
Signed-off-by: Uri Simchoni <uri@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Autobuild-User(master): Uri Simchoni <uri@samba.org>
Autobuild-Date(master): Tue Apr 19 16:53:57 CEST 2016 on sn-devel-144
(cherry picked from commit 34482eb7cc3d74c8de510309332e8ab176d0f3c0)
Autobuild-User(v4-2-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-2-test): Tue Apr 26 12:00:48 CEST 2016 on sn-devel-104
-rw-r--r-- | source3/libads/sasl.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c index 22aa9cf4bb7..b8d4527a15f 100644 --- a/source3/libads/sasl.c +++ b/source3/libads/sasl.c @@ -134,6 +134,7 @@ static ADS_STATUS ads_sasl_spnego_gensec_bind(ADS_STRUCT *ads, struct auth_generic_state *auth_generic_state; bool use_spnego_principal = lp_client_use_spnego_principal(); const char *sasl_list[] = { sasl, NULL }; + NTTIME end_nt_time; nt_status = auth_generic_client_prepare(NULL, &auth_generic_state); if (!NT_STATUS_IS_OK(nt_status)) { @@ -307,6 +308,14 @@ static ADS_STATUS ads_sasl_spnego_gensec_bind(ADS_STRUCT *ads, } } + ads->auth.tgs_expire = LONG_MAX; + end_nt_time = gensec_expire_time(auth_generic_state->gensec_security); + if (end_nt_time != GENSEC_EXPIRE_TIME_INFINITY) { + struct timeval tv; + nttime_to_timeval(&tv, end_nt_time); + ads->auth.tgs_expire = tv.tv_sec; + } + if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) { size_t max_wrapped = gensec_max_wrapped_size(auth_generic_state->gensec_security); ads->ldap.out.max_unwrapped = gensec_max_input_size(auth_generic_state->gensec_security); |