[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Apr 1 20:37:01 UTC 2021


The branch, master has been updated
       via  e742661bd25 tstream: Add tstream_npa_existing_stream()
       via  1b47dd65a38 tstream_npa: Allow NULL output parameters
       via  bbfdf2708e8 tstream_npa: Return named_pipe_auth_req_info4 from accept_existing
       via  3a03c0a1ad7 tstream_npa: Keep "named_pipe_auth_req" around in tstream_npa_accept_existing_send()/recv()
       via  0736a9f5c39 wbinfo: Allow SID for -R
       via  4e174b5a0f4 dynconfig: Introduce and expose SAMBA_LIBEXECDIR
       via  206c99f6e5e srv_winreg: Align integer types
       via  6a6676488ea printing: Align integer types
       via  23056f537c6 smbd: Factor out a bool expr into a descriptive variable
       via  6f4e6fc631a test: Add a test for background_job_send crash
       via  cabd67d69f7 lib: Fix rundown of jobs sent with background_job_send()
       via  74720bd9acd lib: Add required includes to source3/lib/background.h
      from  97e657b89b6 asn1: Remove unused function asn1_check_enumerated()

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


- Log -----------------------------------------------------------------
commit e742661bd2507d39dfa47e40531dc1dca636cbbe
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 16 17:22:40 2021 +0100

    tstream: Add tstream_npa_existing_stream()
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Apr  1 20:36:19 UTC 2021 on sn-devel-184

commit 1b47dd65a3815e38537af335792353fca6c40f03
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 18 21:28:30 2021 +0100

    tstream_npa: Allow NULL output parameters
    
    When reading the info4, the substructs might not be interesting for
    you.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit bbfdf2708e8e85cee56aeff43c9216d2003ed310
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 18 17:30:42 2021 +0100

    tstream_npa: Return named_pipe_auth_req_info4 from accept_existing
    
    Callers might want the full picture. We need to make
    named_pipe_auth_req_info4 public for that.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 3a03c0a1ad7ea81d9dcae88016c42a1f9e000b47
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 18 16:54:07 2021 +0100

    tstream_npa: Keep "named_pipe_auth_req" around in tstream_npa_accept_existing_send()/recv()
    
    This will make it simpler to return a copy of the struct
    named_pipe_auth_req_info4 in the next commit.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 0736a9f5c39b93e06a9172a74b766eb9a029f1f0
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 23 16:04:02 2021 +0100

    wbinfo: Allow SID for -R
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4e174b5a0f42b042f363640d6b02ef6ba4e9883a
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 2 16:50:48 2021 +0100

    dynconfig: Introduce and expose SAMBA_LIBEXECDIR
    
    Right now the smbspool_krb5_wrapper lives there, but we'll have more
    in the future.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 206c99f6e5e0720eff4e3240d61a51ba151204f7
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Mar 27 16:42:29 2021 +0100

    srv_winreg: Align integer types
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6a6676488ea4849b8ed1e6d851fa3363b6a72d6d
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Mar 27 16:42:52 2021 +0100

    printing: Align integer types
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 23056f537c6c12e656fbccac86643088db7f14da
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Mar 26 18:50:00 2021 +0100

    smbd: Factor out a bool expr into a descriptive variable
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6f4e6fc631a4f43d22fe65cd53daf635b4324d53
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Mar 31 11:22:16 2021 +0000

    test: Add a test for background_job_send crash
    
    I haven't figured out how to properly add a crashing test to
    "knownfail", so this is added after the fix.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>

commit cabd67d69f7fa24a132b6e7850b9678aac269ec5
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Mar 30 17:18:10 2021 +0200

    lib: Fix rundown of jobs sent with background_job_send()
    
    When using this with a trigger message in smbd it will crash at
    rundown in messaging_deregister because the global messaging context
    can be TALLOC_FREE'ed before the background job is freed.
    
    Using messaging_filtered_send already takes care of this situation
    properly.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 74720bd9acd4951dd03f562748cae4dbe26092a0
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Mar 31 11:21:52 2021 +0000

    lib: Add required includes to source3/lib/background.h
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 dynconfig/dynconfig.c                      |   1 +
 dynconfig/dynconfig.h                      |   1 +
 dynconfig/wscript                          |   7 ++
 lib/printer_driver/printer_driver.c        |  21 ++--
 libcli/named_pipe_auth/npa_tstream.c       | 153 +++++++++++++++++++++--------
 libcli/named_pipe_auth/npa_tstream.h       |  34 +++++--
 librpc/idl/named_pipe_auth.idl             |   2 +-
 nsswitch/wbinfo.c                          |  25 +++--
 selftest/tests.py                          |   6 ++
 source3/lib/background.c                   |  36 +++----
 source3/lib/background.h                   |   6 ++
 source3/rpc_server/rpc_server.c            |   1 +
 source3/rpc_server/winreg/srv_winreg_nt.c  |   2 +-
 source3/smbd/server.c                      |  10 +-
 source4/samba/service_named_pipe.c         |   1 +
 testsuite/unittests/test_background_send.c |  82 ++++++++++++++++
 testsuite/unittests/wscript                |   7 ++
 17 files changed, 298 insertions(+), 97 deletions(-)
 create mode 100644 testsuite/unittests/test_background_send.c


Changeset truncated at 500 lines:

diff --git a/dynconfig/dynconfig.c b/dynconfig/dynconfig.c
index dd4de16e1d4..415ccc53c52 100644
--- a/dynconfig/dynconfig.c
+++ b/dynconfig/dynconfig.c
@@ -87,6 +87,7 @@ DEFINE_DYN_CONFIG_PARAM(LMHOSTSFILE) /** Statically configured LanMan hosts. **/
 DEFINE_DYN_CONFIG_PARAM(CODEPAGEDIR)
 DEFINE_DYN_CONFIG_PARAM(LIBDIR)
 DEFINE_DYN_CONFIG_PARAM(MODULESDIR)
+DEFINE_DYN_CONFIG_PARAM(SAMBA_LIBEXECDIR)
 DEFINE_DYN_CONFIG_PARAM(SHLIBEXT)
 DEFINE_DYN_CONFIG_PARAM(LOCKDIR)
 DEFINE_DYN_CONFIG_PARAM(STATEDIR) /** Persistent state files. Default LOCKDIR */
diff --git a/dynconfig/dynconfig.h b/dynconfig/dynconfig.h
index 156e63e38ac..72028a8c2e1 100644
--- a/dynconfig/dynconfig.h
+++ b/dynconfig/dynconfig.h
@@ -38,6 +38,7 @@ DEFINE_DYN_CONFIG_PROTO(LMHOSTSFILE) /** Statically configured LanMan hosts. **/
 DEFINE_DYN_CONFIG_PROTO(CODEPAGEDIR)
 DEFINE_DYN_CONFIG_PROTO(LIBDIR)
 DEFINE_DYN_CONFIG_PROTO(MODULESDIR)
+DEFINE_DYN_CONFIG_PROTO(SAMBA_LIBEXECDIR)
 DEFINE_DYN_CONFIG_PROTO(SHLIBEXT)
 DEFINE_DYN_CONFIG_PROTO(LOCKDIR)
 DEFINE_DYN_CONFIG_PROTO(STATEDIR) /** Persistent state files. Default LOCKDIR */
diff --git a/dynconfig/wscript b/dynconfig/wscript
index f455699f062..c62afa25399 100644
--- a/dynconfig/wscript
+++ b/dynconfig/wscript
@@ -95,6 +95,11 @@ dynconfig = {
          'FHS-PATH':  '${LIBEXECDIR}',
          'OVERWRITE': True,
     },
+    'SAMBA_LIBEXECDIR' : {
+         'STD-PATH':  '${LIBEXECDIR}/samba',
+         'FHS-PATH':  '${LIBEXECDIR}/samba',
+         'OVERWRITE': True,
+    },
     'DATADIR' : {
          'STD-PATH':  '${DATADIR}',
          'FHS-PATH':  '${DATADIR}',
@@ -373,6 +378,8 @@ def get_override(bld):
                  'PYTHONARCHDIR' : 'bin/python',
                  'BINDIR'        : 'bin',
                  'SBINDIR'       : 'bin',
+                 'LIBEXECDIR'    : 'bin',
+                 'SAMBA_LIBEXECDIR' : 'bin',
                  'CODEPAGEDIR'   : 'codepages',
                  'SCRIPTSBINDIR' : 'source4/scripting/bin',
                  'SETUPDIR'      : 'source4/setup'
diff --git a/lib/printer_driver/printer_driver.c b/lib/printer_driver/printer_driver.c
index 2176d4ae948..35260c29075 100644
--- a/lib/printer_driver/printer_driver.c
+++ b/lib/printer_driver/printer_driver.c
@@ -330,11 +330,10 @@ static NTSTATUS enum_devices_in_toc(struct gp_inifile_context *ctx,
 				    const char ***pdevice_values)
 {
 	NTSTATUS status;
-	size_t num_manufacturers = 0;
+	size_t i, num_manufacturers = 0;
 	const char **manufacturers = NULL;
 	const char **values = NULL;
 	char *p;
-	int i;
 	bool ok;
 
 	status = gp_inifile_enum_section(ctx, "Manufacturer", &num_manufacturers, &manufacturers, &values);
@@ -370,10 +369,9 @@ static NTSTATUS enum_devices_in_toc(struct gp_inifile_context *ctx,
 			 */
 
 			const char *decorated_models_section_name;
-			size_t num_devices = 0;
+			size_t d, num_devices = 0;
 			const char **devices = NULL;
 			const char **device_values = NULL;
-			int d;
 			size_t c = 0;
 
 			decorated_models_section_name = talloc_asprintf(mem_ctx, "%s.%s",
@@ -430,10 +428,9 @@ static NTSTATUS find_device_in_toc(struct gp_inifile_context *ctx,
 				   const char **value)
 {
 	NTSTATUS status;
-	size_t num_devices = 0;
+	size_t d, num_devices = 0;
 	const char **devices = NULL;
 	const char **device_values = NULL;
-	int d;
 
 	if (device_description == NULL) {
 		return NT_STATUS_INVALID_PARAMETER;
@@ -477,11 +474,10 @@ static NTSTATUS process_driver_section_copyfiles(struct gp_inifile_context *ctx,
 						 struct spoolss_AddDriverInfo8 *r)
 {
 	NTSTATUS status;
-	size_t num_keys = 0;
+	size_t i, num_keys = 0;
 	char *p, *key;
 	const char **keys = NULL;
 	const char **values = NULL;
-	int i;
 	char *str;
 	const char *s;
 
@@ -643,10 +639,9 @@ static NTSTATUS process_one_core_driver_section(struct gp_inifile_context *core_
 						struct spoolss_AddDriverInfo8 *r)
 {
 	NTSTATUS status;
-	size_t num_keys = 0;
+	size_t i, num_keys = 0;
 	const char **keys = NULL;
 	const char **values = NULL;
-	int i;
 
 	DEBUG(10,("CoreDriverSection is: %s\n", driver_section));
 
@@ -924,10 +919,9 @@ static NTSTATUS process_source_disk_name(struct gp_inifile_context *ctx,
 	NTSTATUS status;
 	bool ok;
 	const char *key;
-	size_t num_keys = 0;
+	size_t i, num_keys = 0;
 	const char **keys = NULL;
 	const char **values = NULL;
-	int i;
 
 	key = talloc_asprintf(mem_ctx, "SourceDisksNames.%s", short_environment);
 	if (key == NULL) {
@@ -1207,11 +1201,10 @@ NTSTATUS driver_inf_list(TALLOC_CTX *mem_ctx,
 {
 	NTSTATUS status;
 	const char *short_environment;
-	size_t num_devices = 0;
+	size_t d, num_devices = 0;
 	const char **devices = NULL;
 	const char **device_values = NULL;
 	struct inf_context *inf_ctx;
-	int d;
 
 	if (!filename || !environment) {
 		return NT_STATUS_INVALID_PARAMETER;
diff --git a/libcli/named_pipe_auth/npa_tstream.c b/libcli/named_pipe_auth/npa_tstream.c
index 8c07f2e76f9..a6fa0211d20 100644
--- a/libcli/named_pipe_auth/npa_tstream.c
+++ b/libcli/named_pipe_auth/npa_tstream.c
@@ -949,15 +949,14 @@ static const struct tstream_context_ops tstream_npa_ops = {
 	.disconnect_recv	= tstream_npa_disconnect_recv,
 };
 
-int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx,
-				 int fd,
+int _tstream_npa_existing_stream(TALLOC_CTX *mem_ctx,
+				 struct tstream_context **transport,
 				 uint16_t file_type,
 				 struct tstream_context **_stream,
 				 const char *location)
 {
 	struct tstream_context *stream;
 	struct tstream_npa *npas;
-	int ret;
 
 	switch (file_type) {
 	case FILE_TYPE_BYTE_MODE_PIPE:
@@ -977,23 +976,33 @@ int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx,
 	if (!stream) {
 		return -1;
 	}
-	ZERO_STRUCTP(npas);
 
-	npas->file_type = file_type;
-
-	ret = tstream_bsd_existing_socket(stream, fd,
-					  &npas->unix_stream);
-	if (ret == -1) {
-		int saved_errno = errno;
-		talloc_free(stream);
-		errno = saved_errno;
-		return -1;
-	}
+	*npas = (struct tstream_npa) {
+		.file_type = file_type,
+		.unix_stream = talloc_move(npas, transport),
+	};
 
 	*_stream = stream;
 	return 0;
 }
 
+int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx,
+				 int fd,
+				 uint16_t file_type,
+				 struct tstream_context **_stream,
+				 const char *location)
+{
+	struct tstream_context *transport = NULL;
+	int ret;
+
+	ret = _tstream_bsd_existing_socket(
+		mem_ctx, fd, &transport, location);
+	if (ret == -1) {
+		return -1;
+	}
+	return _tstream_npa_existing_stream(
+		mem_ctx, &transport, file_type, _stream, location);
+}
 
 struct tstream_npa_accept_state {
 	struct tevent_context *ev;
@@ -1002,16 +1011,15 @@ struct tstream_npa_accept_state {
 	uint16_t device_state;
 	uint64_t alloc_size;
 
+	struct named_pipe_auth_req *pipe_request;
+
 	DATA_BLOB npa_blob;
 	struct iovec out_iov;
 
 	/* results */
 	NTSTATUS accept_status;
 	struct tsocket_address *remote_client_addr;
-	char *remote_client_name;
 	struct tsocket_address *local_server_addr;
-	char *local_server_name;
-	struct auth_session_info_transport *session_info;
 };
 
 static void tstream_npa_accept_existing_reply(struct tevent_req *subreq);
@@ -1116,6 +1124,7 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
 		DEBUG(0, ("Out of memory!\n"));
 		goto reply;
 	}
+	state->pipe_request = pipe_request;
 
 	/* parse the passed credentials */
 	ndr_err = ndr_pull_struct_blob_all(
@@ -1161,9 +1170,6 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
 		goto reply;
 	}
 
-	state->local_server_name = discard_const_p(char,
-						   talloc_move(state,
-							       &i4.local_server_name));
 	ret = tsocket_address_inet_from_strings(state, "ip",
 						i4.local_server_addr,
 						i4.local_server_port,
@@ -1176,9 +1182,6 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
 		goto reply;
 	}
 
-	state->remote_client_name = discard_const_p(char,
-						    talloc_move(state,
-								&i4.remote_client_name));
 	ret = tsocket_address_inet_from_strings(state, "ip",
 						i4.remote_client_addr,
 						i4.remote_client_port,
@@ -1191,7 +1194,6 @@ static void tstream_npa_accept_existing_reply(struct tevent_req *subreq)
 		goto reply;
 	}
 
-	state->session_info = talloc_move(state, &i4.session_info);
 reply:
 	/* create the output */
 	ndr_err = ndr_push_struct_blob(&out, state, &pipe_reply,
@@ -1243,19 +1245,62 @@ static void tstream_npa_accept_existing_done(struct tevent_req *subreq)
 	tevent_req_done(req);
 }
 
-int _tstream_npa_accept_existing_recv(struct tevent_req *req,
-				      int *perrno,
-				      TALLOC_CTX *mem_ctx,
-				      struct tstream_context **stream,
-				      struct tsocket_address **remote_client_addr,
-				      char **_remote_client_name,
-				      struct tsocket_address **local_server_addr,
-				      char **local_server_name,
-				      struct auth_session_info_transport **session_info,
-				      const char *location)
+static struct named_pipe_auth_req_info4 *copy_npa_info4(
+	TALLOC_CTX *mem_ctx, const struct named_pipe_auth_req_info4 *src)
+{
+	struct named_pipe_auth_req_info4 *dst = NULL;
+	DATA_BLOB blob;
+	enum ndr_err_code ndr_err;
+
+	dst = talloc_zero(mem_ctx, struct named_pipe_auth_req_info4);
+	if (dst == NULL) {
+		return NULL;
+	}
+
+	ndr_err = ndr_push_struct_blob(
+		&blob,
+		dst,
+		src,
+		(ndr_push_flags_fn_t)ndr_push_named_pipe_auth_req_info4);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		DBG_WARNING("ndr_push_named_pipe_auth_req_info4 failed: %s\n",
+			    ndr_errstr(ndr_err));
+		TALLOC_FREE(dst);
+		return NULL;
+	}
+
+	ndr_err = ndr_pull_struct_blob_all(
+		&blob,
+		dst,
+		dst,
+		(ndr_pull_flags_fn_t)ndr_pull_named_pipe_auth_req_info4);
+	TALLOC_FREE(blob.data);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		DBG_WARNING("ndr_push_named_pipe_auth_req_info4 failed: %s\n",
+			    ndr_errstr(ndr_err));
+		TALLOC_FREE(dst);
+		return NULL;
+	}
+
+	return dst;
+}
+
+int _tstream_npa_accept_existing_recv(
+	struct tevent_req *req,
+	int *perrno,
+	TALLOC_CTX *mem_ctx,
+	struct tstream_context **stream,
+	struct named_pipe_auth_req_info4 **info4,
+	struct tsocket_address **remote_client_addr,
+	char **_remote_client_name,
+	struct tsocket_address **local_server_addr,
+	char **local_server_name,
+	struct auth_session_info_transport **session_info,
+	const char *location)
 {
 	struct tstream_npa_accept_state *state =
 			tevent_req_data(req, struct tstream_npa_accept_state);
+	struct named_pipe_auth_req_info4 *i4 = &state->pipe_request->info.info4;
 	struct tstream_npa *npas;
 	int ret;
 
@@ -1296,11 +1341,41 @@ int _tstream_npa_accept_existing_recv(struct tevent_req *req,
 	npas->unix_stream = state->plain;
 	npas->file_type = state->file_type;
 
-	*remote_client_addr = talloc_move(mem_ctx, &state->remote_client_addr);
-	*_remote_client_name = talloc_move(mem_ctx, &state->remote_client_name);
-	*local_server_addr = talloc_move(mem_ctx, &state->local_server_addr);
-	*local_server_name = talloc_move(mem_ctx, &state->local_server_name);
-	*session_info = talloc_move(mem_ctx, &state->session_info);
+	if (info4 != NULL) {
+		/*
+		 * Make a full copy of "info4" because further down we
+		 * talloc_move() away substructures from
+		 * state->pipe_request.
+		 */
+		struct named_pipe_auth_req_info4 *dst = copy_npa_info4(
+			mem_ctx, i4);
+		if (dst == NULL) {
+			*perrno = ENOMEM;
+			tevent_req_received(req);
+			return -1;
+		}
+		*info4 = dst;
+	}
+
+	if (remote_client_addr != NULL) {
+		*remote_client_addr = talloc_move(
+			mem_ctx, &state->remote_client_addr);
+	}
+	if (_remote_client_name != NULL) {
+		*_remote_client_name = discard_const_p(
+			char, talloc_move(mem_ctx, &i4->remote_client_name));
+	}
+	if (local_server_addr != NULL) {
+		*local_server_addr = talloc_move(
+			mem_ctx, &state->local_server_addr);
+	}
+	if (local_server_name != NULL) {
+		*local_server_name = discard_const_p(
+			char, talloc_move(mem_ctx, &i4->local_server_name));
+	}
+	if (session_info != NULL) {
+		*session_info = talloc_move(mem_ctx, &i4->session_info);
+	}
 
 	tevent_req_received(req);
 	return 0;
diff --git a/libcli/named_pipe_auth/npa_tstream.h b/libcli/named_pipe_auth/npa_tstream.h
index b7d11dea6d3..27e4d9c5a21 100644
--- a/libcli/named_pipe_auth/npa_tstream.h
+++ b/libcli/named_pipe_auth/npa_tstream.h
@@ -24,6 +24,7 @@ struct tevent_req;
 struct tevent_context;
 struct auth_session_info_transport;
 struct tsocket_address;
+struct named_pipe_auth_req_info4;
 
 struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
 					    struct tevent_context *ev,
@@ -46,6 +47,15 @@ int _tstream_npa_connect_recv(struct tevent_req *req,
 	_tstream_npa_connect_recv(req, perrno, mem_ctx, stream, f, d, a, \
 				  __location__)
 
+int _tstream_npa_existing_stream(TALLOC_CTX *mem_ctx,
+				 struct tstream_context **transport,
+				 uint16_t file_type,
+				 struct tstream_context **_stream,
+				 const char *location);
+#define tstream_npa_existing_stream(mem_ctx, transport, ft, stream) \
+	_tstream_npa_existing_stream(mem_ctx, transport, ft, stream, \
+				     __location__)
+
 int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx,
 				 int fd,
 				 uint16_t file_type,
@@ -95,18 +105,21 @@ struct tevent_req *tstream_npa_accept_existing_send(TALLOC_CTX *mem_ctx,
  *
  * @return  0 if successful, -1 on failure with *perror filled.
  */
-int _tstream_npa_accept_existing_recv(struct tevent_req *req,
-				      int *perrno,
-				      TALLOC_CTX *mem_ctx,
-				      struct tstream_context **stream,
-				      struct tsocket_address **remote_client_addr,
-				      char **_remote_client_name,
-				      struct tsocket_address **local_server_addr,
-				      char **local_server_name,
-				      struct auth_session_info_transport **session_info,
-				      const char *location);
+int _tstream_npa_accept_existing_recv(
+	struct tevent_req *req,
+	int *perrno,
+	TALLOC_CTX *mem_ctx,
+	struct tstream_context **stream,
+	struct named_pipe_auth_req_info4 **info4,
+	struct tsocket_address **remote_client_addr,
+	char **_remote_client_name,
+	struct tsocket_address **local_server_addr,
+	char **local_server_name,
+	struct auth_session_info_transport **session_info,
+	const char *location);
 #define tstream_npa_accept_existing_recv(req, perrno, \
 					 mem_ctx, stream, \
+					 info4, \
 					 remote_client_addr, \
 					 remote_client_name,  \
 					 local_server_addr, \
@@ -114,6 +127,7 @@ int _tstream_npa_accept_existing_recv(struct tevent_req *req,
 					 session_info) \
 	_tstream_npa_accept_existing_recv(req, perrno, \
 					  mem_ctx, stream, \
+					  info4, \
 					  remote_client_addr, \
 					  remote_client_name,  \
 					  local_server_addr, \
diff --git a/librpc/idl/named_pipe_auth.idl b/librpc/idl/named_pipe_auth.idl
index e5f0b1833a0..27e4dd799a2 100644
--- a/librpc/idl/named_pipe_auth.idl
+++ b/librpc/idl/named_pipe_auth.idl
@@ -12,7 +12,7 @@ interface named_pipe_auth
 {
 	const char *NAMED_PIPE_AUTH_MAGIC = "NPAM";
 
-	typedef struct {
+	typedef [public] struct {
 		[charset(UTF8),string] uint8 *remote_client_name;
 		[charset(DOS),string] uint8 *remote_client_addr;
 		uint16 remote_client_port;
diff --git a/nsswitch/wbinfo.c b/nsswitch/wbinfo.c
index 7860632bad1..c8006f85d6e 100644
--- a/nsswitch/wbinfo.c
+++ b/nsswitch/wbinfo.c
@@ -1381,7 +1381,7 @@ static bool wbinfo_lookupsid_fullname(const char *sid_str)
 static bool wbinfo_lookuprids(const char *domain, const char *arg)
 {
 	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainInfo *dinfo = NULL;
+	struct wbcDomainSid dsid;
 	char *domain_name = NULL;
 	const char **names = NULL;
 	enum wbcSidType *types = NULL;
@@ -1396,13 +1396,19 @@ static bool wbinfo_lookuprids(const char *domain, const char *arg)
 		domain = get_winbind_domain();
 	}
 
-	/* Send request */
-
-	wbc_status = wbcDomainInfo(domain, &dinfo);
+	wbc_status = wbcStringToSid(domain, &dsid);
 	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		d_printf("wbcDomainInfo(%s) failed: %s\n", domain,
-			 wbcErrorString(wbc_status));
-		goto done;
+		struct wbcDomainInfo *dinfo = NULL;
+
+		wbc_status = wbcDomainInfo(domain, &dinfo);
+		if (!WBC_ERROR_IS_OK(wbc_status)) {
+			d_printf("wbcDomainInfo(%s) failed: %s\n", domain,
+				 wbcErrorString(wbc_status));
+			goto done;
+		}
+
+		dsid = dinfo->sid;
+		wbcFreeMemory(dinfo);
 	}


-- 
Samba Shared Repository



More information about the samba-cvs mailing list