[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Sat Aug 8 11:00:02 UTC 2020
The branch, master has been updated
via f50987df038 winbind: directly use dcerpc_binding_handle_is_connected() in reset_connection_on_error() SAMR code
via 19ef9c40f14 s3:rpc_client: reverse rpccli_{is_connected,set_timeout}() and rpccli_bh_{is_connected,set_timeout}()
from 6a9c7859281 s3: libsmb: Cleanup - Remove the last use of a struct sockaddr_storage variable in dsgetdcname.c
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit f50987df038846f0052d4c33bb534af9f2c79061
Author: Ralph Boehme <slow at samba.org>
Date: Fri Aug 7 12:07:28 2020 +0200
winbind: directly use dcerpc_binding_handle_is_connected() in reset_connection_on_error() SAMR code
In the end we should avoid rpccli_is_connected(), rpccli_set_timeout() and the
whole rpc_pipe_client concept.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14457
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Ralph Boehme <slow at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
Autobuild-Date(master): Sat Aug 8 10:59:38 UTC 2020 on sn-devel-184
commit 19ef9c40f14f91fcae6874d9f94540dd850e308b
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Aug 7 15:57:15 2020 +0200
s3:rpc_client: reverse rpccli_{is_connected,set_timeout}() and rpccli_bh_{is_connected,set_timeout}()
rpccli->transport should never be used directly,
everything should go via the binding handle.
Internal pipes don't have a transport, so p->transport is always
NULL. rpccli_is_connected() checks this and this causes all SAMR and LSA
requests for the local domain to be processed a second time by the triggered
retry logic.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14457
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/rpc_client/cli_pipe.c | 46 ++++++++++++++++++++++++++++------------
source3/winbindd/winbindd_samr.c | 3 ++-
2 files changed, 34 insertions(+), 15 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 8227ef0b0bd..074d01828ad 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2158,22 +2158,16 @@ NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
unsigned int rpccli_set_timeout(struct rpc_pipe_client *rpc_cli,
unsigned int timeout)
{
- unsigned int old;
-
- if (rpc_cli->transport == NULL) {
- return RPCCLI_DEFAULT_TIMEOUT;
- }
-
- if (rpc_cli->transport->set_timeout == NULL) {
+ if (rpc_cli == NULL) {
return RPCCLI_DEFAULT_TIMEOUT;
}
- old = rpc_cli->transport->set_timeout(rpc_cli->transport->priv, timeout);
- if (old == 0) {
+ if (rpc_cli->binding_handle == NULL) {
return RPCCLI_DEFAULT_TIMEOUT;
}
- return old;
+ return dcerpc_binding_handle_set_timeout(rpc_cli->binding_handle,
+ timeout);
}
bool rpccli_is_connected(struct rpc_pipe_client *rpc_cli)
@@ -2182,11 +2176,11 @@ bool rpccli_is_connected(struct rpc_pipe_client *rpc_cli)
return false;
}
- if (rpc_cli->transport == NULL) {
+ if (rpc_cli->binding_handle == NULL) {
return false;
}
- return rpc_cli->transport->is_connected(rpc_cli->transport->priv);
+ return dcerpc_binding_handle_is_connected(rpc_cli->binding_handle);
}
struct rpccli_bh_state {
@@ -2197,8 +2191,17 @@ static bool rpccli_bh_is_connected(struct dcerpc_binding_handle *h)
{
struct rpccli_bh_state *hs = dcerpc_binding_handle_data(h,
struct rpccli_bh_state);
+ struct rpc_cli_transport *transport = hs->rpc_cli->transport;
+
+ if (transport == NULL) {
+ return false;
+ }
+
+ if (transport->is_connected == NULL) {
+ return false;
+ }
- return rpccli_is_connected(hs->rpc_cli);
+ return transport->is_connected(transport->priv);
}
static uint32_t rpccli_bh_set_timeout(struct dcerpc_binding_handle *h,
@@ -2206,8 +2209,23 @@ static uint32_t rpccli_bh_set_timeout(struct dcerpc_binding_handle *h,
{
struct rpccli_bh_state *hs = dcerpc_binding_handle_data(h,
struct rpccli_bh_state);
+ struct rpc_cli_transport *transport = hs->rpc_cli->transport;
+ unsigned int old;
- return rpccli_set_timeout(hs->rpc_cli, timeout);
+ if (transport == NULL) {
+ return RPCCLI_DEFAULT_TIMEOUT;
+ }
+
+ if (transport->set_timeout == NULL) {
+ return RPCCLI_DEFAULT_TIMEOUT;
+ }
+
+ old = transport->set_timeout(transport->priv, timeout);
+ if (old == 0) {
+ return RPCCLI_DEFAULT_TIMEOUT;
+ }
+
+ return old;
}
static void rpccli_bh_auth_info(struct dcerpc_binding_handle *h,
diff --git a/source3/winbindd/winbindd_samr.c b/source3/winbindd/winbindd_samr.c
index 396e2c97709..5681a760bd1 100644
--- a/source3/winbindd/winbindd_samr.c
+++ b/source3/winbindd/winbindd_samr.c
@@ -185,6 +185,7 @@ static bool reset_connection_on_error(struct winbindd_domain *domain,
NTSTATUS status)
{
struct winbind_internal_pipes *internal_pipes = NULL;
+ struct dcerpc_binding_handle *b = p->binding_handle;
internal_pipes = talloc_get_type_abort(
domain->private_data, struct winbind_internal_pipes);
@@ -197,7 +198,7 @@ static bool reset_connection_on_error(struct winbindd_domain *domain,
return true;
}
- if (!rpccli_is_connected(p)) {
+ if (!dcerpc_binding_handle_is_connected(b)) {
TALLOC_FREE(internal_pipes);
domain->private_data = NULL;
return true;
--
Samba Shared Repository
More information about the samba-cvs
mailing list