[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Tue Apr 12 05:07:02 MDT 2011


The branch, master has been updated
       via  510e618 s3-util: separate out cmdline helpers.
       via  9c6f78a s3: add some forward declarations.
       via  7ea0384 s3-netapi: use dcerpc_try_samr_connects().
       via  3acd6bd s3-netapi: use libnetapi_get_binding_handle().
       via  0eece62 s3-netapi: add libnetapi_get_binding_handle().
       via  f102748 s3-librpc: let librpc/rpc/dcerpc.h include ndr and generated dcerpc headers.
       via  64b6641 s3-rpc_client: move rpc_cli_transport structs and protos to rpc_transport.h
      from  bb15aa5 s3/selftest Tear down the environment if we fail to connect

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


- Log -----------------------------------------------------------------
commit 510e61871c0c2b2659b80d5f785522184131b1d9
Author: Günther Deschner <gd at samba.org>
Date:   Sat Apr 2 01:00:52 2011 +0200

    s3-util: separate out cmdline helpers.
    
    Guenther
    
    Autobuild-User: Günther Deschner <gd at samba.org>
    Autobuild-Date: Tue Apr 12 13:06:27 CEST 2011 on sn-devel-104

commit 9c6f78aae195c286818f91405b983b127ae17402
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 6 15:16:53 2011 +0200

    s3: add some forward declarations.
    
    Guenther

commit 7ea03840fc817b21d7d333aebc6bbaeded9a0485
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 6 14:40:50 2011 +0200

    s3-netapi: use dcerpc_try_samr_connects().
    
    Guenther

commit 3acd6bde58ecd68faf8200268cc674a71c57778d
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 6 14:35:24 2011 +0200

    s3-netapi: use libnetapi_get_binding_handle().
    
    Guenther

commit 0eece6202c94fdd180f266049e1a3712b9477dc6
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 6 14:21:30 2011 +0200

    s3-netapi: add libnetapi_get_binding_handle().
    
    Guenther

commit f10274806196cbea8d27cc2b1f1fe5087a2ede2b
Author: Günther Deschner <gd at samba.org>
Date:   Thu Mar 31 01:01:05 2011 +0200

    s3-librpc: let librpc/rpc/dcerpc.h include ndr and generated dcerpc headers.
    
    Guenther

commit 64b664155b16b0995af7cc87f54c613350127f9e
Author: Günther Deschner <gd at samba.org>
Date:   Thu Mar 31 00:34:28 2011 +0200

    s3-rpc_client: move rpc_cli_transport structs and protos to rpc_transport.h
    
    Guenther

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

Summary of changes:
 libcli/samsync/samsync.h                   |    2 +
 source3/Makefile.in                        |    2 +-
 source3/include/client.h                   |   56 +------
 source3/include/proto.h                    |   97 ++++------
 source3/lib/netapi/cm.c                    |   23 +++
 source3/lib/netapi/file.c                  |   27 +--
 source3/lib/netapi/getdc.c                 |   27 +--
 source3/lib/netapi/netapi_private.h        |    4 +
 source3/lib/netapi/netlogon.c              |   18 +--
 source3/lib/netapi/samr.c                  |   22 ++-
 source3/lib/netapi/serverinfo.c            |   27 +--
 source3/lib/netapi/share.c                 |   45 ++---
 source3/lib/netapi/shutdown.c              |   18 +--
 source3/lib/util.c                         |  253 -------------------------
 source3/lib/util_cmdline.c                 |  277 ++++++++++++++++++++++++++++
 source3/librpc/rpc/dcerpc.h                |    2 +
 source3/rpc_client/rpc_transport.h         |  107 +++++++++++
 source3/rpc_client/rpc_transport_np.c      |    1 +
 source3/rpc_client/rpc_transport_sock.c    |    1 +
 source3/rpc_client/rpc_transport_tstream.c |    1 +
 source3/winbindd/winbindd_proto.h          |    2 +-
 source3/wscript_build                      |    2 +-
 22 files changed, 532 insertions(+), 482 deletions(-)
 create mode 100644 source3/lib/util_cmdline.c
 create mode 100644 source3/rpc_client/rpc_transport.h


Changeset truncated at 500 lines:

diff --git a/libcli/samsync/samsync.h b/libcli/samsync/samsync.h
index df76f1b..0cd55e4 100644
--- a/libcli/samsync/samsync.h
+++ b/libcli/samsync/samsync.h
@@ -22,6 +22,8 @@
 #ifndef __SAMSYNC_SAMSYNC_H__ 
 #define __SAMSYNC_SAMSYNC_H__ 
 
+struct netlogon_creds_CredentialState;
+
 /**
  * Fix up the delta, dealing with encryption issues so that the final
  * callback need only do the printing or application logic
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 0854114..b3b1de4 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -452,7 +452,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \
 	  lib/wins_srv.o \
 	  lib/util_str.o ../lib/util/base64.o lib/util_sid.o \
 	  lib/util_unistr.o ../lib/util/charset/codepoints.o ../lib/util/charset/util_str.o lib/util_file.o \
-	  lib/util.o lib/util_names.o \
+	  lib/util.o lib/util_cmdline.o lib/util_names.o \
 	  lib/util_sock.o lib/sock_exec.o lib/util_sec.o \
 	  lib/substitute.o lib/dbwrap_util.o \
 	  lib/ms_fnmatch.o lib/errmap_unix.o \
diff --git a/source3/include/client.h b/source3/include/client.h
index 9f8f46c..a4c52c3 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -48,61 +48,7 @@ struct print_job_info {
 	time_t t;
 };
 
-/**
- * rpc_cli_transport defines a transport mechanism to ship rpc requests
- * asynchronously to a server and receive replies
- */
-
-struct rpc_cli_transport {
-
-	enum dcerpc_transport_t transport;
-
-	/**
-	 * Trigger an async read from the server. May return a short read.
-	 */
-	struct tevent_req *(*read_send)(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					uint8_t *data, size_t size,
-					void *priv);
-	/**
-	 * Get the result from the read_send operation.
-	 */
-	NTSTATUS (*read_recv)(struct tevent_req *req, ssize_t *preceived);
-
-	/**
-	 * Trigger an async write to the server. May return a short write.
-	 */
-	struct tevent_req *(*write_send)(TALLOC_CTX *mem_ctx,
-					 struct event_context *ev,
-					 const uint8_t *data, size_t size,
-					 void *priv);
-	/**
-	 * Get the result from the read_send operation.
-	 */
-	NTSTATUS (*write_recv)(struct tevent_req *req, ssize_t *psent);
-
-	/**
-	 * This is an optimization for the SMB transport. It models the
-	 * TransactNamedPipe API call: Send and receive data in one round
-	 * trip. The transport implementation is free to set this to NULL,
-	 * cli_pipe.c will fall back to the explicit write/read routines.
-	 */
-	struct tevent_req *(*trans_send)(TALLOC_CTX *mem_ctx,
-					 struct event_context *ev,
-					 uint8_t *data, size_t data_len,
-					 uint32_t max_rdata_len,
-					 void *priv);
-	/**
-	 * Get the result from the trans_send operation.
-	 */
-	NTSTATUS (*trans_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-			       uint8_t **prdata, uint32_t *prdata_len);
-
-	bool (*is_connected)(void *priv);
-	unsigned int (*set_timeout)(void *priv, unsigned int timeout);
-
-	void *priv;
-};
+#include "rpc_client/rpc_transport.h"
 
 struct dcerpc_binding_handle;
 
diff --git a/source3/include/proto.h b/source3/include/proto.h
index a85b2f9..89a6a05 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -637,38 +637,6 @@ void gfree_all( void );
 const char *my_netbios_names(int i);
 bool set_netbios_aliases(const char **str_array);
 bool init_names(void);
-struct user_auth_info *user_auth_info_init(TALLOC_CTX *mem_ctx);
-const char *get_cmdline_auth_info_username(const struct user_auth_info *auth_info);
-void set_cmdline_auth_info_username(struct user_auth_info *auth_info,
-				    const char *username);
-const char *get_cmdline_auth_info_domain(const struct user_auth_info *auth_info);
-void set_cmdline_auth_info_domain(struct user_auth_info *auth_info,
-				  const char *domain);
-void set_cmdline_auth_info_password(struct user_auth_info *auth_info,
-				    const char *password);
-const char *get_cmdline_auth_info_password(const struct user_auth_info *auth_info);
-bool set_cmdline_auth_info_signing_state(struct user_auth_info *auth_info,
-					 const char *arg);
-int get_cmdline_auth_info_signing_state(const struct user_auth_info *auth_info);
-void set_cmdline_auth_info_use_ccache(struct user_auth_info *auth_info,
-				      bool b);
-bool get_cmdline_auth_info_use_ccache(const struct user_auth_info *auth_info);
-void set_cmdline_auth_info_use_kerberos(struct user_auth_info *auth_info,
-					bool b);
-bool get_cmdline_auth_info_use_kerberos(const struct user_auth_info *auth_info);
-void set_cmdline_auth_info_fallback_after_kerberos(struct user_auth_info *auth_info,
-					bool b);
-bool get_cmdline_auth_info_fallback_after_kerberos(const struct user_auth_info *auth_info);
-void set_cmdline_auth_info_use_krb5_ticket(struct user_auth_info *auth_info);
-void set_cmdline_auth_info_smb_encrypt(struct user_auth_info *auth_info);
-void set_cmdline_auth_info_use_machine_account(struct user_auth_info *auth_info);
-bool get_cmdline_auth_info_got_pass(const struct user_auth_info *auth_info);
-bool get_cmdline_auth_info_smb_encrypt(const struct user_auth_info *auth_info);
-bool get_cmdline_auth_info_use_machine_account(const struct user_auth_info *auth_info);
-struct user_auth_info *get_cmdline_auth_info_copy(TALLOC_CTX *mem_ctx,
-						 const struct user_auth_info *info);
-bool set_cmdline_auth_info_machine_account_creds(struct user_auth_info *auth_info);
-void set_cmdline_auth_info_getpass(struct user_auth_info *auth_info);
 bool file_exist_stat(const char *fname,SMB_STRUCT_STAT *sbuf,
 		     bool fake_dir_create_times);
 bool socket_exist(const char *fname);
@@ -782,6 +750,41 @@ bool tevent_req_poll_ntstatus(struct tevent_req *req,
 bool any_nt_status_not_ok(NTSTATUS err1, NTSTATUS err2, NTSTATUS *result);
 int timeval_to_msec(struct timeval t);
 
+/* The following definitions come from lib/util_cmdline.c  */
+
+struct user_auth_info *user_auth_info_init(TALLOC_CTX *mem_ctx);
+const char *get_cmdline_auth_info_username(const struct user_auth_info *auth_info);
+void set_cmdline_auth_info_username(struct user_auth_info *auth_info,
+				    const char *username);
+const char *get_cmdline_auth_info_domain(const struct user_auth_info *auth_info);
+void set_cmdline_auth_info_domain(struct user_auth_info *auth_info,
+				  const char *domain);
+void set_cmdline_auth_info_password(struct user_auth_info *auth_info,
+				    const char *password);
+const char *get_cmdline_auth_info_password(const struct user_auth_info *auth_info);
+bool set_cmdline_auth_info_signing_state(struct user_auth_info *auth_info,
+					 const char *arg);
+int get_cmdline_auth_info_signing_state(const struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_ccache(struct user_auth_info *auth_info,
+				      bool b);
+bool get_cmdline_auth_info_use_ccache(const struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_kerberos(struct user_auth_info *auth_info,
+					bool b);
+bool get_cmdline_auth_info_use_kerberos(const struct user_auth_info *auth_info);
+void set_cmdline_auth_info_fallback_after_kerberos(struct user_auth_info *auth_info,
+					bool b);
+bool get_cmdline_auth_info_fallback_after_kerberos(const struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_krb5_ticket(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_smb_encrypt(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_machine_account(struct user_auth_info *auth_info);
+bool get_cmdline_auth_info_got_pass(const struct user_auth_info *auth_info);
+bool get_cmdline_auth_info_smb_encrypt(const struct user_auth_info *auth_info);
+bool get_cmdline_auth_info_use_machine_account(const struct user_auth_info *auth_info);
+struct user_auth_info *get_cmdline_auth_info_copy(TALLOC_CTX *mem_ctx,
+						 const struct user_auth_info *info);
+bool set_cmdline_auth_info_machine_account_creds(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_getpass(struct user_auth_info *auth_info);
+
 /* The following definitions come from lib/util_builtin.c  */
 
 bool lookup_builtin_rid(TALLOC_CTX *mem_ctx, uint32 rid, const char **name);
@@ -2691,7 +2694,7 @@ void set_profile_level(int level, struct server_id src);
 bool profile_setup(struct messaging_context *msg_ctx, bool rdonly);
 
 /* The following definitions come from librpc/rpc/rpc_common.c  */
-
+struct ndr_interface_table;
 bool smb_register_ndr_interface(const struct ndr_interface_table *interface);
 const struct ndr_interface_table *get_iface_from_syntax(
 	const struct ndr_syntax_id *syntax);
@@ -2705,6 +2708,7 @@ struct pipes_struct *make_internal_rpc_pipe_p(TALLOC_CTX *mem_ctx,
 					      struct client_address *client_id,
 					      const struct auth_serversupplied_info *session_info,
 					      struct messaging_context *msg_ctx);
+struct dcerpc_binding_handle;
 NTSTATUS rpcint_binding_handle(TALLOC_CTX *mem_ctx,
 			       const struct ndr_interface_table *ndr_table,
 			       struct client_address *client_id,
@@ -2731,31 +2735,6 @@ NTSTATUS get_schannel_session_key(struct cli_state *cli,
 				  uint32 *pneg_flags,
 				  struct rpc_pipe_client **presult);
 
-/* The following definitions come from rpc_client/rpc_transport_np.c  */
-
-struct tevent_req *rpc_transport_np_init_send(TALLOC_CTX *mem_ctx,
-					      struct event_context *ev,
-					      struct cli_state *cli,
-					      const struct ndr_syntax_id *abstract_syntax);
-NTSTATUS rpc_transport_np_init_recv(struct tevent_req *req,
-				    TALLOC_CTX *mem_ctx,
-				    struct rpc_cli_transport **presult);
-NTSTATUS rpc_transport_np_init(TALLOC_CTX *mem_ctx, struct cli_state *cli,
-			       const struct ndr_syntax_id *abstract_syntax,
-			       struct rpc_cli_transport **presult);
-
-/* The following definitions come from rpc_client/rpc_transport_sock.c  */
-
-NTSTATUS rpc_transport_sock_init(TALLOC_CTX *mem_ctx, int fd,
-				 struct rpc_cli_transport **presult);
-
-/* The following definitions come from rpc_client/rpc_transport_tstream.c  */
-
-NTSTATUS rpc_transport_tstream_init(TALLOC_CTX *mem_ctx,
-				struct tstream_context **stream,
-				struct rpc_cli_transport **presult);
-struct cli_state *rpc_pipe_np_smb_conn(struct rpc_pipe_client *p);
-
 /* The following definitions come from rpc_server/rpc_handles.c  */
 
 size_t num_pipe_handles(struct pipes_struct *p);
@@ -2802,7 +2781,7 @@ NTSTATUS rpc_srv_register(int version, const char *clnt,
 NTSTATUS rpc_srv_unregister(const struct ndr_interface_table *iface);
 
 /* The following definitions come from rpc_server/srv_pipe.c  */
-
+struct ncacn_packet;
 bool create_next_pdu(struct pipes_struct *p);
 bool api_pipe_bind_auth3(struct pipes_struct *p, struct ncacn_packet *pkt);
 bool setup_fault_pdu(struct pipes_struct *p, NTSTATUS status);
diff --git a/source3/lib/netapi/cm.c b/source3/lib/netapi/cm.c
index 0b82206..290194b 100644
--- a/source3/lib/netapi/cm.c
+++ b/source3/lib/netapi/cm.c
@@ -253,3 +253,26 @@ WERROR libnetapi_open_pipe(struct libnetapi_ctx *ctx,
 
 	return WERR_OK;
 }
+
+/********************************************************************
+********************************************************************/
+
+WERROR libnetapi_get_binding_handle(struct libnetapi_ctx *ctx,
+				    const char *server_name,
+				    const struct ndr_syntax_id *interface,
+				    struct dcerpc_binding_handle **binding_handle)
+{
+	struct rpc_pipe_client *pipe_cli;
+	WERROR result;
+
+	*binding_handle = NULL;
+
+	result = libnetapi_open_pipe(ctx, server_name, interface, &pipe_cli);
+	if (!W_ERROR_IS_OK(result)) {
+		return result;
+	}
+
+	*binding_handle = pipe_cli->binding_handle;
+
+	return WERR_OK;
+}
diff --git a/source3/lib/netapi/file.c b/source3/lib/netapi/file.c
index a8342ac..1e406d2 100644
--- a/source3/lib/netapi/file.c
+++ b/source3/lib/netapi/file.c
@@ -33,18 +33,15 @@ WERROR NetFileClose_r(struct libnetapi_ctx *ctx,
 {
 	WERROR werr;
 	NTSTATUS status;
-	struct rpc_pipe_client *pipe_cli = NULL;
 	struct dcerpc_binding_handle *b;
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_srvsvc.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_srvsvc.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	status = dcerpc_srvsvc_NetFileClose(b, talloc_tos(),
 					    r->in.server_name,
 					    r->in.fileid,
@@ -116,7 +113,6 @@ WERROR NetFileGetInfo_r(struct libnetapi_ctx *ctx,
 {
 	WERROR werr;
 	NTSTATUS status;
-	struct rpc_pipe_client *pipe_cli = NULL;
 	union srvsvc_NetFileInfo info;
 	uint32_t num_entries = 0;
 	struct dcerpc_binding_handle *b;
@@ -133,15 +129,13 @@ WERROR NetFileGetInfo_r(struct libnetapi_ctx *ctx,
 			return WERR_UNKNOWN_LEVEL;
 	}
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_srvsvc.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_srvsvc.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	status = dcerpc_srvsvc_NetFileGetInfo(b, talloc_tos(),
 					      r->in.server_name,
 					      r->in.fileid,
@@ -187,7 +181,6 @@ WERROR NetFileEnum_r(struct libnetapi_ctx *ctx,
 {
 	WERROR werr;
 	NTSTATUS status;
-	struct rpc_pipe_client *pipe_cli = NULL;
 	struct srvsvc_NetFileInfoCtr info_ctr;
 	struct srvsvc_NetFileCtr2 ctr2;
 	struct srvsvc_NetFileCtr3 ctr3;
@@ -207,15 +200,13 @@ WERROR NetFileEnum_r(struct libnetapi_ctx *ctx,
 			return WERR_UNKNOWN_LEVEL;
 	}
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_srvsvc.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_srvsvc.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	ZERO_STRUCT(info_ctr);
 
 	info_ctr.level = r->in.level;
diff --git a/source3/lib/netapi/getdc.c b/source3/lib/netapi/getdc.c
index fd5cdc2..e753dea 100644
--- a/source3/lib/netapi/getdc.c
+++ b/source3/lib/netapi/getdc.c
@@ -40,20 +40,17 @@ WERROR NetGetDCName_l(struct libnetapi_ctx *ctx,
 WERROR NetGetDCName_r(struct libnetapi_ctx *ctx,
 		      struct NetGetDCName *r)
 {
-	struct rpc_pipe_client *pipe_cli = NULL;
 	NTSTATUS status;
 	WERROR werr;
 	struct dcerpc_binding_handle *b;
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_netlogon.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_netlogon.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	status = dcerpc_netr_GetDcName(b, talloc_tos(),
 				       r->in.server_name,
 				       r->in.domain_name,
@@ -83,20 +80,17 @@ WERROR NetGetAnyDCName_l(struct libnetapi_ctx *ctx,
 WERROR NetGetAnyDCName_r(struct libnetapi_ctx *ctx,
 			 struct NetGetAnyDCName *r)
 {
-	struct rpc_pipe_client *pipe_cli = NULL;
 	NTSTATUS status;
 	WERROR werr;
 	struct dcerpc_binding_handle *b;
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_netlogon.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_netlogon.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	status = dcerpc_netr_GetAnyDCName(b, talloc_tos(),
 					  r->in.server_name,
 					  r->in.domain_name,
@@ -148,18 +142,15 @@ WERROR DsGetDcName_r(struct libnetapi_ctx *ctx,
 {
 	WERROR werr;
 	NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	struct rpc_pipe_client *pipe_cli = NULL;
 	struct dcerpc_binding_handle *b;
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_netlogon.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_netlogon.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	status = dcerpc_netr_DsRGetDCNameEx(b,
 					    ctx,
 					    r->in.server_name,
diff --git a/source3/lib/netapi/netapi_private.h b/source3/lib/netapi/netapi_private.h
index fe8d72e..7559c61 100644
--- a/source3/lib/netapi/netapi_private.h
+++ b/source3/lib/netapi/netapi_private.h
@@ -60,6 +60,10 @@ WERROR libnetapi_open_pipe(struct libnetapi_ctx *ctx,
 			   const char *server_name,
 			   const struct ndr_syntax_id *interface,
 			   struct rpc_pipe_client **presult);
+WERROR libnetapi_get_binding_handle(struct libnetapi_ctx *ctx,
+				    const char *server_name,
+				    const struct ndr_syntax_id *interface,
+				    struct dcerpc_binding_handle **binding_handle);
 WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
 				  struct rpc_pipe_client *pipe_cli,
 				  uint32_t connect_mask,
diff --git a/source3/lib/netapi/netlogon.c b/source3/lib/netapi/netlogon.c
index 0a15063..a046fb7 100644
--- a/source3/lib/netapi/netlogon.c
+++ b/source3/lib/netapi/netlogon.c
@@ -129,19 +129,16 @@ WERROR I_NetLogonControl_r(struct libnetapi_ctx *ctx,
 {
 	WERROR werr;
 	NTSTATUS status;
-	struct rpc_pipe_client *pipe_cli = NULL;
 	union netr_CONTROL_QUERY_INFORMATION query;
 	struct dcerpc_binding_handle *b;
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_netlogon.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_netlogon.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	status = dcerpc_netr_LogonControl(b, talloc_tos(),
 					  r->in.server_name,
 					  r->in.function_code,
@@ -183,7 +180,6 @@ WERROR I_NetLogonControl2_r(struct libnetapi_ctx *ctx,
 {
 	WERROR werr;
 	NTSTATUS status;
-	struct rpc_pipe_client *pipe_cli = NULL;
 	union netr_CONTROL_DATA_INFORMATION data;
 	union netr_CONTROL_QUERY_INFORMATION query;
 	struct dcerpc_binding_handle *b;
@@ -193,15 +189,13 @@ WERROR I_NetLogonControl2_r(struct libnetapi_ctx *ctx,
 		goto done;
 	}
 
-	werr = libnetapi_open_pipe(ctx, r->in.server_name,
-				   &ndr_table_netlogon.syntax_id,
-				   &pipe_cli);
+	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
+					    &ndr_table_netlogon.syntax_id,
+					    &b);
 	if (!W_ERROR_IS_OK(werr)) {
 		goto done;
 	}
 
-	b = pipe_cli->binding_handle;
-
 	switch (r->in.function_code) {
 	case NETLOGON_CONTROL_TC_VERIFY:
 	case NETLOGON_CONTROL_SET_DBFLAG:
diff --git a/source3/lib/netapi/samr.c b/source3/lib/netapi/samr.c
index f859c52..fb30d4d 100644
--- a/source3/lib/netapi/samr.c
+++ b/source3/lib/netapi/samr.c
@@ -81,13 +81,20 @@ WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
 	}
 
 	if (!is_valid_policy_hnd(connect_handle)) {
-		status = rpccli_try_samr_connects(pipe_cli, mem_ctx,
+		NTSTATUS result;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list