[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