[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Mon Feb 25 20:08:01 UTC 2019


The branch, master has been updated
       via  e8e9677154c libcli: Pass buf/len to smb2_negotiate_context_add
       via  26f18b9bd71 libsmb: Resolve special _recv handling in cli_ntcreate
       via  2bd6f57c659 smbd: Align integer types
       via  d9f9a73dc5e torture: Use GUID_zero()
      from  3f1a13a94a7 s3: smbd: filenames - ensure we replace the missing '/' if we error in an intermediate POSIX path.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit e8e9677154c4ab67e4e9a9dca499121ae63a03bd
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Feb 11 09:03:39 2019 +0100

    libcli: Pass buf/len to smb2_negotiate_context_add
    
    Every caller did a data_blob_const() right before calling
    smb2_negotiate_context_add(). Avoid that.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Mon Feb 25 21:07:22 CET 2019 on sn-devel-144

commit 26f18b9bd71bce7f862cda615c2ef432da5c2aa9
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Feb 15 21:22:18 2019 +0100

    libsmb: Resolve special _recv handling in cli_ntcreate
    
    cli_smb2_create_fnum_recv will gain output create blobs soon and thus
    differ from the NT1 function.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 2bd6f57c659de324dd43deeb18315c1618dc2659
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Feb 11 09:02:39 2019 +0100

    smbd: Align integer types
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit d9f9a73dc5e727db292bab3dde5fb6701292bac3
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Feb 8 17:26:04 2019 +0100

    torture: Use GUID_zero()
    
    10 lines less...
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 libcli/smb/smb2_negotiate_context.c | 19 +++++++++---------
 libcli/smb/smb2_negotiate_context.h |  7 +++++--
 libcli/smb/smbXcli_base.c           | 10 ++++------
 source3/libsmb/clifile.c            | 40 ++++++++++++++++++++++++++-----------
 source3/smbd/smb2_negprot.c         | 22 +++++++++++---------
 source4/torture/drs/rpc/dssync.c    | 12 ++++-------
 source4/torture/rpc/drsuapi.c       | 18 ++++++-----------
 7 files changed, 70 insertions(+), 58 deletions(-)


Changeset truncated at 500 lines:

diff --git a/libcli/smb/smb2_negotiate_context.c b/libcli/smb/smb2_negotiate_context.c
index 61c9e557e33..ac4a08e8910 100644
--- a/libcli/smb/smb2_negotiate_context.c
+++ b/libcli/smb/smb2_negotiate_context.c
@@ -39,7 +39,6 @@ NTSTATUS smb2_negotiate_context_parse(TALLOC_CTX *mem_ctx, const DATA_BLOB buffe
 	while (true) {
 		uint16_t data_length;
 		uint16_t type;
-		DATA_BLOB b;
 		NTSTATUS status;
 		size_t pad;
 		uint32_t next_offset;
@@ -58,8 +57,8 @@ NTSTATUS smb2_negotiate_context_parse(TALLOC_CTX *mem_ctx, const DATA_BLOB buffe
 			return NT_STATUS_INVALID_PARAMETER;
 		}
 
-		b = data_blob_const(data+0x08, data_length);
-		status = smb2_negotiate_context_add(mem_ctx, contexts, type, b);
+		status = smb2_negotiate_context_add(
+			mem_ctx, contexts, type, data+0x08, data_length);
 		if (!NT_STATUS_IS_OK(status)) {
 			return status;
 		}
@@ -148,8 +147,11 @@ NTSTATUS smb2_negotiate_context_push(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer,
 	return NT_STATUS_OK;
 }
 
-NTSTATUS smb2_negotiate_context_add(TALLOC_CTX *mem_ctx, struct smb2_negotiate_contexts *c,
-				    uint16_t type, DATA_BLOB data)
+NTSTATUS smb2_negotiate_context_add(TALLOC_CTX *mem_ctx,
+				    struct smb2_negotiate_contexts *c,
+				    uint16_t type,
+				    const uint8_t *buf,
+				    size_t buflen)
 {
 	struct smb2_negotiate_context *array;
 
@@ -161,10 +163,9 @@ NTSTATUS smb2_negotiate_context_add(TALLOC_CTX *mem_ctx, struct smb2_negotiate_c
 
 	c->contexts[c->num_contexts].type = type;
 
-	if (data.data) {
-		c->contexts[c->num_contexts].data = data_blob_talloc(c->contexts,
-								     data.data,
-								     data.length);
+	if (buf != NULL) {
+		c->contexts[c->num_contexts].data = data_blob_talloc(
+			c->contexts, buf, buflen);
 		NT_STATUS_HAVE_NO_MEMORY(c->contexts[c->num_contexts].data.data);
 	} else {
 		c->contexts[c->num_contexts].data = data_blob_null;
diff --git a/libcli/smb/smb2_negotiate_context.h b/libcli/smb/smb2_negotiate_context.h
index 55aa032665e..998cf90f5b8 100644
--- a/libcli/smb/smb2_negotiate_context.h
+++ b/libcli/smb/smb2_negotiate_context.h
@@ -42,8 +42,11 @@ NTSTATUS smb2_negotiate_context_parse(TALLOC_CTX *mem_ctx, const DATA_BLOB buffe
 NTSTATUS smb2_negotiate_context_push(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer,
 			       const struct smb2_negotiate_contexts contexts);
 
-NTSTATUS smb2_negotiate_context_add(TALLOC_CTX *mem_ctx, struct smb2_negotiate_contexts *c,
-				    uint16_t type, DATA_BLOB data);
+NTSTATUS smb2_negotiate_context_add(TALLOC_CTX *mem_ctx,
+				    struct smb2_negotiate_contexts *c,
+				    uint16_t type,
+				    const uint8_t *buf,
+				    size_t buflen);
 
 /*
  * return the first context with the given tag
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index 2455b6deacd..9105b7c84a4 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -4768,9 +4768,8 @@ static struct tevent_req *smbXcli_negprot_smb2_subreq(struct smbXcli_negprot_sta
 		SSVAL(p, 4, SMB2_PREAUTH_INTEGRITY_SHA512);
 		generate_random_buffer(p + 6, 32);
 
-		b = data_blob_const(p, 38);
-		status = smb2_negotiate_context_add(state, &c,
-					SMB2_PREAUTH_INTEGRITY_CAPABILITIES, b);
+		status = smb2_negotiate_context_add(
+			state, &c, SMB2_PREAUTH_INTEGRITY_CAPABILITIES, p, 38);
 		if (!NT_STATUS_IS_OK(status)) {
 			return NULL;
 		}
@@ -4783,9 +4782,8 @@ static struct tevent_req *smbXcli_negprot_smb2_subreq(struct smbXcli_negprot_sta
 		SSVAL(p, 2, SMB2_ENCRYPTION_AES128_CCM);
 		SSVAL(p, 4, SMB2_ENCRYPTION_AES128_GCM);
 
-		b = data_blob_const(p, 6);
-		status = smb2_negotiate_context_add(state, &c,
-					SMB2_ENCRYPTION_CAPABILITIES, b);
+		status = smb2_negotiate_context_add(
+			state, &c, SMB2_ENCRYPTION_CAPABILITIES, p, 6);
 		if (!NT_STATUS_IS_OK(status)) {
 			return NULL;
 		}
diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c
index ff98ba60034..833db0ac925 100644
--- a/source3/libsmb/clifile.c
+++ b/source3/libsmb/clifile.c
@@ -2079,14 +2079,13 @@ static NTSTATUS cli_ntcreate1_recv(struct tevent_req *req,
 }
 
 struct cli_ntcreate_state {
-	NTSTATUS (*recv)(struct tevent_req *req, uint16_t *fnum,
-			 struct smb_create_returns *cr);
 	struct smb_create_returns cr;
 	uint16_t fnum;
 	struct tevent_req *subreq;
 };
 
-static void cli_ntcreate_done(struct tevent_req *subreq);
+static void cli_ntcreate_done_nt1(struct tevent_req *subreq);
+static void cli_ntcreate_done_smb2(struct tevent_req *subreq);
 static bool cli_ntcreate_cancel(struct tevent_req *req);
 
 struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
@@ -2111,8 +2110,6 @@ struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
 	}
 
 	if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
-		state->recv = cli_smb2_create_fnum_recv;
-
 		if (cli->use_oplocks) {
 			create_flags |= REQUEST_OPLOCK|REQUEST_BATCH_OPLOCK;
 		}
@@ -2122,17 +2119,20 @@ struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
 			impersonation_level, desired_access,
 			file_attributes, share_access, create_disposition,
 			create_options);
+		if (tevent_req_nomem(subreq, req)) {
+			return tevent_req_post(req, ev);
+		}
+		tevent_req_set_callback(subreq, cli_ntcreate_done_smb2, req);
 	} else {
-		state->recv = cli_ntcreate1_recv;
 		subreq = cli_ntcreate1_send(
 			state, ev, cli, fname, create_flags, desired_access,
 			file_attributes, share_access, create_disposition,
 			create_options, impersonation_level, security_flags);
+		if (tevent_req_nomem(subreq, req)) {
+			return tevent_req_post(req, ev);
+		}
+		tevent_req_set_callback(subreq, cli_ntcreate_done_nt1, req);
 	}
-	if (tevent_req_nomem(subreq, req)) {
-		return tevent_req_post(req, ev);
-	}
-	tevent_req_set_callback(subreq, cli_ntcreate_done, req);
 
 	state->subreq = subreq;
 	tevent_req_set_cancel_fn(req, cli_ntcreate_cancel);
@@ -2140,7 +2140,23 @@ struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
 	return req;
 }
 
-static void cli_ntcreate_done(struct tevent_req *subreq)
+static void cli_ntcreate_done_nt1(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct cli_ntcreate_state *state = tevent_req_data(
+		req, struct cli_ntcreate_state);
+	NTSTATUS status;
+
+	status = cli_ntcreate1_recv(subreq, &state->fnum, &state->cr);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	tevent_req_done(req);
+}
+
+static void cli_ntcreate_done_smb2(struct tevent_req *subreq)
 {
 	struct tevent_req *req = tevent_req_callback_data(
 		subreq, struct tevent_req);
@@ -2148,7 +2164,7 @@ static void cli_ntcreate_done(struct tevent_req *subreq)
 		req, struct cli_ntcreate_state);
 	NTSTATUS status;
 
-	status = state->recv(subreq, &state->fnum, &state->cr);
+	status = cli_smb2_create_fnum_recv(subreq, &state->fnum, &state->cr);
 	TALLOC_FREE(subreq);
 	if (tevent_req_nterror(req, status)) {
 		return;
diff --git a/source3/smbd/smb2_negprot.c b/source3/smbd/smb2_negprot.c
index 2b725f30f75..528d3f8cc74 100644
--- a/source3/smbd/smb2_negprot.c
+++ b/source3/smbd/smb2_negprot.c
@@ -108,7 +108,7 @@ enum protocol_types smbd_smb2_protocol_dialect_match(const uint8_t *indyn,
 	size_t i;
 
 	for (i = 0; i < ARRAY_SIZE(pd); i ++) {
-		size_t c = 0;
+		int c = 0;
 
 		if (lp_server_max_protocol() < pd[i].proto) {
 			continue;
@@ -388,7 +388,6 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
 		uint16_t selected_preauth = 0;
 		const uint8_t *p;
 		uint8_t buf[38];
-		DATA_BLOB b;
 		size_t i;
 
 		if (in_preauth->data.length < needed) {
@@ -435,9 +434,12 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
 		SSVAL(buf, 4, selected_preauth);
 		generate_random_buffer(buf + 6, 32);
 
-		b = data_blob_const(buf, sizeof(buf));
-		status = smb2_negotiate_context_add(req, &out_c,
-					SMB2_PREAUTH_INTEGRITY_CAPABILITIES, b);
+		status = smb2_negotiate_context_add(
+			req,
+			&out_c,
+			SMB2_PREAUTH_INTEGRITY_CAPABILITIES,
+			buf,
+			sizeof(buf));
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
@@ -450,7 +452,6 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
 		uint16_t cipher_count;
 		const uint8_t *p;
 		uint8_t buf[4];
-		DATA_BLOB b;
 		size_t i;
 		bool aes_128_ccm_supported = false;
 		bool aes_128_gcm_supported = false;
@@ -504,9 +505,12 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
 		SSVAL(buf, 0, 1); /* ChiperCount */
 		SSVAL(buf, 2, xconn->smb2.server.cipher);
 
-		b = data_blob_const(buf, sizeof(buf));
-		status = smb2_negotiate_context_add(req, &out_c,
-					SMB2_ENCRYPTION_CAPABILITIES, b);
+		status = smb2_negotiate_context_add(
+			req,
+			&out_c,
+			SMB2_ENCRYPTION_CAPABILITIES,
+			buf,
+			sizeof(buf));
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
diff --git a/source4/torture/drs/rpc/dssync.c b/source4/torture/drs/rpc/dssync.c
index 67fde7c2b61..6a8a8b5492b 100644
--- a/source4/torture/drs/rpc/dssync.c
+++ b/source4/torture/drs/rpc/dssync.c
@@ -677,7 +677,6 @@ static bool test_GetNCChanges(struct torture_context *tctx,
 	struct drsuapi_DsGetNCChangesCtr1 *ctr1 = NULL;
 	struct drsuapi_DsGetNCChangesCtr6 *ctr6 = NULL;
 	uint32_t out_level = 0;
-	struct GUID null_guid;
 	struct dom_sid null_sid;
 	DATA_BLOB gensec_skey;
 	struct {
@@ -691,7 +690,6 @@ static bool test_GetNCChanges(struct torture_context *tctx,
 		}
 	};
 
-	ZERO_STRUCT(null_guid);
 	ZERO_STRUCT(null_sid);
 
 	highest_usn = lpcfg_parm_int(tctx->lp_ctx, NULL, "dssync", "highest_usn", 0);
@@ -721,13 +719,13 @@ static bool test_GetNCChanges(struct torture_context *tctx,
 
 		switch (r.in.level) {
 		case 5:
-			nc.guid	= null_guid;
+			nc.guid	= GUID_zero();
 			nc.sid	= null_sid;
 			nc.dn	= nc_dn_str;
 
 			r.in.req					= &req;
 			r.in.req->req5.destination_dsa_guid		= ctx->new_dc.invocation_id;
-			r.in.req->req5.source_dsa_invocation_id		= null_guid;
+			r.in.req->req5.source_dsa_invocation_id = GUID_zero();
 			r.in.req->req5.naming_context			= &nc;
 			r.in.req->req5.highwatermark.tmp_highest_usn	= highest_usn;
 			r.in.req->req5.highwatermark.reserved_usn	= 0;
@@ -752,14 +750,14 @@ static bool test_GetNCChanges(struct torture_context *tctx,
 
 			break;
 		case 8:
-			nc.guid	= null_guid;
+			nc.guid	= GUID_zero();
 			nc.sid	= null_sid;
 			nc.dn	= nc_dn_str;
 			/* nc.dn can be set to any other ad partition */
 
 			r.in.req					= &req;
 			r.in.req->req8.destination_dsa_guid		= ctx->new_dc.invocation_id;
-			r.in.req->req8.source_dsa_invocation_id		= null_guid;
+			r.in.req->req8.source_dsa_invocation_id	= GUID_zero();
 			r.in.req->req8.naming_context			= &nc;
 			r.in.req->req8.highwatermark.tmp_highest_usn	= highest_usn;
 			r.in.req->req8.highwatermark.reserved_usn	= 0;
@@ -934,10 +932,8 @@ static bool test_FetchNT4Data(struct torture_context *tctx,
 	union drsuapi_DsGetNT4ChangeLogRequest req;
 	union drsuapi_DsGetNT4ChangeLogInfo info;
 	uint32_t level_out = 0;
-	struct GUID null_guid;
 	DATA_BLOB cookie;
 
-	ZERO_STRUCT(null_guid);
 	ZERO_STRUCT(cookie);
 
 	ZERO_STRUCT(r);
diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c
index a424a3160c6..2ae2ba031e9 100644
--- a/source4/torture/rpc/drsuapi.c
+++ b/source4/torture/rpc/drsuapi.c
@@ -399,7 +399,6 @@ static bool test_DsReplicaSync(struct torture_context *tctx,
 	struct drsuapi_DsReplicaSync r;
 	union drsuapi_DsReplicaSyncRequest sync_req;
 	struct drsuapi_DsReplicaObjectIdentifier nc;
-	struct GUID null_guid;
 	struct dom_sid null_sid;
 	struct {
 		int32_t level;
@@ -419,7 +418,6 @@ static bool test_DsReplicaSync(struct torture_context *tctx,
 		return true;
 	}
 
-	ZERO_STRUCT(null_guid);
 	ZERO_STRUCT(null_sid);
 
 	r.in.bind_handle	= &priv->bind_handle;
@@ -431,7 +429,7 @@ static bool test_DsReplicaSync(struct torture_context *tctx,
 		r.in.level = array[i].level;
 		switch(r.in.level) {
 		case 1:
-			nc.guid					= null_guid;
+			nc.guid					= GUID_zero();
 			nc.sid					= null_sid;
 			nc.dn					= priv->domain_obj_dn?priv->domain_obj_dn:"";
 
@@ -458,12 +456,10 @@ static bool test_DsReplicaUpdateRefs(struct torture_context *tctx,
 	struct dcerpc_pipe *p = priv->drs_pipe;
 	struct drsuapi_DsReplicaUpdateRefs r;
 	struct drsuapi_DsReplicaObjectIdentifier nc;
-	struct GUID null_guid;
 	struct GUID dest_dsa_guid;
 	const char *dest_dsa_guid_str;
 	struct dom_sid null_sid;
 
-	ZERO_STRUCT(null_guid);
 	ZERO_STRUCT(null_sid);
 	dest_dsa_guid = GUID_random();
 	dest_dsa_guid_str = GUID_string(tctx, &dest_dsa_guid);
@@ -472,7 +468,7 @@ static bool test_DsReplicaUpdateRefs(struct torture_context *tctx,
 	r.in.level	 = 1; /* Only version 1 is defined presently */
 
 	/* setup NC */
-	nc.guid		= priv->domain_obj_dn ? null_guid : priv->domain_guid;
+	nc.guid		= priv->domain_obj_dn ? GUID_zero():priv->domain_guid;
 	nc.sid		= null_sid;
 	nc.dn		= priv->domain_obj_dn ? priv->domain_obj_dn : "";
 
@@ -552,7 +548,6 @@ static bool test_DsGetNCChanges(struct torture_context *tctx,
 	union drsuapi_DsGetNCChangesRequest req;
 	union drsuapi_DsGetNCChangesCtr ctr;
 	struct drsuapi_DsReplicaObjectIdentifier nc;
-	struct GUID null_guid;
 	struct dom_sid null_sid;
 	uint32_t level_out;
 	struct {
@@ -571,7 +566,6 @@ static bool test_DsGetNCChanges(struct torture_context *tctx,
 		return true;
 	}
 
-	ZERO_STRUCT(null_guid);
 	ZERO_STRUCT(null_sid);
 
 	for (i=0; i < ARRAY_SIZE(array); i++) {
@@ -586,13 +580,13 @@ static bool test_DsGetNCChanges(struct torture_context *tctx,
 
 		switch (r.in.level) {
 		case 5:
-			nc.guid	= null_guid;
+			nc.guid	= GUID_zero();
 			nc.sid	= null_sid;
 			nc.dn	= priv->domain_obj_dn ? priv->domain_obj_dn : "";
 
 			r.in.req					= &req;
 			r.in.req->req5.destination_dsa_guid		= GUID_random();
-			r.in.req->req5.source_dsa_invocation_id		= null_guid;
+			r.in.req->req5.source_dsa_invocation_id	= GUID_zero();
 			r.in.req->req5.naming_context			= &nc;
 			r.in.req->req5.highwatermark.tmp_highest_usn	= 0;
 			r.in.req->req5.highwatermark.reserved_usn	= 0;
@@ -609,13 +603,13 @@ static bool test_DsGetNCChanges(struct torture_context *tctx,
 
 			break;
 		case 8:
-			nc.guid	= null_guid;
+			nc.guid	= GUID_zero();
 			nc.sid	= null_sid;
 			nc.dn	= priv->domain_obj_dn ? priv->domain_obj_dn : "";
 
 			r.in.req					= &req;
 			r.in.req->req8.destination_dsa_guid		= GUID_random();
-			r.in.req->req8.source_dsa_invocation_id		= null_guid;
+			r.in.req->req8.source_dsa_invocation_id	= GUID_zero();
 			r.in.req->req8.naming_context			= &nc;
 			r.in.req->req8.highwatermark.tmp_highest_usn	= 0;
 			r.in.req->req8.highwatermark.reserved_usn	= 0;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list