[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Thu Sep 10 19:34:03 UTC 2015
The branch, master has been updated
via b7eb725 smbXsrv_session: factor smbXsrv_session_add_channel() out of smbXsrv_session_create()
via 57053c5 s3:smb2_sesssetup: let smbd_smb2_reauth_generic_return() cope with channels
via 69d2af1 s3:smb2_sesssetup: let smbd_smb2_auth_generic_return() cope with channels
via 6f95bc5 s3:smb2_sesssetup: change talloc hierarchy in smbd_smb2_session_setup_gensec_done
from cf5c28d replace: Fix check for gettimeofday()
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit b7eb72529261aed822ed649651f8f4132a132e7d
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Jun 25 16:09:04 2014 +0200
smbXsrv_session: factor smbXsrv_session_add_channel() out of smbXsrv_session_create()
This allows to create more than one channel.
Pair-Programmed-With: Michael Adam <obnox at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Thu Sep 10 21:33:47 CEST 2015 on sn-devel-104
commit 57053c5cb9c9296e96918ee8a32c264285d694c1
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Jul 29 17:44:37 2015 +0200
s3:smb2_sesssetup: let smbd_smb2_reauth_generic_return() cope with channels
Pair-Programmed-With: Michael Adam <obnox at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 69d2af10d49733f40c7496dd535abd6e3092b6fa
Author: Michael Adam <obnox at samba.org>
Date: Wed Jul 29 17:42:55 2015 +0200
s3:smb2_sesssetup: let smbd_smb2_auth_generic_return() cope with channels
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Michael Adam <obnox at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 6f95bc502591bc44cd525a86bd0d97b51f78a8ad
Author: Michael Adam <obnox at samba.org>
Date: Wed Jul 29 17:07:29 2015 +0200
s3:smb2_sesssetup: change talloc hierarchy in smbd_smb2_session_setup_gensec_done
Only put session_info to the session->global context if we use it.
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Michael Adam <obnox at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/globals.h | 3 ++
source3/smbd/smb2_sesssetup.c | 29 +++++++++++----
source3/smbd/smbXsrv_session.c | 83 +++++++++++++++++++++++++++---------------
3 files changed, 78 insertions(+), 37 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index e8fb1d5..b107049 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -536,6 +536,9 @@ NTSTATUS smbXsrv_session_global_init(void);
NTSTATUS smbXsrv_session_create(struct smbXsrv_connection *conn,
NTTIME now,
struct smbXsrv_session **_session);
+NTSTATUS smbXsrv_session_add_channel(struct smbXsrv_session *session,
+ struct smbXsrv_connection *conn,
+ struct smbXsrv_channel_global0 **_c);
NTSTATUS smbXsrv_session_update(struct smbXsrv_session *session);
struct smbXsrv_channel_global0;
NTSTATUS smbXsrv_session_find_channel(const struct smbXsrv_session *session,
diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c
index 7d1aaf5..14249df 100644
--- a/source3/smbd/smb2_sesssetup.c
+++ b/source3/smbd/smb2_sesssetup.c
@@ -190,6 +190,7 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
struct smbXsrv_session *x = session;
struct smbXsrv_session_auth0 *auth = *_auth;
struct smbXsrv_connection *xconn = smb2req->xconn;
+ size_t i;
struct _derivation {
DATA_BLOB label;
DATA_BLOB context;
@@ -208,7 +209,6 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
struct _derivation *d;
DATA_BLOB p;
struct hc_sha512state sctx;
- size_t i;
preauth = talloc_move(smb2req, &auth->preauth);
@@ -439,10 +439,16 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
reload_services(smb2req->sconn, conn_snum_used, true);
session->status = NT_STATUS_OK;
- session->global->auth_session_info = session_info;
+ session->global->auth_session_info = talloc_move(session->global,
+ &session_info);
session->global->auth_session_info_seqnum += 1;
- session->global->channels[0].auth_session_info_seqnum =
- session->global->auth_session_info_seqnum;
+ for (i=0; i < session->global->num_channels; i++) {
+ struct smbXsrv_channel_global0 *_c =
+ &session->global->channels[i];
+
+ _c->auth_session_info_seqnum =
+ session->global->auth_session_info_seqnum;
+ }
session->global->auth_time = timeval_to_nttime(&smb2req->request_time);
session->global->expiration_time = gensec_expire_time(auth->gensec);
@@ -487,6 +493,7 @@ static NTSTATUS smbd_smb2_reauth_generic_return(struct smbXsrv_session *session,
NTSTATUS status;
struct smbXsrv_session *x = session;
struct smbXsrv_session_auth0 *auth = *_auth;
+ size_t i;
*_auth = NULL;
@@ -511,10 +518,16 @@ static NTSTATUS smbd_smb2_reauth_generic_return(struct smbXsrv_session *session,
session->status = NT_STATUS_OK;
TALLOC_FREE(session->global->auth_session_info);
- session->global->auth_session_info = session_info;
+ session->global->auth_session_info = talloc_move(session->global,
+ &session_info);
session->global->auth_session_info_seqnum += 1;
- session->global->channels[0].auth_session_info_seqnum =
- session->global->auth_session_info_seqnum;
+ for (i=0; i < session->global->num_channels; i++) {
+ struct smbXsrv_channel_global0 *_c =
+ &session->global->channels[i];
+
+ _c->auth_session_info_seqnum =
+ session->global->auth_session_info_seqnum;
+ }
session->global->auth_time = timeval_to_nttime(&smb2req->request_time);
session->global->expiration_time = gensec_expire_time(auth->gensec);
@@ -714,7 +727,7 @@ static void smbd_smb2_session_setup_gensec_done(struct tevent_req *subreq)
}
status = gensec_session_info(state->auth->gensec,
- state->session->global,
+ state,
&state->session_info);
if (tevent_req_nterror(req, status)) {
return;
diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c
index 9b2b521..9f8520a 100644
--- a/source3/smbd/smbXsrv_session.c
+++ b/source3/smbd/smbXsrv_session.c
@@ -1163,7 +1163,7 @@ NTSTATUS smbXsrv_session_create(struct smbXsrv_connection *conn,
void *ptr = NULL;
TDB_DATA val;
struct smbXsrv_session_global0 *global = NULL;
- struct smbXsrv_channel_global0 *channels = NULL;
+ struct smbXsrv_channel_global0 *channel = NULL;
NTSTATUS status;
if (table->local.num_sessions >= table->local.max_sessions) {
@@ -1238,36 +1238,11 @@ NTSTATUS smbXsrv_session_create(struct smbXsrv_connection *conn,
global->creation_time = now;
global->expiration_time = GENSEC_EXPIRE_TIME_INFINITY;
- global->num_channels = 1;
- channels = talloc_zero_array(global,
- struct smbXsrv_channel_global0,
- global->num_channels);
- if (channels == NULL) {
- TALLOC_FREE(session);
- return NT_STATUS_NO_MEMORY;
- }
- global->channels = channels;
-
- channels[0].server_id = messaging_server_id(conn->msg_ctx);
- channels[0].local_address = tsocket_address_string(conn->local_address,
- channels);
- if (channels[0].local_address == NULL) {
- TALLOC_FREE(session);
- return NT_STATUS_NO_MEMORY;
- }
- channels[0].remote_address = tsocket_address_string(conn->remote_address,
- channels);
- if (channels[0].remote_address == NULL) {
- TALLOC_FREE(session);
- return NT_STATUS_NO_MEMORY;
- }
- channels[0].remote_name = talloc_strdup(channels, conn->remote_hostname);
- if (channels[0].remote_name == NULL) {
+ status = smbXsrv_session_add_channel(session, conn, &channel);
+ if (!NT_STATUS_IS_OK(status)) {
TALLOC_FREE(session);
- return NT_STATUS_NO_MEMORY;
+ return status;
}
- channels[0].signing_key = data_blob_null;
- channels[0].connection = conn;
ptr = session;
val = make_tdb_data((uint8_t const *)&ptr, sizeof(ptr));
@@ -1307,6 +1282,56 @@ NTSTATUS smbXsrv_session_create(struct smbXsrv_connection *conn,
return NT_STATUS_OK;
}
+NTSTATUS smbXsrv_session_add_channel(struct smbXsrv_session *session,
+ struct smbXsrv_connection *conn,
+ struct smbXsrv_channel_global0 **_c)
+{
+ struct smbXsrv_session_global0 *global = session->global;
+ struct smbXsrv_channel_global0 *c = NULL;
+
+ if (global->num_channels > 31) {
+ /*
+ * Windows 2012 and 2012R2 allow up to 32 channels
+ */
+ return NT_STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ c = talloc_realloc(global,
+ global->channels,
+ struct smbXsrv_channel_global0,
+ global->num_channels + 1);
+ if (c == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ global->channels = c;
+
+ c = &global->channels[global->num_channels];
+ ZERO_STRUCTP(c);
+
+ c->server_id = messaging_server_id(conn->msg_ctx);
+ c->local_address = tsocket_address_string(conn->local_address,
+ global->channels);
+ if (c->local_address == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ c->remote_address = tsocket_address_string(conn->remote_address,
+ global->channels);
+ if (c->remote_address == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ c->remote_name = talloc_strdup(global->channels,
+ conn->remote_hostname);
+ if (c->remote_name == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ c->connection = conn;
+
+ global->num_channels += 1;
+
+ *_c = c;
+ return NT_STATUS_OK;
+}
+
NTSTATUS smbXsrv_session_update(struct smbXsrv_session *session)
{
struct smbXsrv_session_table *table = session->table;
--
Samba Shared Repository
More information about the samba-cvs
mailing list