[SCM] Samba Shared Repository - branch v3-6-test updated
Jeremy Allison
jra at samba.org
Tue Jan 18 15:01:25 MST 2011
The branch, v3-6-test has been updated
via 13c318d s4:tls_tstream: also use a dynamic buffer for the pull side
via c436d7e s4:tls_tstream: fix partial reads, so that the gnutls layer doesn't read the same data twice
via f6861c4 s3:build: don't use librpc/gen_ndr/cli_echo.[ch] anymore
via e181920 s3:torture: use dcerpc_echo_X() functions
via b0f9f30 s3:rpcclient: use dcerpc_echo_X() functions
from ee048da release-scripts: add build-htmlman-nogit
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 13c318d5417bdb8d807a1c4e5e845d091f387768
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Dec 14 15:24:22 2010 +0100
s4:tls_tstream: also use a dynamic buffer for the pull side
Maybe that fixes the remaining issues with some gnutls versions.
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Tue Jan 18 17:26:08 CET 2011 on sn-devel-104
(cherry picked from commit 93733e4e316dc7f80bbc002778914b9dc09fe6d7)
commit c436d7e9e75d4642f91f1d0a86b97dedd3cf5b4c
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Dec 14 15:00:15 2010 +0100
s4:tls_tstream: fix partial reads, so that the gnutls layer doesn't read the same data twice
metze
(cherry picked from commit 361b4ed016a06717682e4071aa499a52b6c29dda)
commit f6861c4b0ead5259242e857c162a3168679b2707
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jan 15 09:17:55 2011 +0100
s3:build: don't use librpc/gen_ndr/cli_echo.[ch] anymore
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Mon Jan 17 09:34:12 CET 2011 on sn-devel-104
(cherry picked from commit 528bcedbc55e9fa9e700db74c2f7e7323c3f08c1)
commit e181920573caea5b4784f7cf5e21385c2955fff8
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jan 15 09:15:34 2011 +0100
s3:torture: use dcerpc_echo_X() functions
metze
(cherry picked from commit 494e57d913ba2502b9a4bd3172228949590e0ae6)
commit b0f9f30ba4057487e4241a7da4325875a7edcc64
Author: Stefan Metzmacher <metze at samba.org>
Date: Sat Jan 15 09:14:56 2011 +0100
s3:rpcclient: use dcerpc_echo_X() functions
metze
(cherry picked from commit 85db5c9f8f76822999765650def55b8342ef6244)
-----------------------------------------------------------------------
Summary of changes:
source3/Makefile.in | 3 +-
source3/rpcclient/cmd_echo.c | 67 ++++++++++++++++++++----------------
source3/torture/test_async_echo.c | 10 +++--
source3/wscript_build | 8 +---
source4/lib/tls/tls_tstream.c | 22 ++++++++++--
5 files changed, 64 insertions(+), 46 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/Makefile.in b/source3/Makefile.in
index dd719a1..1ebc579 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -357,8 +357,7 @@ LIBCLI_DRSUAPI_OBJ = librpc/gen_ndr/ndr_drsuapi_c.o
LIBCLI_DFS_OBJ = librpc/gen_ndr/ndr_dfs_c.o
-LIBCLI_ECHO_OBJ = librpc/gen_ndr/cli_echo.o \
- librpc/gen_ndr/ndr_echo_c.o
+LIBCLI_ECHO_OBJ = librpc/gen_ndr/ndr_echo_c.o
LIBCLI_INITSHUTDOWN_OBJ = librpc/gen_ndr/ndr_initshutdown_c.o
diff --git a/source3/rpcclient/cmd_echo.c b/source3/rpcclient/cmd_echo.c
index cf5f9e0..78787b0 100644
--- a/source3/rpcclient/cmd_echo.c
+++ b/source3/rpcclient/cmd_echo.c
@@ -20,38 +20,41 @@
#include "includes.h"
#include "rpcclient.h"
-#include "../librpc/gen_ndr/cli_echo.h"
+#include "../librpc/gen_ndr/ndr_echo_c.h"
static NTSTATUS cmd_echo_add_one(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
int argc, const char **argv)
{
+ struct dcerpc_binding_handle *b = cli->binding_handle;
uint32 request = 1, response;
- NTSTATUS result;
+ NTSTATUS status;
if (argc > 2) {
printf("Usage: %s [num]\n", argv[0]);
return NT_STATUS_OK;
}
- if (argc == 2)
+ if (argc == 2) {
request = atoi(argv[1]);
+ }
- result = rpccli_echo_AddOne(cli, mem_ctx, request, &response);
-
- if (!NT_STATUS_IS_OK(result))
+ status = dcerpc_echo_AddOne(b, mem_ctx, request, &response);
+ if (!NT_STATUS_IS_OK(status)) {
goto done;
+ }
printf("%d + 1 = %d\n", request, response);
done:
- return result;
+ return status;
}
static NTSTATUS cmd_echo_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
int argc, const char **argv)
{
+ struct dcerpc_binding_handle *b = cli->binding_handle;
uint32 size, i;
- NTSTATUS result;
+ NTSTATUS status;
uint8_t *in_data = NULL, *out_data = NULL;
if (argc != 2) {
@@ -63,29 +66,30 @@ static NTSTATUS cmd_echo_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
if ( (in_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
printf("Failure to allocate buff of %d bytes\n",
size);
- result = NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
goto done;
}
if ( (out_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
printf("Failure to allocate buff of %d bytes\n",
size);
- result = NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
goto done;
}
- for (i = 0; i < size; i++)
+ for (i = 0; i < size; i++) {
in_data[i] = i & 0xff;
+ }
- result = rpccli_echo_EchoData(cli, mem_ctx, size, in_data, out_data);
-
- if (!NT_STATUS_IS_OK(result))
+ status = dcerpc_echo_EchoData(b, mem_ctx, size, in_data, out_data);
+ if (!NT_STATUS_IS_OK(status)) {
goto done;
+ }
for (i = 0; i < size; i++) {
if (in_data[i] != out_data[i]) {
printf("mismatch at offset %d, %d != %d\n",
i, in_data[i], out_data[i]);
- result = NT_STATUS_UNSUCCESSFUL;
+ status = NT_STATUS_UNSUCCESSFUL;
}
}
@@ -93,15 +97,16 @@ done:
SAFE_FREE(in_data);
SAFE_FREE(out_data);
- return result;
+ return status;
}
static NTSTATUS cmd_echo_source_data(struct rpc_pipe_client *cli,
TALLOC_CTX *mem_ctx, int argc,
const char **argv)
{
+ struct dcerpc_binding_handle *b = cli->binding_handle;
uint32 size, i;
- NTSTATUS result;
+ NTSTATUS status;
uint8_t *out_data = NULL;
if (argc != 2) {
@@ -113,35 +118,36 @@ static NTSTATUS cmd_echo_source_data(struct rpc_pipe_client *cli,
if ( (out_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
printf("Failure to allocate buff of %d bytes\n",
size);
- result = NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
goto done;
}
- result = rpccli_echo_SourceData(cli, mem_ctx, size, out_data);
-
- if (!NT_STATUS_IS_OK(result))
+ status = dcerpc_echo_SourceData(b, mem_ctx, size, out_data);
+ if (!NT_STATUS_IS_OK(status)) {
goto done;
+ }
for (i = 0; i < size; i++) {
if (out_data && out_data[i] != (i & 0xff)) {
printf("mismatch at offset %d, %d != %d\n",
i, out_data[i], i & 0xff);
- result = NT_STATUS_UNSUCCESSFUL;
+ status = NT_STATUS_UNSUCCESSFUL;
}
}
done:
SAFE_FREE(out_data);
- return result;
+ return status;
}
static NTSTATUS cmd_echo_sink_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
int argc, const char **argv)
{
+ struct dcerpc_binding_handle *b = cli->binding_handle;
uint32 size, i;
- NTSTATUS result;
+ NTSTATUS status;
uint8_t *in_data = NULL;
if (argc != 2) {
@@ -153,22 +159,23 @@ static NTSTATUS cmd_echo_sink_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_
if ( (in_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
printf("Failure to allocate buff of %d bytes\n",
size);
- result = NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
goto done;
}
- for (i = 0; i < size; i++)
+ for (i = 0; i < size; i++) {
in_data[i] = i & 0xff;
+ }
- result = rpccli_echo_SinkData(cli, mem_ctx, size, in_data);
-
- if (!NT_STATUS_IS_OK(result))
+ status = dcerpc_echo_SinkData(b, mem_ctx, size, in_data);
+ if (!NT_STATUS_IS_OK(status)) {
goto done;
+ }
done:
SAFE_FREE(in_data);
- return result;
+ return status;
}
/* List of commands exported by this module */
diff --git a/source3/torture/test_async_echo.c b/source3/torture/test_async_echo.c
index 13d4679..dec5e74 100644
--- a/source3/torture/test_async_echo.c
+++ b/source3/torture/test_async_echo.c
@@ -19,15 +19,15 @@
#include "includes.h"
#include "torture/proto.h"
-#include "librpc/gen_ndr/cli_echo.h"
+#include "librpc/gen_ndr/ndr_echo_c.h"
static void rpccli_sleep_done(struct tevent_req *req)
{
int *done = (int *)tevent_req_callback_data_void(req);
NTSTATUS status;
- uint32_t result;
+ uint32_t result = UINT32_MAX;
- status = rpccli_echo_TestSleep_recv(req, talloc_tos(), &result);
+ status = dcerpc_echo_TestSleep_recv(req, talloc_tos(), &result);
TALLOC_FREE(req);
printf("sleep returned %s, %d\n", nt_errstr(status), (int)result);
*done -= 1;
@@ -60,6 +60,7 @@ bool run_async_echo(int dummy)
{
struct cli_state *cli = NULL;
struct rpc_pipe_client *p;
+ struct dcerpc_binding_handle *b;
struct tevent_context *ev;
struct tevent_req *req;
NTSTATUS status;
@@ -85,10 +86,11 @@ bool run_async_echo(int dummy)
printf("Could not open echo pipe: %s\n", nt_errstr(status));
goto fail;
}
+ b = p->binding_handle;
num_reqs = 0;
- req = rpccli_echo_TestSleep_send(ev, ev, p, 15);
+ req = dcerpc_echo_TestSleep_send(ev, ev, b, 15);
if (req == NULL) {
printf("rpccli_echo_TestSleep_send failed\n");
goto fail;
diff --git a/source3/wscript_build b/source3/wscript_build
index 205aabe..ef39d16 100644
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -1079,10 +1079,6 @@ bld.SAMBA_SUBSYSTEM('NDR_NBT_BUF',
deps='talloc',
autoproto='nbtname.h')
-bld.SAMBA_SUBSYSTEM('RPCCLI_ECHO',
- source='../librpc/gen_ndr/cli_echo.c',
- public_deps='RPC_NDR_ECHO')
-
bld.SAMBA_SUBSYSTEM('RPCCLI_SAMR',
source='../librpc/gen_ndr/cli_samr.c',
public_deps='RPC_NDR_SAMR')
@@ -1170,7 +1166,7 @@ bld.SAMBA_BINARY('rpcclient/rpcclient',
source=RPCCLIENT_SRC,
deps='''talloc tdb cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD
PARAM_WITHOUT_REG wbclient PARAM KRBCLIENT LIBMSRPC_GEN LIBMSRPC
- LIBADS SMBREADLINE DCUTIL RPC_NDR_WINREG RPCCLI_ECHO
+ LIBADS SMBREADLINE DCUTIL RPC_NDR_WINREG RPC_NDR_ECHO
RPC_CLIENT_SCHANNEL
LIBCLI_SAMR LIBCLI_LSA LIBRPCCLI_NETLOGON LIBCLI_SPOOLSS
RPC_NDR_SRVSVC RPC_NDR_WKSSVC RPC_NDR_DSSETUP RPC_NDR_DFS
@@ -1269,7 +1265,7 @@ bld.SAMBA_BINARY('nmblookup',
bld.SAMBA_BINARY('smbtorture',
source=SMBTORTURE_SRC,
deps='''talloc tdb tevent cap resolv wbclient PARAM LIBSMB KRBCLIENT TLDAP
- LIB_NONSMBD POPT_SAMBA ASN1_UTIL LIBTSOCKET NDR_LSA LIBMSRPC LIBMSRPC_GEN RPCCLI_ECHO''',
+ LIB_NONSMBD POPT_SAMBA ASN1_UTIL LIBTSOCKET NDR_LSA LIBMSRPC LIBMSRPC_GEN RPC_NDR_ECHO''',
vars=locals())
bld.SAMBA_BINARY('smbconftort',
diff --git a/source4/lib/tls/tls_tstream.c b/source4/lib/tls/tls_tstream.c
index 8e80454..8e3d731 100644
--- a/source4/lib/tls/tls_tstream.c
+++ b/source4/lib/tls/tls_tstream.c
@@ -58,7 +58,7 @@ struct tstream_tls {
} push;
struct {
- uint8_t buffer[1024];
+ uint8_t *buf;
struct iovec iov;
struct tevent_req *subreq;
} pull;
@@ -278,6 +278,7 @@ static ssize_t tstream_tls_pull_function(gnutls_transport_ptr ptr,
tstream_context_data(stream,
struct tstream_tls);
struct tevent_req *subreq;
+ size_t len;
if (tlss->error != 0) {
errno = tlss->error;
@@ -290,14 +291,20 @@ static ssize_t tstream_tls_pull_function(gnutls_transport_ptr ptr,
}
if (tlss->pull.iov.iov_base) {
+ uint8_t *b;
size_t n;
+ b = (uint8_t *)tlss->pull.iov.iov_base;
+
n = MIN(tlss->pull.iov.iov_len, size);
- memcpy(buf, tlss->pull.iov.iov_base, n);
+ memcpy(buf, b, n);
tlss->pull.iov.iov_len -= n;
+ b += n;
+ tlss->pull.iov.iov_base = (char *)b;
if (tlss->pull.iov.iov_len == 0) {
tlss->pull.iov.iov_base = NULL;
+ TALLOC_FREE(tlss->pull.buf);
}
return n;
@@ -307,8 +314,15 @@ static ssize_t tstream_tls_pull_function(gnutls_transport_ptr ptr,
return 0;
}
- tlss->pull.iov.iov_base = tlss->pull.buffer;
- tlss->pull.iov.iov_len = MIN(size, sizeof(tlss->pull.buffer));
+ len = MIN(size, UINT16_MAX);
+
+ tlss->pull.buf = talloc_array(tlss, uint8_t, len);
+ if (tlss->pull.buf == NULL) {
+ return -1;
+ }
+
+ tlss->pull.iov.iov_base = (char *)tlss->pull.buf;
+ tlss->pull.iov.iov_len = len;
subreq = tstream_readv_send(tlss,
tlss->current_ev,
--
Samba Shared Repository
More information about the samba-cvs
mailing list