[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Sat Aug 10 03:12:02 MDT 2013
The branch, master has been updated
via 9177a0d libcli/auth: add more const to spnego_negTokenInit->mechTypes
via f1e6014 libcli/auth: avoid possible mem leak in read_negTokenInit()
via 966faef auth/gensec: treat struct gensec_security_ops as const if possible.
via c81b6f7 auth/gensec: use 'const char * const *' for function parameters
via e81550c auth/gensec: make it possible to implement async backends
via 6a7a44d auth/gensec: avoid talloc_reference in gensec_security_mechs()
via 3e3534f auth/gensec: avoid talloc_reference in gensec_use_kerberos_mechs()
via 71c63e8 auth/gensec: introduce gensec_internal.h
via 57bcbb9 libcli/auth/schannel: remove unused schannel_position
via 4c978b6 libcli/auth/schannel: make struct schannel_state private
via e90e1b5 s4:gensec/schannel: only require librpc/gen_ndr/dcerpc.h
via 9b9ab1a s4:gensec/schannel: there's no point in having schannel_session_key()
via a07049a s4:gensec/schannel: GENSEC_FEATURE_ASYNC_REPLIES is not supported
via b510476 s4:gensec/schannel: use the correct computer_name from netlogon_creds_CredentialState
via 49f347e s4:gensec/schannel: simplify the code by using netsec_create_state()
via 4cad5dc s4:gensec/schannel: remove unused dcerpc_schannel_creds()
via 2ea3a24 s4:torture: avoid usage of dcerpc_schannel_creds()
via c014427 s4:libnet: avoid usage of dcerpc_schannel_creds()
via a36ccdc s3:dcerpc_helpers: remove unused DEBUG message of schannel_state->seq_num.
via a964309 s3:rpc_server: make use of netsec_create_state()
via af4dc30 s3:cli_pipe.c: return NO_USER_SESSION_KEY in cli_get_session_key() for schannel
via 838cb53 s3:cli_pipe: pass down creds->computer_name to NL_AUTH_MESSAGE
via e96142f s3:cli_pipe: make use of netsec_create_state()
via 3321539 libcli/auth: add netsec_create_state()
via 9f2e81a libcli/auth: maintain the sequence number for the NETLOGON SSP as 64bit
via 59b0956 auth/gensec: add gensec_security_by_auth_type()
via 45c74c8 auth/gensec: first check GENSEC_FEATURE_SESSION_KEY before returning NOT_IMPLEMENTED
via 04938cb s3:rpc_client: remove unused cli_rpc_pipe_open_ntlmssp_auth_schannel()
via 3302356 s3:rpc_client: remove netr_LogonGetCapabilities check from rpc_pipe_bind*
via eecb5ba s3:rpc_client: add netr_LogonGetCapabilities to cli_rpc_pipe_open_schannel_with_key()
via e9c8e3f s3:rpc_client: use netlogon_creds_copy before rpc_pipe_bind
via 90e28c1 s3:rpc_client: fix/add AES downgrade detection to rpc_pipe_bind_step_two_done()
via e77a64f s3:rpcclient: try to use NETLOGON_NEG_SUPPORTS_AES
via 0460063 s3:rpc_client: try to use NETLOGON_NEG_SUPPORTS_AES
via beba326 s3:libnet_join: try to use NETLOGON_NEG_SUPPORTS_AES
via d82ab705 s3:auth_domain: try to use NETLOGON_NEG_SUPPORTS_AES
via 11e0be0 s3:libsmb: remove unused cli_state->is_guestlogin
from d944841 torture: add smb2 FSCTL_[GET/SET]_COMPRESSION test
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 9177a0d1c1c92c45ef92fbda55fc6dd8aeb76b6c
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 10:46:47 2013 +0200
libcli/auth: add more const to spnego_negTokenInit->mechTypes
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
Autobuild-Date(master): Sat Aug 10 11:11:54 CEST 2013 on sn-devel-104
commit f1e60142e12deb560e3c62441fd9ff2acd086b60
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 10:43:38 2013 +0200
libcli/auth: avoid possible mem leak in read_negTokenInit()
Also add error checks.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 966faef9c61d2ec02d75fc3ccc82a61524fb77e4
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 11:20:21 2013 +0200
auth/gensec: treat struct gensec_security_ops as const if possible.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit c81b6f7448d7f945635784de645bea4f7f2e230f
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 11:10:55 2013 +0200
auth/gensec: use 'const char * const *' for function parameters
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit e81550c8117166d0fbf69ba1d3957cb950c42961
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 16:12:13 2013 +0200
auth/gensec: make it possible to implement async backends
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 6a7a44db5999af7262478eb1c186d784d6075beb
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 10:39:16 2013 +0200
auth/gensec: avoid talloc_reference in gensec_security_mechs()
We now always copy.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 3e3534f882651880093381f5a7846c0938df6501
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 10:37:26 2013 +0200
auth/gensec: avoid talloc_reference in gensec_use_kerberos_mechs()
We now always copy.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 71c63e85e7a09acb57f6b75284358f2b3b29eeed
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 07:12:01 2013 +0200
auth/gensec: introduce gensec_internal.h
We should treat most gensec related structures private.
It's a long way, but this is a start.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 57bcbb9c50f0a0252110a1e04a2883b511cd9165
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 15:42:21 2013 +0200
libcli/auth/schannel: remove unused schannel_position
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 4c978b68d9a87001f625c10421e7d4cc140b4554
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:37:54 2013 +0200
libcli/auth/schannel: make struct schannel_state private
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit e90e1b5c76db4cf589adf8856eb32e5f0d955734
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Aug 3 11:32:31 2013 +0200
s4:gensec/schannel: only require librpc/gen_ndr/dcerpc.h
We just need DCERPC_AUTH_TYPE_SCHANNEL
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 9b9ab1ae6963b3819dc2b095cbe9e1432f3459b7
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Aug 3 11:27:55 2013 +0200
s4:gensec/schannel: there's no point in having schannel_session_key()
gensec_session_key() will return NT_STATUS_NO_USER_SESSION_KEY
before calling schannel_session_key(), as we don't provide
GENSEC_FEATURE_SESSION_KEY.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a07049a839729e29ca888bae353cd37fd6238486
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Aug 3 11:21:32 2013 +0200
s4:gensec/schannel: GENSEC_FEATURE_ASYNC_REPLIES is not supported
There's a sequence number attached to the connection,
which needs to be incremented with each message...
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit b5104768225ae0308aa3f22f8d9bca389ef3cb3a
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:25:20 2013 +0200
s4:gensec/schannel: use the correct computer_name from netlogon_creds_CredentialState
We need to use the same computer_name we used in the netr_Authenticate3
request.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 49f347eb11bd12a3f25b0fcb8ba36d4a36594868
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:04:07 2013 +0200
s4:gensec/schannel: simplify the code by using netsec_create_state()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 4cad5dcb6d5e49cc9bb1aa4ca454f369e00e8c6f
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 12:31:41 2013 +0200
s4:gensec/schannel: remove unused dcerpc_schannel_creds()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 2ea3a24dced0814100e352bbbca124011be73602
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 10:08:54 2013 +0200
s4:torture: avoid usage of dcerpc_schannel_creds()
We use cli_credentials_get_netlogon_creds() which returns the same value.
dcerpc_schannel_creds() is a layer violation.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit c0144273af8f0956a05d102113c40cec77069f7a
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 10:08:54 2013 +0200
s4:libnet: avoid usage of dcerpc_schannel_creds()
We use cli_credentials_get_netlogon_creds() which returns the same value.
dcerpc_schannel_creds() is a layer violation.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a36ccdc83edb7437dd00601c459421286fd79db4
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:36:30 2013 +0200
s3:dcerpc_helpers: remove unused DEBUG message of schannel_state->seq_num.
This is a layer violation and not needed anymore as we know
how the seqnum handling works now.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit a964309bf7631f4f6953e0d6556f8ed8e5300dcc
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:33:37 2013 +0200
s3:rpc_server: make use of netsec_create_state()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit af4dc306846a30a5a1201306cc2cbf4d494e16e7
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Aug 3 08:50:54 2013 +0200
s3:cli_pipe.c: return NO_USER_SESSION_KEY in cli_get_session_key() for schannel
SCHANNEL connections don't have a user session key,
they're like anonymous connections.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 838cb539621ef19cac6badb4b10678dcc3a6f68a
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:28:59 2013 +0200
s3:cli_pipe: pass down creds->computer_name to NL_AUTH_MESSAGE
We need to use the same computer_name value as in the netr_Authenticate3()
request.
We abuse cli->auth->user_name to pass the value down.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit e96142fc439efb7c90719f9c387778c4218ae637
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 13:28:11 2013 +0200
s3:cli_pipe: make use of netsec_create_state()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 33215398f32c76f4b8ada7b547c6d0741cb2ac16
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 2 12:53:42 2013 +0200
libcli/auth: add netsec_create_state()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 9f2e81ae02549369db49c05edf7071612a03a8b8
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Apr 24 12:33:28 2013 +0200
libcli/auth: maintain the sequence number for the NETLOGON SSP as 64bit
See [MS-NPRC] 3.3.4.2 The Netlogon Signature Token.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 59b09564a7edac8dc241269587146342244ce58b
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Aug 3 11:43:58 2013 +0200
auth/gensec: add gensec_security_by_auth_type()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 45c74c8084d2db14fef6a79cd98068be2ab73f30
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Aug 3 11:26:13 2013 +0200
auth/gensec: first check GENSEC_FEATURE_SESSION_KEY before returning NOT_IMPLEMENTED
Preferr NT_STATUS_NO_USER_SESSION_KEY as return value of gensec_session_key().
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 04938cbeecc777f7b799a11f1ca0461b351d968a
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Apr 25 19:33:28 2013 +0200
s3:rpc_client: remove unused cli_rpc_pipe_open_ntlmssp_auth_schannel()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 3302356226cca474f0afab9a129220241c16663f
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Apr 25 18:30:36 2013 +0200
s3:rpc_client: remove netr_LogonGetCapabilities check from rpc_pipe_bind*
It's done in the caller now.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit eecb5bafba5b362d4fdf33d6a2a32e4ee56f30a4
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Apr 25 19:34:13 2013 +0200
s3:rpc_client: add netr_LogonGetCapabilities to cli_rpc_pipe_open_schannel_with_key()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit e9c8e3fb92143525f846523e446e2213e5b55d9d
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Apr 25 19:45:52 2013 +0200
s3:rpc_client: use netlogon_creds_copy before rpc_pipe_bind
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 90e28c1825b2c48714d7b34fdb57d3878116d07e
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Apr 25 19:57:09 2013 +0200
s3:rpc_client: fix/add AES downgrade detection to rpc_pipe_bind_step_two_done()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit e77a64f505fc43628e487e832033d0cd8ec4de8e
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jun 15 09:41:52 2013 +0200
s3:rpcclient: try to use NETLOGON_NEG_SUPPORTS_AES
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 04600634b3e761d7c56f699fd4ba80b4cd2926a1
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jun 15 09:41:52 2013 +0200
s3:rpc_client: try to use NETLOGON_NEG_SUPPORTS_AES
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit beba32619a91977543f882432fd08acc9de78fd3
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jun 15 09:41:52 2013 +0200
s3:libnet_join: try to use NETLOGON_NEG_SUPPORTS_AES
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit d82ab70579ff2bcb69f997068482b198f321d1ef
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jun 15 09:41:52 2013 +0200
s3:auth_domain: try to use NETLOGON_NEG_SUPPORTS_AES
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 11e0be0e72cfc4bc65ba2b0ffd10cbae3ad69b2d
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Aug 5 20:26:54 2013 +0200
s3:libsmb: remove unused cli_state->is_guestlogin
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
auth/gensec/gensec.c | 210 +++++++++++++++++------
auth/gensec/gensec.h | 119 ++-----------
auth/gensec/gensec_internal.h | 134 ++++++++++++++
auth/gensec/gensec_start.c | 142 +++++++++------
auth/gensec/gensec_util.c | 1 +
auth/gensec/spnego.c | 11 +-
auth/ntlmssp/gensec_ntlmssp.c | 1 +
auth/ntlmssp/gensec_ntlmssp_server.c | 1 +
auth/ntlmssp/ntlmssp.c | 1 +
auth/ntlmssp/ntlmssp_client.c | 1 +
auth/ntlmssp/ntlmssp_server.c | 1 +
libcli/auth/schannel.h | 13 --
libcli/auth/schannel_proto.h | 3 +
libcli/auth/schannel_sign.c | 45 +++++-
libcli/auth/spnego.h | 2 +-
libcli/auth/spnego_parse.c | 36 +++-
libcli/auth/spnego_proto.h | 2 +-
source3/auth/auth_domain.c | 3 +-
source3/auth/auth_generic.c | 15 +-
source3/include/client.h | 1 -
source3/libads/authdata.c | 12 +-
source3/libnet/libnet_join.c | 3 +-
source3/librpc/crypto/gse.c | 1 +
source3/librpc/rpc/dcerpc_helpers.c | 3 -
source3/libsmb/auth_generic.c | 15 +-
source3/libsmb/cliconnect.c | 5 -
source3/libsmb/ntlmssp_wrap.c | 1 +
source3/rpc_client/cli_netlogon.c | 3 +-
source3/rpc_client/cli_pipe.c | 301 ++++++++++++-------------------
source3/rpc_client/cli_pipe.h | 9 -
source3/rpc_client/cli_pipe_schannel.c | 82 +---------
source3/rpc_server/srv_pipe.c | 12 +-
source3/rpcclient/cmd_netlogon.c | 3 +-
source3/rpcclient/rpcclient.c | 3 +-
source3/utils/ntlm_auth.c | 25 ++--
source4/auth/gensec/cyrus_sasl.c | 1 +
source4/auth/gensec/gensec_gssapi.c | 1 +
source4/auth/gensec/gensec_krb5.c | 1 +
source4/auth/gensec/pygensec.c | 1 +
source4/auth/gensec/schannel.c | 141 ++++-----------
source4/auth/gensec/schannel.h | 26 ---
source4/ldap_server/ldap_backend.c | 5 +-
source4/libcli/ldap/ldap_bind.c | 1 +
source4/libnet/libnet_samsync.c | 7 +-
source4/torture/auth/ntlmssp.c | 1 +
source4/torture/rpc/samlogon.c | 5 +-
source4/torture/rpc/samr.c | 6 +-
source4/torture/rpc/samsync.c | 11 +-
source4/torture/rpc/schannel.c | 6 +-
source4/utils/ntlm_auth.c | 1 +
50 files changed, 705 insertions(+), 729 deletions(-)
create mode 100644 auth/gensec/gensec_internal.h
delete mode 100644 source4/auth/gensec/schannel.h
Changeset truncated at 500 lines:
diff --git a/auth/gensec/gensec.c b/auth/gensec/gensec.c
index ea62861..abcbcb9 100644
--- a/auth/gensec/gensec.c
+++ b/auth/gensec/gensec.c
@@ -26,6 +26,7 @@
#include "lib/tsocket/tsocket.h"
#include "lib/util/tevent_ntstatus.h"
#include "auth/gensec/gensec.h"
+#include "auth/gensec/gensec_internal.h"
#include "librpc/rpc/dcerpc.h"
/*
@@ -155,13 +156,14 @@ _PUBLIC_ NTSTATUS gensec_session_key(struct gensec_security *gensec_security,
TALLOC_CTX *mem_ctx,
DATA_BLOB *session_key)
{
- if (!gensec_security->ops->session_key) {
- return NT_STATUS_NOT_IMPLEMENTED;
- }
if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SESSION_KEY)) {
return NT_STATUS_NO_USER_SESSION_KEY;
}
+ if (!gensec_security->ops->session_key) {
+ return NT_STATUS_NOT_IMPLEMENTED;
+ }
+
return gensec_security->ops->session_key(gensec_security, mem_ctx, session_key);
}
@@ -216,61 +218,92 @@ _PUBLIC_ NTSTATUS gensec_update(struct gensec_security *gensec_security, TALLOC_
const DATA_BLOB in, DATA_BLOB *out)
{
NTSTATUS status;
+ const struct gensec_security_ops *ops = gensec_security->ops;
+ TALLOC_CTX *frame = NULL;
+ struct tevent_req *subreq = NULL;
+ bool ok;
- status = gensec_security->ops->update(gensec_security, out_mem_ctx,
- ev, in, out);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
+ if (ops->update_send == NULL) {
- /*
- * Because callers using the
- * gensec_start_mech_by_auth_type() never call
- * gensec_want_feature(), it isn't sensible for them
- * to have to call gensec_have_feature() manually, and
- * these are not points of negotiation, but are
- * asserted by the client
- */
- switch (gensec_security->dcerpc_auth_level) {
- case DCERPC_AUTH_LEVEL_INTEGRITY:
- if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SIGN)) {
- DEBUG(0,("Did not manage to negotiate mandetory feature "
- "SIGN for dcerpc auth_level %u\n",
- gensec_security->dcerpc_auth_level));
- return NT_STATUS_ACCESS_DENIED;
- }
- break;
- case DCERPC_AUTH_LEVEL_PRIVACY:
- if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SIGN)) {
- DEBUG(0,("Did not manage to negotiate mandetory feature "
- "SIGN for dcerpc auth_level %u\n",
- gensec_security->dcerpc_auth_level));
- return NT_STATUS_ACCESS_DENIED;
+ status = ops->update(gensec_security, out_mem_ctx,
+ ev, in, out);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
}
- if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SEAL)) {
- DEBUG(0,("Did not manage to negotiate mandetory feature "
- "SEAL for dcerpc auth_level %u\n",
- gensec_security->dcerpc_auth_level));
- return NT_STATUS_ACCESS_DENIED;
+
+ /*
+ * Because callers using the
+ * gensec_start_mech_by_auth_type() never call
+ * gensec_want_feature(), it isn't sensible for them
+ * to have to call gensec_have_feature() manually, and
+ * these are not points of negotiation, but are
+ * asserted by the client
+ */
+ switch (gensec_security->dcerpc_auth_level) {
+ case DCERPC_AUTH_LEVEL_INTEGRITY:
+ if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SIGN)) {
+ DEBUG(0,("Did not manage to negotiate mandetory feature "
+ "SIGN for dcerpc auth_level %u\n",
+ gensec_security->dcerpc_auth_level));
+ return NT_STATUS_ACCESS_DENIED;
+ }
+ break;
+ case DCERPC_AUTH_LEVEL_PRIVACY:
+ if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SIGN)) {
+ DEBUG(0,("Did not manage to negotiate mandetory feature "
+ "SIGN for dcerpc auth_level %u\n",
+ gensec_security->dcerpc_auth_level));
+ return NT_STATUS_ACCESS_DENIED;
+ }
+ if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SEAL)) {
+ DEBUG(0,("Did not manage to negotiate mandetory feature "
+ "SEAL for dcerpc auth_level %u\n",
+ gensec_security->dcerpc_auth_level));
+ return NT_STATUS_ACCESS_DENIED;
+ }
+ break;
+ default:
+ break;
}
- break;
- default:
- break;
+
+ return NT_STATUS_OK;
}
- return NT_STATUS_OK;
+ frame = talloc_stackframe();
+
+ subreq = ops->update_send(frame, ev, gensec_security, in);
+ if (subreq == NULL) {
+ goto fail;
+ }
+ ok = tevent_req_poll_ntstatus(subreq, ev, &status);
+ if (!ok) {
+ goto fail;
+ }
+ status = ops->update_recv(subreq, out_mem_ctx, out);
+ fail:
+ TALLOC_FREE(frame);
+ return status;
}
struct gensec_update_state {
- struct tevent_immediate *im;
+ const struct gensec_security_ops *ops;
+ struct tevent_req *subreq;
struct gensec_security *gensec_security;
- DATA_BLOB in;
DATA_BLOB out;
+
+ /*
+ * only for sync backends, we should remove this
+ * once all backends are async.
+ */
+ struct tevent_immediate *im;
+ DATA_BLOB in;
};
static void gensec_update_async_trigger(struct tevent_context *ctx,
struct tevent_immediate *im,
void *private_data);
+static void gensec_update_subreq_done(struct tevent_req *subreq);
+
/**
* Next state function for the GENSEC state machine async version
*
@@ -296,17 +329,31 @@ _PUBLIC_ struct tevent_req *gensec_update_send(TALLOC_CTX *mem_ctx,
return NULL;
}
- state->gensec_security = gensec_security;
- state->in = in;
- state->out = data_blob(NULL, 0);
- state->im = tevent_create_immediate(state);
- if (tevent_req_nomem(state->im, req)) {
+ state->ops = gensec_security->ops;
+ state->gensec_security = gensec_security;
+
+ if (state->ops->update_send == NULL) {
+ state->in = in;
+ state->im = tevent_create_immediate(state);
+ if (tevent_req_nomem(state->im, req)) {
+ return tevent_req_post(req, ev);
+ }
+
+ tevent_schedule_immediate(state->im, ev,
+ gensec_update_async_trigger,
+ req);
+
+ return req;
+ }
+
+ state->subreq = state->ops->update_send(state, ev, gensec_security, in);
+ if (tevent_req_nomem(state->subreq, req)) {
return tevent_req_post(req, ev);
}
- tevent_schedule_immediate(state->im, ev,
- gensec_update_async_trigger,
- req);
+ tevent_req_set_callback(state->subreq,
+ gensec_update_subreq_done,
+ req);
return req;
}
@@ -321,12 +368,71 @@ static void gensec_update_async_trigger(struct tevent_context *ctx,
tevent_req_data(req, struct gensec_update_state);
NTSTATUS status;
- status = gensec_update(state->gensec_security, state, ctx,
- state->in, &state->out);
+ status = state->ops->update(state->gensec_security, state, ctx,
+ state->in, &state->out);
+ if (tevent_req_nterror(req, status)) {
+ return;
+ }
+
+ tevent_req_done(req);
+}
+
+static void gensec_update_subreq_done(struct tevent_req *subreq)
+{
+ struct tevent_req *req =
+ tevent_req_callback_data(subreq,
+ struct tevent_req);
+ struct gensec_update_state *state =
+ tevent_req_data(req,
+ struct gensec_update_state);
+ NTSTATUS status;
+
+ state->subreq = NULL;
+
+ status = state->ops->update_recv(subreq, state, &state->out);
+ TALLOC_FREE(subreq);
if (tevent_req_nterror(req, status)) {
return;
}
+ /*
+ * Because callers using the
+ * gensec_start_mech_by_authtype() never call
+ * gensec_want_feature(), it isn't sensible for them
+ * to have to call gensec_have_feature() manually, and
+ * these are not points of negotiation, but are
+ * asserted by the client
+ */
+ switch (state->gensec_security->dcerpc_auth_level) {
+ case DCERPC_AUTH_LEVEL_INTEGRITY:
+ if (!gensec_have_feature(state->gensec_security, GENSEC_FEATURE_SIGN)) {
+ DEBUG(0,("Did not manage to negotiate mandetory feature "
+ "SIGN for dcerpc auth_level %u\n",
+ state->gensec_security->dcerpc_auth_level));
+ tevent_req_nterror(req, NT_STATUS_ACCESS_DENIED);
+ return;
+ }
+ break;
+ case DCERPC_AUTH_LEVEL_PRIVACY:
+ if (!gensec_have_feature(state->gensec_security, GENSEC_FEATURE_SIGN)) {
+ DEBUG(0,("Did not manage to negotiate mandetory feature "
+ "SIGN for dcerpc auth_level %u\n",
+ state->gensec_security->dcerpc_auth_level));
+ tevent_req_nterror(req, NT_STATUS_ACCESS_DENIED);
+ return;
+ }
+ if (!gensec_have_feature(state->gensec_security, GENSEC_FEATURE_SEAL)) {
+ DEBUG(0,("Did not manage to negotiate mandetory feature "
+ "SEAL for dcerpc auth_level %u\n",
+ state->gensec_security->dcerpc_auth_level));
+ tevent_req_nterror(req, NT_STATUS_ACCESS_DENIED);
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+
tevent_req_done(req);
}
diff --git a/auth/gensec/gensec.h b/auth/gensec/gensec.h
index 396a16d..ac1fadf 100644
--- a/auth/gensec/gensec.h
+++ b/auth/gensec/gensec.h
@@ -76,6 +76,7 @@ struct gensec_settings;
struct tevent_context;
struct tevent_req;
struct smb_krb5_context;
+struct tsocket_address;
struct gensec_settings {
struct loadparm_context *lp_ctx;
@@ -84,7 +85,7 @@ struct gensec_settings {
/* this allows callers to specify a specific set of ops that
* should be used, rather than those loaded by the plugin
* mechanism */
- struct gensec_security_ops **backends;
+ const struct gensec_security_ops * const *backends;
/* To fill in our own name in the NTLMSSP server */
const char *server_dns_domain;
@@ -93,106 +94,13 @@ struct gensec_settings {
const char *server_netbios_name;
};
-struct gensec_security_ops {
- const char *name;
- const char *sasl_name;
- uint8_t auth_type; /* 0 if not offered on DCE-RPC */
- const char **oid; /* NULL if not offered by SPNEGO */
- NTSTATUS (*client_start)(struct gensec_security *gensec_security);
- NTSTATUS (*server_start)(struct gensec_security *gensec_security);
- /**
- Determine if a packet has the right 'magic' for this mechanism
- */
- NTSTATUS (*magic)(struct gensec_security *gensec_security,
- const DATA_BLOB *first_packet);
- NTSTATUS (*update)(struct gensec_security *gensec_security, TALLOC_CTX *out_mem_ctx,
- struct tevent_context *ev,
- const DATA_BLOB in, DATA_BLOB *out);
- NTSTATUS (*seal_packet)(struct gensec_security *gensec_security, TALLOC_CTX *sig_mem_ctx,
- uint8_t *data, size_t length,
- const uint8_t *whole_pdu, size_t pdu_length,
- DATA_BLOB *sig);
- NTSTATUS (*sign_packet)(struct gensec_security *gensec_security, TALLOC_CTX *sig_mem_ctx,
- const uint8_t *data, size_t length,
- const uint8_t *whole_pdu, size_t pdu_length,
- DATA_BLOB *sig);
- size_t (*sig_size)(struct gensec_security *gensec_security, size_t data_size);
- size_t (*max_input_size)(struct gensec_security *gensec_security);
- size_t (*max_wrapped_size)(struct gensec_security *gensec_security);
- NTSTATUS (*check_packet)(struct gensec_security *gensec_security,
- const uint8_t *data, size_t length,
- const uint8_t *whole_pdu, size_t pdu_length,
- const DATA_BLOB *sig);
- NTSTATUS (*unseal_packet)(struct gensec_security *gensec_security,
- uint8_t *data, size_t length,
- const uint8_t *whole_pdu, size_t pdu_length,
- const DATA_BLOB *sig);
- NTSTATUS (*wrap)(struct gensec_security *gensec_security,
- TALLOC_CTX *mem_ctx,
- const DATA_BLOB *in,
- DATA_BLOB *out);
- NTSTATUS (*unwrap)(struct gensec_security *gensec_security,
- TALLOC_CTX *mem_ctx,
- const DATA_BLOB *in,
- DATA_BLOB *out);
- NTSTATUS (*wrap_packets)(struct gensec_security *gensec_security,
- TALLOC_CTX *mem_ctx,
- const DATA_BLOB *in,
- DATA_BLOB *out,
- size_t *len_processed);
- NTSTATUS (*unwrap_packets)(struct gensec_security *gensec_security,
- TALLOC_CTX *mem_ctx,
- const DATA_BLOB *in,
- DATA_BLOB *out,
- size_t *len_processed);
- NTSTATUS (*packet_full_request)(struct gensec_security *gensec_security,
- DATA_BLOB blob, size_t *size);
- NTSTATUS (*session_key)(struct gensec_security *gensec_security, TALLOC_CTX *mem_ctx,
- DATA_BLOB *session_key);
- NTSTATUS (*session_info)(struct gensec_security *gensec_security, TALLOC_CTX *mem_ctx,
- struct auth_session_info **session_info);
- void (*want_feature)(struct gensec_security *gensec_security,
- uint32_t feature);
- bool (*have_feature)(struct gensec_security *gensec_security,
- uint32_t feature);
- NTTIME (*expire_time)(struct gensec_security *gensec_security);
- bool enabled;
- bool kerberos;
- enum gensec_priority priority;
-};
-
-struct gensec_security_ops_wrapper {
- const struct gensec_security_ops *op;
- const char *oid;
-};
+struct gensec_security_ops;
+struct gensec_security_ops_wrapper;
#define GENSEC_INTERFACE_VERSION 0
-struct gensec_security {
- const struct gensec_security_ops *ops;
- void *private_data;
- struct cli_credentials *credentials;
- struct gensec_target target;
- enum gensec_role gensec_role;
- bool subcontext;
- uint32_t want_features;
- uint32_t max_update_size;
- uint8_t dcerpc_auth_level;
- struct tsocket_address *local_addr, *remote_addr;
- struct gensec_settings *settings;
-
- /* When we are a server, this may be filled in to provide an
- * NTLM authentication backend, and user lookup (such as if no
- * PAC is found) */
- struct auth4_context *auth_context;
-};
-
/* this structure is used by backends to determine the size of some critical types */
-struct gensec_critical_sizes {
- int interface_version;
- int sizeof_gensec_security_ops;
- int sizeof_gensec_security;
-};
+struct gensec_critical_sizes;
const struct gensec_critical_sizes *gensec_interface_version(void);
/* Socket wrapper */
@@ -268,12 +176,15 @@ const struct gensec_security_ops *gensec_security_by_oid(struct gensec_security
const char *oid_string);
const struct gensec_security_ops *gensec_security_by_sasl_name(struct gensec_security *gensec_security,
const char *sasl_name);
-struct gensec_security_ops **gensec_security_mechs(struct gensec_security *gensec_security,
+const struct gensec_security_ops *gensec_security_by_auth_type(
+ struct gensec_security *gensec_security,
+ uint32_t auth_type);
+const struct gensec_security_ops **gensec_security_mechs(struct gensec_security *gensec_security,
TALLOC_CTX *mem_ctx);
const struct gensec_security_ops_wrapper *gensec_security_by_oid_list(
struct gensec_security *gensec_security,
TALLOC_CTX *mem_ctx,
- const char **oid_strings,
+ const char * const *oid_strings,
const char *skip);
const char **gensec_security_oids(struct gensec_security *gensec_security,
TALLOC_CTX *mem_ctx,
@@ -332,11 +243,11 @@ NTSTATUS gensec_wrap(struct gensec_security *gensec_security,
const DATA_BLOB *in,
DATA_BLOB *out);
-struct gensec_security_ops **gensec_security_all(void);
-bool gensec_security_ops_enabled(struct gensec_security_ops *ops, struct gensec_security *security);
-struct gensec_security_ops **gensec_use_kerberos_mechs(TALLOC_CTX *mem_ctx,
- struct gensec_security_ops **old_gensec_list,
- struct cli_credentials *creds);
+const struct gensec_security_ops * const *gensec_security_all(void);
+bool gensec_security_ops_enabled(const struct gensec_security_ops *ops, struct gensec_security *security);
+const struct gensec_security_ops **gensec_use_kerberos_mechs(TALLOC_CTX *mem_ctx,
+ const struct gensec_security_ops * const *old_gensec_list,
+ struct cli_credentials *creds);
NTSTATUS gensec_start_mech_by_sasl_name(struct gensec_security *gensec_security,
const char *sasl_name);
diff --git a/auth/gensec/gensec_internal.h b/auth/gensec/gensec_internal.h
new file mode 100644
index 0000000..c04164a
--- /dev/null
+++ b/auth/gensec/gensec_internal.h
@@ -0,0 +1,134 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Generic Authentication Interface
+
+ Copyright (C) Andrew Tridgell 2003
+ Copyright (C) Andrew Bartlett <abartlet at samba.org> 2004-2005
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __GENSEC_INTERNAL_H__
+#define __GENSEC_INTERNAL_H__
+
+struct gensec_security;
+
+struct gensec_security_ops {
+ const char *name;
+ const char *sasl_name;
+ uint8_t auth_type; /* 0 if not offered on DCE-RPC */
+ const char **oid; /* NULL if not offered by SPNEGO */
+ NTSTATUS (*client_start)(struct gensec_security *gensec_security);
+ NTSTATUS (*server_start)(struct gensec_security *gensec_security);
+ /**
+ Determine if a packet has the right 'magic' for this mechanism
+ */
+ NTSTATUS (*magic)(struct gensec_security *gensec_security,
+ const DATA_BLOB *first_packet);
+ NTSTATUS (*update)(struct gensec_security *gensec_security, TALLOC_CTX *out_mem_ctx,
+ struct tevent_context *ev,
+ const DATA_BLOB in, DATA_BLOB *out);
+ struct tevent_req *(*update_send)(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct gensec_security *gensec_security,
+ const DATA_BLOB in);
+ NTSTATUS (*update_recv)(struct tevent_req *req,
+ TALLOC_CTX *out_mem_ctx,
+ DATA_BLOB *out);
+ NTSTATUS (*seal_packet)(struct gensec_security *gensec_security, TALLOC_CTX *sig_mem_ctx,
+ uint8_t *data, size_t length,
+ const uint8_t *whole_pdu, size_t pdu_length,
--
Samba Shared Repository
More information about the samba-cvs
mailing list