summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/client/client.c3
-rw-r--r--source4/gtk/tools/gepdump.c4
-rw-r--r--source4/gtk/tools/gwcrontab.c3
-rw-r--r--source4/gtk/tools/gwsam.c2
-rw-r--r--source4/lib/com/dcom/main.c26
-rw-r--r--source4/lib/registry/reg_backend_rpc.c3
-rw-r--r--source4/libcli/util/clilsa.c2
-rw-r--r--source4/libnet/libnet_join.c12
-rw-r--r--source4/libnet/libnet_passwd.c8
-rw-r--r--source4/libnet/libnet_rpc.c8
-rw-r--r--source4/libnet/libnet_rpc.h4
-rw-r--r--source4/libnet/libnet_share.c12
-rw-r--r--source4/libnet/libnet_time.c4
-rw-r--r--source4/libnet/libnet_user.c4
-rw-r--r--source4/libnet/libnet_vampire.c3
-rw-r--r--source4/librpc/rpc/dcerpc.c10
-rw-r--r--source4/librpc/rpc/dcerpc.h3
-rw-r--r--source4/librpc/rpc/dcerpc_auth.c17
-rw-r--r--source4/librpc/rpc/dcerpc_schannel.c10
-rw-r--r--source4/librpc/rpc/dcerpc_util.c69
-rw-r--r--source4/rpc_server/remote/dcesrv_remote.c21
-rw-r--r--source4/scripting/ejs/smbcalls_rpc.c4
-rw-r--r--source4/torture/ldap/common.c1
-rw-r--r--source4/torture/libnet/domain.c4
-rw-r--r--source4/torture/libnet/libnet_rpc.c12
-rw-r--r--source4/torture/libnet/libnet_share.c4
-rw-r--r--source4/torture/libnet/userinfo.c4
-rw-r--r--source4/torture/libnet/userman.c12
-rw-r--r--source4/torture/rpc/alter_context.c12
-rw-r--r--source4/torture/rpc/atsvc.c6
-rw-r--r--source4/torture/rpc/autoidl.c3
-rw-r--r--source4/torture/rpc/bench.c4
-rw-r--r--source4/torture/rpc/bind.c13
-rw-r--r--source4/torture/rpc/countcalls.c3
-rw-r--r--source4/torture/rpc/dcom.c5
-rw-r--r--source4/torture/rpc/dfs.c4
-rw-r--r--source4/torture/rpc/drsuapi.c4
-rw-r--r--source4/torture/rpc/drsuapi_cracknames.c6
-rw-r--r--source4/torture/rpc/dssetup.c5
-rw-r--r--source4/torture/rpc/dssync.c3
-rw-r--r--source4/torture/rpc/echo.c4
-rw-r--r--source4/torture/rpc/epmapper.c6
-rw-r--r--source4/torture/rpc/eventlog.c6
-rw-r--r--source4/torture/rpc/initshutdown.c6
-rw-r--r--source4/torture/rpc/lsa.c6
-rw-r--r--source4/torture/rpc/mgmt.c10
-rw-r--r--source4/torture/rpc/netlogon.c8
-rw-r--r--source4/torture/rpc/oxidresolve.c8
-rw-r--r--source4/torture/rpc/remact.c4
-rw-r--r--source4/torture/rpc/rot.c4
-rw-r--r--source4/torture/rpc/samlogon.c3
-rw-r--r--source4/torture/rpc/samr.c6
-rw-r--r--source4/torture/rpc/samsync.c10
-rw-r--r--source4/torture/rpc/scanner.c20
-rw-r--r--source4/torture/rpc/schannel.c19
-rw-r--r--source4/torture/rpc/session_key.c4
-rw-r--r--source4/torture/rpc/spoolss.c9
-rw-r--r--source4/torture/rpc/srvsvc.c6
-rw-r--r--source4/torture/rpc/svcctl.c6
-rw-r--r--source4/torture/rpc/testjoin.c4
-rw-r--r--source4/torture/rpc/unixinfo.c5
-rw-r--r--source4/torture/rpc/winreg.c6
-rw-r--r--source4/torture/rpc/wkssvc.c6
-rw-r--r--source4/torture/torture.c12
-rw-r--r--source4/utils/ntlm_auth.c2
-rw-r--r--source4/winbind/wb_async_helpers.c3
-rw-r--r--source4/winbind/wb_connect_lsa.c6
-rw-r--r--source4/winbind/wb_connect_sam.c6
-rw-r--r--source4/winbind/wb_init_domain.c3
69 files changed, 175 insertions, 360 deletions
diff --git a/source4/client/client.c b/source4/client/client.c
index 76d44b6920..2dfd1f940a 100644
--- a/source4/client/client.c
+++ b/source4/client/client.c
@@ -2728,8 +2728,7 @@ static BOOL browse_host(const char *query_host)
binding = talloc_asprintf(mem_ctx, "ncacn_np:%s", query_host);
status = dcerpc_pipe_connect(mem_ctx, &p, binding,
- DCERPC_SRVSVC_UUID,
- DCERPC_SRVSVC_VERSION,
+ &dcerpc_table_srvsvc,
cmdline_credentials, NULL);
if (!NT_STATUS_IS_OK(status)) {
d_printf("Failed to connect to %s - %s\n",
diff --git a/source4/gtk/tools/gepdump.c b/source4/gtk/tools/gepdump.c
index 41d523b7ce..622d4b99aa 100644
--- a/source4/gtk/tools/gepdump.c
+++ b/source4/gtk/tools/gepdump.c
@@ -196,7 +196,7 @@ static void on_connect_clicked(GtkButton *btn, gpointer user_data)
cli_credentials_set_gtk_callbacks(credentials);
status = dcerpc_pipe_connect(talloc_autofree_context(), &epmapper_pipe, bs,
- DCERPC_EPMAPPER_UUID, DCERPC_EPMAPPER_VERSION,
+ &dcerpc_table_epmapper,
credentials, NULL);
if (NT_STATUS_IS_ERR(status)) {
@@ -208,7 +208,7 @@ static void on_connect_clicked(GtkButton *btn, gpointer user_data)
refresh_eps();
- status = dcerpc_secondary_context(epmapper_pipe, &mgmt_pipe, DCERPC_MGMT_UUID, DCERPC_MGMT_VERSION);
+ status = dcerpc_secondary_context(epmapper_pipe, &mgmt_pipe, &dcerpc_table_mgmt);
if (NT_STATUS_IS_ERR(status)) {
mgmt_pipe = NULL;
diff --git a/source4/gtk/tools/gwcrontab.c b/source4/gtk/tools/gwcrontab.c
index 647fdd2c16..fd4f41d06f 100644
--- a/source4/gtk/tools/gwcrontab.c
+++ b/source4/gtk/tools/gwcrontab.c
@@ -107,8 +107,7 @@ static void on_connect_activate(GtkMenuItem *menuitem, gpointer user_data)
status = dcerpc_pipe_connect_b(mem_ctx, &at_pipe,
gtk_rpc_binding_dialog_get_binding(d, mem_ctx),
- DCERPC_ATSVC_UUID,
- DCERPC_ATSVC_VERSION,
+ &dcerpc_table_atsvc,
credentials, NULL);
if(!NT_STATUS_IS_OK(status)) {
diff --git a/source4/gtk/tools/gwsam.c b/source4/gtk/tools/gwsam.c
index 644cc5c043..f1cf8d5e85 100644
--- a/source4/gtk/tools/gwsam.c
+++ b/source4/gtk/tools/gwsam.c
@@ -131,7 +131,7 @@ static void connect_sam(void)
/* If connected, get list of jobs */
status = dcerpc_pipe_connect_b(mem_ctx, &sam_pipe,
gtk_rpc_binding_dialog_get_binding(d, mem_ctx),
- DCERPC_SAMR_UUID, DCERPC_SAMR_VERSION, cred, NULL);
+ &dcerpc_table_samr, cred, NULL);
if(!NT_STATUS_IS_OK(status)) {
gtk_show_ntstatus(mainwin, "While connecting to SAMR interface", status);
diff --git a/source4/lib/com/dcom/main.c b/source4/lib/com/dcom/main.c
index 1ee5608895..4a3dde86ec 100644
--- a/source4/lib/com/dcom/main.c
+++ b/source4/lib/com/dcom/main.c
@@ -82,17 +82,15 @@ static NTSTATUS dcom_connect_host(struct com_context *ctx, struct dcerpc_pipe **
if (server == NULL) {
return dcerpc_pipe_connect(ctx, p, "ncalrpc",
- DCERPC_IREMOTEACTIVATION_UUID,
- DCERPC_IREMOTEACTIVATION_VERSION,
- ctx->dcom->credentials, ctx->event_ctx);
+ &dcerpc_table_IRemoteActivation,
+ ctx->dcom->credentials, ctx->event_ctx);
}
/* Allow server name to contain a binding string */
if (NT_STATUS_IS_OK(dcerpc_parse_binding(mem_ctx, server, &bd))) {
status = dcerpc_pipe_connect_b(ctx, p, bd,
- DCERPC_IREMOTEACTIVATION_UUID,
- DCERPC_IREMOTEACTIVATION_VERSION,
- ctx->dcom->credentials, ctx->event_ctx);
+ &dcerpc_table_IRemoteActivation,
+ ctx->dcom->credentials, ctx->event_ctx);
talloc_free(mem_ctx);
return status;
@@ -107,8 +105,7 @@ static NTSTATUS dcom_connect_host(struct com_context *ctx, struct dcerpc_pipe **
}
status = dcerpc_pipe_connect(ctx, p, binding,
- DCERPC_IREMOTEACTIVATION_UUID,
- DCERPC_IREMOTEACTIVATION_VERSION,
+ &dcerpc_table_IRemoteActivation,
ctx->dcom->credentials, ctx->event_ctx);
if (NT_STATUS_IS_OK(status)) {
@@ -282,7 +279,11 @@ NTSTATUS dcom_get_pipe(struct IUnknown *iface, struct dcerpc_pipe **pp)
if (!GUID_equal(&p->syntax.uuid, &iid)) {
struct dcerpc_pipe *p2;
ox->pipe->syntax.uuid = iid;
- status = dcerpc_secondary_context(p, &p2, uuid, 0);
+
+ /* interface will always be present, so
+ * idl_iface_by_uuid can't return NULL */
+ status = dcerpc_secondary_context(p, &p2, idl_iface_by_uuid(uuid));
+
if (NT_STATUS_IS_OK(status)) {
p = p2;
}
@@ -301,13 +302,10 @@ NTSTATUS dcom_get_pipe(struct IUnknown *iface, struct dcerpc_pipe **pp)
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("Error parsing string binding"));
} else {
- /* TODO: jelmer, please look at this. The
- "NULL" here should be a real event
- context */
status = dcerpc_pipe_connect_b(NULL, &p, binding,
- uuid, 0.0,
+ idl_iface_by_uuid(uuid),
iface->ctx->dcom->credentials,
- NULL);
+ iface->ctx->event_ctx);
}
talloc_free(binding);
i++;
diff --git a/source4/lib/registry/reg_backend_rpc.c b/source4/lib/registry/reg_backend_rpc.c
index 81f002daa2..e799b3a8e4 100644
--- a/source4/lib/registry/reg_backend_rpc.c
+++ b/source4/lib/registry/reg_backend_rpc.c
@@ -371,8 +371,7 @@ WERROR reg_open_remote(struct registry_context **ctx, struct cli_credentials *cr
status = dcerpc_pipe_connect(*ctx /* TALLOC_CTX */,
&p, location,
- DCERPC_WINREG_UUID,
- DCERPC_WINREG_VERSION,
+ &dcerpc_table_winreg,
credentials, ev);
(*ctx)->backend_data = p;
diff --git a/source4/libcli/util/clilsa.c b/source4/libcli/util/clilsa.c
index f5de5014e3..3c7850b7fd 100644
--- a/source4/libcli/util/clilsa.c
+++ b/source4/libcli/util/clilsa.c
@@ -90,7 +90,7 @@ static NTSTATUS smblsa_connect(struct smbcli_state *cli)
}
/* bind to the LSA pipe */
- status = dcerpc_bind_auth_none(lsa->pipe, DCERPC_LSARPC_UUID, DCERPC_LSARPC_VERSION);
+ status = dcerpc_bind_auth_none(lsa->pipe, &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(lsa);
return status;
diff --git a/source4/libnet/libnet_join.c b/source4/libnet/libnet_join.c
index 28d12247c9..11e1dfc175 100644
--- a/source4/libnet/libnet_join.c
+++ b/source4/libnet/libnet_join.c
@@ -274,8 +274,7 @@ static NTSTATUS libnet_JoinADSDomain(struct libnet_context *ctx, struct libnet_J
status = dcerpc_pipe_connect_b(tmp_ctx,
&drsuapi_pipe,
drsuapi_binding,
- DCERPC_DRSUAPI_UUID,
- DCERPC_DRSUAPI_VERSION,
+ &dcerpc_table_drsuapi,
ctx->cred,
ctx->event_ctx);
if (!NT_STATUS_IS_OK(status)) {
@@ -644,9 +643,7 @@ NTSTATUS libnet_JoinDomain(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru
c->level = LIBNET_RPC_CONNECT_BINDING;
c->in.binding = r->in.binding;
}
- c->in.dcerpc_iface_name = DCERPC_LSARPC_NAME;
- c->in.dcerpc_iface_uuid = DCERPC_LSARPC_UUID;
- c->in.dcerpc_iface_version = DCERPC_LSARPC_VERSION;
+ c->in.dcerpc_iface = &dcerpc_table_lsarpc;
/* connect to the LSA pipe of the PDC */
@@ -761,7 +758,7 @@ NTSTATUS libnet_JoinDomain(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru
/* Make binding string for samr, not the other pipe */
status = dcerpc_epm_map_binding(tmp_ctx, samr_binding,
- DCERPC_SAMR_UUID, DCERPC_SAMR_VERSION,
+ &dcerpc_table_samr,
lsa_pipe->conn->event_ctx);
if (!NT_STATUS_IS_OK(status)) {
r->out.error_string = talloc_asprintf(mem_ctx,
@@ -782,8 +779,7 @@ NTSTATUS libnet_JoinDomain(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru
return status;
}
- status = dcerpc_pipe_auth(samr_pipe, samr_binding, DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION, ctx->cred);
+ status = dcerpc_pipe_auth(samr_pipe, samr_binding, &dcerpc_table_samr, ctx->cred);
if (!NT_STATUS_IS_OK(status)) {
r->out.error_string = talloc_asprintf(mem_ctx,
"SAMR bind failed: %s",
diff --git a/source4/libnet/libnet_passwd.c b/source4/libnet/libnet_passwd.c
index cdd5043cb8..db54935a78 100644
--- a/source4/libnet/libnet_passwd.c
+++ b/source4/libnet/libnet_passwd.c
@@ -54,9 +54,7 @@ static NTSTATUS libnet_ChangePassword_samr(struct libnet_context *ctx, TALLOC_CT
/* prepare connect to the SAMR pipe of the users domain PDC */
c.level = LIBNET_RPC_CONNECT_PDC;
c.in.domain_name = r->samr.in.domain_name;
- c.in.dcerpc_iface_name = DCERPC_SAMR_NAME;
- c.in.dcerpc_iface_uuid = DCERPC_SAMR_UUID;
- c.in.dcerpc_iface_version = DCERPC_SAMR_VERSION;
+ c.in.dcerpc_iface = &dcerpc_table_samr;
/* 1. connect to the SAMR pipe of users domain PDC (maybe a standalone server or workstation) */
status = libnet_RpcConnect(ctx, mem_ctx, &c);
@@ -517,9 +515,7 @@ static NTSTATUS libnet_SetPassword_samr(struct libnet_context *ctx, TALLOC_CTX *
/* prepare connect to the SAMR pipe of users domain PDC */
c.level = LIBNET_RPC_CONNECT_PDC;
c.in.domain_name = r->samr.in.domain_name;
- c.in.dcerpc_iface_name = DCERPC_SAMR_NAME;
- c.in.dcerpc_iface_uuid = DCERPC_SAMR_UUID;
- c.in.dcerpc_iface_version = DCERPC_SAMR_VERSION;
+ c.in.dcerpc_iface = &dcerpc_table_samr;
/* 1. connect to the SAMR pipe of users domain PDC (maybe a standalone server or workstation) */
status = libnet_RpcConnect(ctx, mem_ctx, &c);
diff --git a/source4/libnet/libnet_rpc.c b/source4/libnet/libnet_rpc.c
index e926fc3778..6b94734f9b 100644
--- a/source4/libnet/libnet_rpc.c
+++ b/source4/libnet/libnet_rpc.c
@@ -51,13 +51,13 @@ static NTSTATUS libnet_RpcConnectSrv(struct libnet_context *ctx, TALLOC_CTX *mem
/* connect to remote dcerpc pipe */
status = dcerpc_pipe_connect(mem_ctx, &r->out.dcerpc_pipe,
- binding, r->in.dcerpc_iface_uuid, r->in.dcerpc_iface_version,
+ binding, r->in.dcerpc_iface,
ctx->cred, ctx->event_ctx);
if (!NT_STATUS_IS_OK(status)) {
r->out.error_string = talloc_asprintf(mem_ctx,
"dcerpc_pipe_connect to pipe %s failed with %s\n",
- r->in.dcerpc_iface_name, binding);
+ r->in.dcerpc_iface->name, binding);
return status;
}
@@ -98,9 +98,7 @@ static NTSTATUS libnet_RpcConnectPdc(struct libnet_context *ctx, TALLOC_CTX *mem
/* ok, pdc has been found so do attempt to rpc connect */
r2.level = LIBNET_RPC_CONNECT_SERVER;
r2.in.domain_name = talloc_strdup(mem_ctx, f.out.address[0]);
- r2.in.dcerpc_iface_name = r->in.dcerpc_iface_name;
- r2.in.dcerpc_iface_uuid = r->in.dcerpc_iface_uuid;
- r2.in.dcerpc_iface_version = r->in.dcerpc_iface_version;
+ r2.in.dcerpc_iface = r->in.dcerpc_iface;
status = libnet_RpcConnect(ctx, mem_ctx, &r2);
diff --git a/source4/libnet/libnet_rpc.h b/source4/libnet/libnet_rpc.h
index 708084cf58..d2a83bf642 100644
--- a/source4/libnet/libnet_rpc.h
+++ b/source4/libnet/libnet_rpc.h
@@ -36,9 +36,7 @@ struct libnet_RpcConnect {
struct {
const char *domain_name;
const char *binding;
- const char *dcerpc_iface_name;
- const char *dcerpc_iface_uuid;
- uint32_t dcerpc_iface_version;
+ const struct dcerpc_interface_table *dcerpc_iface;
} in;
struct {
struct dcerpc_pipe *dcerpc_pipe;
diff --git a/source4/libnet/libnet_share.c b/source4/libnet/libnet_share.c
index 4b473436e1..0473658da8 100644
--- a/source4/libnet/libnet_share.c
+++ b/source4/libnet/libnet_share.c
@@ -34,9 +34,7 @@ NTSTATUS libnet_ListShares(struct libnet_context *ctx,
c.level = LIBNET_RPC_CONNECT_SERVER;
c.in.domain_name = r->in.server_name;
- c.in.dcerpc_iface_name = DCERPC_SRVSVC_NAME;
- c.in.dcerpc_iface_uuid = DCERPC_SRVSVC_UUID;
- c.in.dcerpc_iface_version = DCERPC_SRVSVC_VERSION;
+ c.in.dcerpc_iface = &dcerpc_table_srvsvc;
status = libnet_RpcConnect(ctx, mem_ctx, &c);
if (!NT_STATUS_IS_OK(status)) {
@@ -87,9 +85,7 @@ NTSTATUS libnet_AddShare(struct libnet_context *ctx,
c.level = LIBNET_RPC_CONNECT_SERVER;
c.in.domain_name = r->in.server_name;
- c.in.dcerpc_iface_name = DCERPC_SRVSVC_NAME;
- c.in.dcerpc_iface_uuid = DCERPC_SRVSVC_UUID;
- c.in.dcerpc_iface_version = DCERPC_SRVSVC_VERSION;
+ c.in.dcerpc_iface = &dcerpc_table_srvsvc;
status = libnet_RpcConnect(ctx, mem_ctx, &c);
if (!NT_STATUS_IS_OK(status)) {
@@ -128,9 +124,7 @@ NTSTATUS libnet_DelShare(struct libnet_context *ctx,
c.level = LIBNET_RPC_CONNECT_SERVER;
c.in.domain_name = r->in.server_name;
- c.in.dcerpc_iface_name = DCERPC_SRVSVC_NAME;
- c.in.dcerpc_iface_uuid = DCERPC_SRVSVC_UUID;
- c.in.dcerpc_iface_version = DCERPC_SRVSVC_VERSION;
+ c.in.dcerpc_iface = &dcerpc_table_srvsvc;
status = libnet_RpcConnect(ctx, mem_ctx, &c);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/libnet/libnet_time.c b/source4/libnet/libnet_time.c
index 63d63e104f..655a475503 100644
--- a/source4/libnet/libnet_time.c
+++ b/source4/libnet/libnet_time.c
@@ -36,9 +36,7 @@ static NTSTATUS libnet_RemoteTOD_srvsvc(struct libnet_context *ctx, TALLOC_CTX *
/* prepare connect to the SRVSVC pipe of a timeserver */
c.level = LIBNET_RPC_CONNECT_SERVER;
c.in.domain_name = r->srvsvc.in.server_name;
- c.in.dcerpc_iface_name = DCERPC_SRVSVC_NAME;
- c.in.dcerpc_iface_uuid = DCERPC_SRVSVC_UUID;
- c.in.dcerpc_iface_version = DCERPC_SRVSVC_VERSION;
+ c.in.dcerpc_iface = &dcerpc_table_srvsvc;
/* 1. connect to the SRVSVC pipe of a timeserver */
status = libnet_RpcConnect(ctx, mem_ctx, &c);
diff --git a/source4/libnet/libnet_user.c b/source4/libnet/libnet_user.c
index 379989dd2b..c8e497a08e 100644
--- a/source4/libnet/libnet_user.c
+++ b/source4/libnet/libnet_user.c
@@ -44,9 +44,7 @@ NTSTATUS libnet_CreateUser(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru
/* connect rpc service of remote server */
cn.level = LIBNET_RPC_CONNECT_SERVER;
cn.in.domain_name = talloc_strdup(mem_ctx, *fp.out.address);
- cn.in.dcerpc_iface_name = DCERPC_SAMR_NAME;
- cn.in.dcerpc_iface_uuid = DCERPC_SAMR_UUID;
- cn.in.dcerpc_iface_version = DCERPC_SAMR_VERSION;
+ cn.in.dcerpc_iface = &dcerpc_table_samr;
status = libnet_RpcConnect(ctx, mem_ctx, &cn);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/libnet/libnet_vampire.c b/source4/libnet/libnet_vampire.c
index 80da646200..d0b7722c08 100644
--- a/source4/libnet/libnet_vampire.c
+++ b/source4/libnet/libnet_vampire.c
@@ -212,8 +212,7 @@ NTSTATUS libnet_SamSync_netlogon(struct libnet_context *ctx, TALLOC_CTX *mem_ctx
/* Setup schannel */
nt_status = dcerpc_pipe_connect_b(samsync_ctx, &p, b,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION,
+ &dcerpc_table_netlogon,
machine_account, ctx->event_ctx);
if (!NT_STATUS_IS_OK(nt_status)) {
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index d8fb3e4e6a..b947b4aa5c 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -790,16 +790,16 @@ NTSTATUS dcerpc_auth3(struct dcerpc_connection *c,
/*
return the rpc syntax and transfer syntax given the pipe uuid and version
*/
-NTSTATUS dcerpc_init_syntaxes(const char *uuid, uint_t version,
+NTSTATUS dcerpc_init_syntaxes(const struct dcerpc_interface_table *table,
struct dcerpc_syntax_id *syntax,
struct dcerpc_syntax_id *transfer_syntax)
{
NTSTATUS status;
- status = GUID_from_string(uuid, &syntax->uuid);
+ status = GUID_from_string(table->uuid, &syntax->uuid);
if (!NT_STATUS_IS_OK(status)) return status;
- syntax->if_version = version;
+ syntax->if_version = table->if_version;
status = GUID_from_string(NDR_GUID, &transfer_syntax->uuid);
if (!NT_STATUS_IS_OK(status)) return status;
@@ -812,13 +812,13 @@ NTSTATUS dcerpc_init_syntaxes(const char *uuid, uint_t version,
/* perform a dcerpc bind, using the uuid as the key */
NTSTATUS dcerpc_bind_byuuid(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
- const char *uuid, uint_t version)
+ const struct dcerpc_interface_table *table)
{
struct dcerpc_syntax_id syntax;
struct dcerpc_syntax_id transfer_syntax;
NTSTATUS status;
- status = dcerpc_init_syntaxes(uuid, version,
+ status = dcerpc_init_syntaxes(table,
&syntax, &transfer_syntax);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(2,("Invalid uuid string in dcerpc_bind_byuuid\n"));
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index 142b2287b6..263121eaef 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -198,9 +198,8 @@ struct dcerpc_binding {
struct dcerpc_pipe_connect {
struct dcerpc_pipe *pipe;
struct dcerpc_binding *binding;
- const char *pipe_uuid;
const char *pipe_name;
- uint32_t pipe_version;
+ const struct dcerpc_interface_table *interface;
struct cli_credentials *creds;
};
diff --git a/source4/librpc/rpc/dcerpc_auth.c b/source4/librpc/rpc/dcerpc_auth.c
index dcf3334212..c66384a3cf 100644
--- a/source4/librpc/rpc/dcerpc_auth.c
+++ b/source4/librpc/rpc/dcerpc_auth.c
@@ -31,8 +31,7 @@
struct composite_context *dcerpc_bind_auth_none_send(TALLOC_CTX *mem_ctx,
struct dcerpc_pipe *p,
- const char *uuid,
- uint_t version)
+ const struct dcerpc_interface_table *table)
{
struct dcerpc_syntax_id syntax;
struct dcerpc_syntax_id transfer_syntax;
@@ -42,7 +41,7 @@ struct composite_context *dcerpc_bind_auth_none_send(TALLOC_CTX *mem_ctx,
c = talloc_zero(mem_ctx, struct composite_context);
if (c == NULL) return NULL;
- c->status = dcerpc_init_syntaxes(uuid, version,
+ c->status = dcerpc_init_syntaxes(table,
&syntax, &transfer_syntax);
if (!NT_STATUS_IS_OK(c->status)) {
DEBUG(2,("Invalid uuid string in "
@@ -63,10 +62,10 @@ NTSTATUS dcerpc_bind_auth_none_recv(struct composite_context *ctx)
}
NTSTATUS dcerpc_bind_auth_none(struct dcerpc_pipe *p,
- const char *uuid, uint_t version)
+ const struct dcerpc_interface_table *table)
{
struct composite_context *ctx;
- ctx = dcerpc_bind_auth_none_send(p, p, uuid, version);
+ ctx = dcerpc_bind_auth_none_send(p, p, table);
return dcerpc_bind_auth_none_recv(ctx);
}
@@ -166,7 +165,7 @@ static void bind_auth_recv_bindreply(struct composite_context *creq)
struct composite_context *dcerpc_bind_auth_send(TALLOC_CTX *mem_ctx,
struct dcerpc_pipe *p,
- const char *uuid, uint_t version,
+ const struct dcerpc_interface_table *table,
struct cli_credentials *credentials,
uint8_t auth_type,
const char *service)
@@ -192,7 +191,7 @@ struct composite_context *dcerpc_bind_auth_send(TALLOC_CTX *mem_ctx,
state->pipe = p;
- c->status = dcerpc_init_syntaxes(uuid, version,
+ c->status = dcerpc_init_syntaxes(table,
&syntax,
&transfer_syntax);
if (!NT_STATUS_IS_OK(c->status)) goto failed;
@@ -321,13 +320,13 @@ NTSTATUS dcerpc_bind_auth_recv(struct composite_context *creq)
setup GENSEC on a DCE-RPC pipe
*/
NTSTATUS dcerpc_bind_auth(struct dcerpc_pipe *p,
- const char *uuid, uint_t version,
+ const struct dcerpc_interface_table *table,
struct cli_credentials *credentials,
uint8_t auth_type,
const char *service)
{
struct composite_context *creq;
- creq = dcerpc_bind_auth_send(p, p, uuid, version, credentials,
+ creq = dcerpc_bind_auth_send(p, p, table, credentials,
auth_type, service);
return dcerpc_bind_auth_recv(creq);
}
diff --git a/source4/librpc/rpc/dcerpc_schannel.c b/source4/librpc/rpc/dcerpc_schannel.c
index e9e31f294f..d6971612f2 100644
--- a/source4/librpc/rpc/dcerpc_schannel.c
+++ b/source4/librpc/rpc/dcerpc_schannel.c
@@ -65,7 +65,7 @@ static NTSTATUS dcerpc_schannel_key(TALLOC_CTX *tmp_ctx,
/* Make binding string for netlogon, not the other pipe */
status = dcerpc_epm_map_binding(tmp_ctx, b,
- DCERPC_NETLOGON_UUID, DCERPC_NETLOGON_VERSION,
+ &dcerpc_table_netlogon,
p->conn->event_ctx);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Failed to map DCERPC/TCP NCACN_NP pipe for '%s' - %s\n",
@@ -78,8 +78,7 @@ static NTSTATUS dcerpc_schannel_key(TALLOC_CTX *tmp_ctx,
return status;
}
- status = dcerpc_bind_auth_none(p2, DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION);
+ status = dcerpc_bind_auth_none(p2, &dcerpc_table_netlogon);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(p2);
return status;
@@ -142,7 +141,7 @@ static NTSTATUS dcerpc_schannel_key(TALLOC_CTX *tmp_ctx,
NTSTATUS dcerpc_bind_auth_schannel(TALLOC_CTX *tmp_ctx,
struct dcerpc_pipe *p,
- const char *uuid, uint_t version,
+ const struct dcerpc_interface_table *table,
struct cli_credentials *credentials)
{
NTSTATUS status;
@@ -158,8 +157,7 @@ NTSTATUS dcerpc_bind_auth_schannel(TALLOC_CTX *tmp_ctx,
return status;
}
- return dcerpc_bind_auth(p, uuid, version,
- credentials, DCERPC_AUTH_TYPE_SCHANNEL,
+ return dcerpc_bind_auth(p, table, credentials, DCERPC_AUTH_TYPE_SCHANNEL,
NULL);
}
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index 72975461d0..039c3a6a45 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -823,7 +823,7 @@ NTSTATUS dcerpc_binding_build_tower(TALLOC_CTX *mem_ctx, struct dcerpc_binding *
}
NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *binding,
- const char *uuid, uint_t version, struct event_context *ev)
+ const struct dcerpc_interface_table *table, struct event_context *ev)
{
struct dcerpc_pipe *p;
NTSTATUS status;
@@ -832,7 +832,6 @@ NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *bind
struct GUID guid;
struct epm_twr_t twr, *twr_r;
struct dcerpc_binding *epmapper_binding;
- const struct dcerpc_interface_table *table = idl_iface_by_uuid(uuid);
int i;
struct cli_credentials *anon_creds
@@ -879,8 +878,7 @@ NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *bind
status = dcerpc_pipe_connect_b(mem_ctx,
&p,
epmapper_binding,
- DCERPC_EPMAPPER_UUID,
- DCERPC_EPMAPPER_VERSION,
+ &dcerpc_table_epmapper,
anon_creds, ev);
if (!NT_STATUS_IS_OK(status)) {
@@ -890,12 +888,12 @@ NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *bind
ZERO_STRUCT(handle);
ZERO_STRUCT(guid);
- status = GUID_from_string(uuid, &binding->object);
+ status = GUID_from_string(table->uuid, &binding->object);
if (NT_STATUS_IS_ERR(status)) {
return status;
}
- binding->object_version = version;
+ binding->object_version = table->if_version;
status = dcerpc_binding_build_tower(p, binding, &twr.tower);
if (NT_STATUS_IS_ERR(status)) {
@@ -944,8 +942,7 @@ NTSTATUS dcerpc_epm_map_binding(TALLOC_CTX *mem_ctx, struct dcerpc_binding *bind
*/
NTSTATUS dcerpc_pipe_auth(struct dcerpc_pipe *p,
struct dcerpc_binding *binding,
- const char *pipe_uuid,
- uint32_t pipe_version,
+ const struct dcerpc_interface_table *table,
struct cli_credentials *credentials)
{
NTSTATUS status;
@@ -964,9 +961,7 @@ NTSTATUS dcerpc_pipe_auth(struct dcerpc_pipe *p,
/* If we don't already have netlogon credentials for
* the schannel bind, then we have to get these
* first */
- status = dcerpc_bind_auth_schannel(tmp_ctx,
- p, pipe_uuid, pipe_version,
- credentials);
+ status = dcerpc_bind_auth_schannel(tmp_ctx, p, table, credentials);
} else if (!cli_credentials_is_anonymous(credentials) &&
!(binding->transport == NCACN_NP &&
!(binding->flags & DCERPC_SIGN) &&
@@ -1001,15 +996,15 @@ NTSTATUS dcerpc_pipe_auth(struct dcerpc_pipe *p,
auth_type = DCERPC_AUTH_TYPE_NTLMSSP;
}
- status = dcerpc_bind_auth(p, pipe_uuid, pipe_version,
+ status = dcerpc_bind_auth(p, table,
credentials, auth_type,
binding->authservice);
} else {
- status = dcerpc_bind_auth_none(p, pipe_uuid, pipe_version);
+ status = dcerpc_bind_auth_none(p, table);
}
if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0,("Failed to bind to uuid %s - %s\n", pipe_uuid, nt_errstr(status)));
+ DEBUG(0,("Failed to bind to uuid %s - %s\n", table->uuid, nt_errstr(status)));
}
talloc_free(tmp_ctx);
return status;
@@ -1034,8 +1029,7 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_np(TALLOC_CTX *tmp_ctx,
static NTSTATUS dcerpc_pipe_connect_ncalrpc(TALLOC_CTX *tmp_ctx,
struct dcerpc_pipe *p,
struct dcerpc_binding *binding,
- const char *pipe_uuid,
- uint32_t pipe_version)
+ const struct dcerpc_interface_table *table)
{
NTSTATUS status;
@@ -1056,8 +1050,7 @@ static NTSTATUS dcerpc_pipe_connect_ncalrpc(TALLOC_CTX *tmp_ctx,
static NTSTATUS dcerpc_pipe_connect_ncacn_unix_stream(TALLOC_CTX *tmp_ctx,
struct dcerpc_pipe *p,
struct dcerpc_binding *binding,
- const char *pipe_uuid,
- uint32_t pipe_version)
+ const struct dcerpc_interface_table *table)
{
NTSTATUS status;
@@ -1071,7 +1064,7 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_unix_stream(TALLOC_CTX *tmp_ctx,
DEBUG(0,("Failed to open unix socket %s - %s\n",
binding->endpoint, nt_errstr(status)));
talloc_free(p);
- return status;
+ return status;
}
return status;
@@ -1082,8 +1075,7 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_unix_stream(TALLOC_CTX *tmp_ctx,
static NTSTATUS dcerpc_pipe_connect_ncacn_ip_tcp(TALLOC_CTX *tmp_ctx,
struct dcerpc_pipe *p,
struct dcerpc_binding *binding,
- const char *pipe_uuid,
- uint32_t pipe_version)
+ const struct dcerpc_interface_table *table)
{
NTSTATUS status;
uint32_t port = 0;
@@ -1106,8 +1098,7 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_ip_tcp(TALLOC_CTX *tmp_ctx,
NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
struct dcerpc_pipe **pp,
struct dcerpc_binding *binding,
- const char *pipe_uuid,
- uint32_t pipe_version,
+ const struct dcerpc_interface_table *table,
struct cli_credentials *credentials,
struct event_context *ev)
{
@@ -1130,12 +1121,11 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
case NCACN_IP_TCP:
case NCALRPC:
if (!binding->endpoint) {
- status = dcerpc_epm_map_binding(tmp_ctx, binding,
- pipe_uuid, pipe_version,
+ status = dcerpc_epm_map_binding(tmp_ctx, binding, table,
p->conn->event_ctx);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Failed to map DCERPC endpoint for '%s' - %s\n",
- pipe_uuid, nt_errstr(status)));
+ table->uuid, nt_errstr(status)));
return status;
}
DEBUG(2,("Mapped to DCERPC endpoint %s\n", binding->endpoint));
@@ -1150,8 +1140,7 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
pc.pipe = p;
pc.binding = binding;
- pc.pipe_uuid = pipe_uuid;
- pc.pipe_version = pipe_version;
+ pc.interface = table;
pc.creds = credentials;
switch (binding->transport) {
@@ -1161,15 +1150,15 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
case NCACN_IP_TCP:
status = dcerpc_pipe_connect_ncacn_ip_tcp(tmp_ctx,
- p, binding, pipe_uuid, pipe_version);
+ p, binding, table);
break;
case NCACN_UNIX_STREAM:
status = dcerpc_pipe_connect_ncacn_unix_stream(tmp_ctx,
- p, binding, pipe_uuid, pipe_version);
+ p, binding, table);
break;
case NCALRPC:
status = dcerpc_pipe_connect_ncalrpc(tmp_ctx,
- p, binding, pipe_uuid, pipe_version);
+ p, binding, table);
break;
default:
return NT_STATUS_NOT_SUPPORTED;
@@ -1180,7 +1169,7 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
return status;
}
- status = dcerpc_pipe_auth(p, binding, pipe_uuid, pipe_version, credentials);
+ status = dcerpc_pipe_auth(p, binding, table, credentials);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(p);
return status;
@@ -1196,9 +1185,8 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
binding to determine the endpoint and options */
NTSTATUS dcerpc_pipe_connect(TALLOC_CTX *parent_ctx,
struct dcerpc_pipe **pp,
- const char *binding,
- const char *pipe_uuid,
- uint32_t pipe_version,
+ const char *binding,
+ const struct dcerpc_interface_table *table,
struct cli_credentials *credentials,
struct event_context *ev)
{
@@ -1220,9 +1208,7 @@ NTSTATUS dcerpc_pipe_connect(TALLOC_CTX *parent_ctx,
DEBUG(3,("Using binding %s\n", dcerpc_binding_string(tmp_ctx, b)));
- status = dcerpc_pipe_connect_b(tmp_ctx,
- pp, b, pipe_uuid, pipe_version,
- credentials, ev);
+ status = dcerpc_pipe_connect_b(tmp_ctx, pp, b, table, credentials, ev);
if (NT_STATUS_IS_OK(status)) {
*pp = talloc_steal(parent_ctx, *pp);
@@ -1344,8 +1330,7 @@ void dcerpc_log_packet(const struct dcerpc_interface_table *ndr,
*/
NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p,
struct dcerpc_pipe **pp2,
- const char *pipe_uuid,
- uint32_t pipe_version)
+ const struct dcerpc_interface_table *table)
{
NTSTATUS status;
struct dcerpc_pipe *p2;
@@ -1359,12 +1344,12 @@ NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p,
p2->context_id = ++p->conn->next_context_id;
- status = GUID_from_string(pipe_uuid, &p2->syntax.uuid);
+ status = GUID_from_string(table->uuid, &p2->syntax.uuid);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(p2);
return status;
}
- p2->syntax.if_version = pipe_version;
+ p2->syntax.if_version = table->if_version;
status = GUID_from_string(NDR_GUID, &p2->transfer_syntax.uuid);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/rpc_server/remote/dcesrv_remote.c b/source4/rpc_server/remote/dcesrv_remote.c
index 9ba2419859..b4f45614f1 100644
--- a/source4/rpc_server/remote/dcesrv_remote.c
+++ b/source4/rpc_server/remote/dcesrv_remote.c
@@ -31,6 +31,7 @@ struct dcesrv_remote_private {
static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct dcesrv_interface *iface)
{
NTSTATUS status;
+ const struct dcerpc_interface_table *table;
struct dcesrv_remote_private *private;
const char *binding = lp_parm_string(-1, "dcerpc_remote", "binding");
const char *user, *pass, *domain;
@@ -48,7 +49,7 @@ static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct
dce_call->context->private = private;
if (!binding) {
- DEBUG(0,("You must specify a ncacn binding string\n"));
+ DEBUG(0,("You must specify a DCE/RPC binding string\n"));
return NT_STATUS_INVALID_PARAMETER;
}
@@ -56,6 +57,12 @@ static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct
pass = lp_parm_string(-1, "dcerpc_remote", "password");
domain = lp_parm_string(-1, "dceprc_remote", "domain");
+ table = idl_iface_by_uuid(iface->uuid); /* FIXME: What about if_version ? */
+ if (!table) {
+ dce_call->fault_code = DCERPC_FAULT_UNK_IF;
+ return NT_STATUS_NET_WRITE_FAULT;
+ }
+
if (user && pass) {
DEBUG(5, ("dcerpc_remote: RPC Proxy: Using specified account\n"));
credentials = cli_credentials_init(private);
@@ -88,8 +95,7 @@ static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const struct
}
status = dcerpc_pipe_connect(private,
- &(private->c_pipe), binding,
- iface->uuid, iface->if_version,
+ &(private->c_pipe), binding, table,
credentials, dce_call->event_ctx);
talloc_free(credentials);
@@ -272,13 +278,10 @@ static BOOL remote_op_interface_by_uuid(struct dcesrv_interface *iface, const ch
static BOOL remote_op_interface_by_name(struct dcesrv_interface *iface, const char *name)
{
- const struct dcerpc_interface_list *l;
+ const struct dcerpc_interface_table *tbl = idl_iface_by_name(name);
- for (l=librpc_dcerpc_pipes();l;l=l->next) {
- if (strcmp(l->table->name, name)==0) {
- return remote_fill_interface(iface, l->table);
- }
- }
+ if (tbl)
+ return remote_fill_interface(iface, tbl);
return False;
}
diff --git a/source4/scripting/ejs/smbcalls_rpc.c b/source4/scripting/ejs/smbcalls_rpc.c
index 6d2d411957..dff04a4c40 100644
--- a/source4/scripting/ejs/smbcalls_rpc.c
+++ b/source4/scripting/ejs/smbcalls_rpc.c
@@ -153,9 +153,7 @@ static int ejs_rpc_connect(MprVarHandle eid, int argc, char **argv)
ev = event_context_find(mprMemCtx());
- status = dcerpc_pipe_connect(this, &p, binding,
- iface->uuid, iface->if_version,
- creds, ev);
+ status = dcerpc_pipe_connect(this, &p, binding, iface, creds, ev);
if (!NT_STATUS_IS_OK(status)) goto done;
/* callers don't allocate ref vars in the ejs interface */
diff --git a/source4/torture/ldap/common.c b/source4/torture/ldap/common.c
index f5b2a1254d..55356b2447 100644
--- a/source4/torture/ldap/common.c
+++ b/source4/torture/ldap/common.c
@@ -24,7 +24,6 @@
#include "includes.h"
#include "asn_1.h"
#include "libcli/ldap/ldap.h"
-#include "auth/gensec/gensec.h"
NTSTATUS torture_ldap_bind(struct ldap_connection *conn, const char *userdn, const char *password)
{
diff --git a/source4/torture/libnet/domain.c b/source4/torture/libnet/domain.c
index 98c44cd942..7f8600d2dd 100644
--- a/source4/torture/libnet/domain.c
+++ b/source4/torture/libnet/domain.c
@@ -83,9 +83,7 @@ BOOL torture_domainopen(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
return False;
diff --git a/source4/torture/libnet/libnet_rpc.c b/source4/torture/libnet/libnet_rpc.c
index 4cd04ecb42..071fe99004 100644
--- a/source4/torture/libnet/libnet_rpc.c
+++ b/source4/torture/libnet/libnet_rpc.c
@@ -31,15 +31,13 @@ BOOL test_lsa_connect(struct libnet_context *ctx)
struct libnet_RpcConnect connect;
connect.level = LIBNET_RPC_CONNECT_PDC;
connect.in.domain_name = lp_workgroup();
- connect.in.dcerpc_iface_name = DCERPC_LSARPC_NAME;
- connect.in.dcerpc_iface_uuid = DCERPC_LSARPC_UUID;
- connect.in.dcerpc_iface_version = DCERPC_LSARPC_VERSION;
+ connect.in.dcerpc_iface = &dcerpc_table_lsarpc;
status = libnet_RpcConnect(ctx, ctx, &connect);
if (!NT_STATUS_IS_OK(status)) {
printf("Couldn't connect to rpc service %s on %s: %s\n",
- connect.in.dcerpc_iface_name, connect.in.domain_name,
+ connect.in.dcerpc_iface->name, connect.in.domain_name,
nt_errstr(status));
return False;
@@ -55,15 +53,13 @@ BOOL test_samr_connect(struct libnet_context *ctx)
struct libnet_RpcConnect connect;
connect.level = LIBNET_RPC_CONNECT_PDC;
connect.in.domain_name = lp_workgroup();
- connect.in.dcerpc_iface_name = DCERPC_SAMR_NAME;
- connect.in.dcerpc_iface_uuid = DCERPC_SAMR_UUID;
- connect.in.dcerpc_iface_version = DCERPC_SAMR_VERSION;
+ connect.in.dcerpc_iface = &dcerpc_table_samr;
status = libnet_RpcConnect(ctx, ctx, &connect);
if (!NT_STATUS_IS_OK(status)) {
printf("Couldn't connect to rpc service %s on %s: %s\n",
- connect.in.dcerpc_iface_name, connect.in.domain_name,
+ connect.in.dcerpc_iface->name, connect.in.domain_name,
nt_errstr(status));
return False;
diff --git a/source4/torture/libnet/libnet_share.c b/source4/torture/libnet/libnet_share.c
index 3d770b4ca1..1f0f5eacd3 100644
--- a/source4/torture/libnet/libnet_share.c
+++ b/source4/torture/libnet/libnet_share.c
@@ -218,9 +218,7 @@ BOOL torture_delshare(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SRVSVC_NAME,
- DCERPC_SRVSVC_UUID,
- DCERPC_SRVSVC_VERSION);
+ &dcerpc_table_srvsvc);
if (!test_addshare(p, mem_ctx, host, TEST_SHARENAME)) {
ret = False;
diff --git a/source4/torture/libnet/userinfo.c b/source4/torture/libnet/userinfo.c
index 63724bc8b1..b987bd5c21 100644
--- a/source4/torture/libnet/userinfo.c
+++ b/source4/torture/libnet/userinfo.c
@@ -279,9 +279,7 @@ BOOL torture_userinfo(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
return False;
diff --git a/source4/torture/libnet/userman.c b/source4/torture/libnet/userman.c
index fc2a32c913..6ec5d9a7b7 100644
--- a/source4/torture/libnet/userman.c
+++ b/source4/torture/libnet/userman.c
@@ -313,9 +313,7 @@ BOOL torture_useradd(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
return False;
@@ -374,9 +372,7 @@ BOOL torture_userdel(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
return False;
@@ -437,9 +433,7 @@ BOOL torture_usermod(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
return False;
diff --git a/source4/torture/rpc/alter_context.c b/source4/torture/rpc/alter_context.c
index 0b2c324d36..a85a850472 100644
--- a/source4/torture/rpc/alter_context.c
+++ b/source4/torture/rpc/alter_context.c
@@ -32,16 +32,14 @@ BOOL torture_rpc_alter_context(void)
TALLOC_CTX *mem_ctx;
BOOL ret = True;
struct policy_handle *handle;
+ struct dcerpc_interface_table tmptbl;
struct dcerpc_syntax_id syntax;
struct dcerpc_syntax_id transfer_syntax;
mem_ctx = talloc_init("torture_rpc_alter_context");
printf("opening LSA connection\n");
- status = torture_rpc_connection(mem_ctx, &p,
- DCERPC_LSARPC_NAME,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
@@ -52,15 +50,17 @@ BOOL torture_rpc_alter_context(void)
}
printf("Opening secondary DSSETUP context\n");
- status = dcerpc_secondary_context(p, &p2, DCERPC_DSSETUP_UUID, DCERPC_DSSETUP_VERSION);
+ status = dcerpc_secondary_context(p, &p2, &dcerpc_table_dssetup);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
printf("dcerpc_alter_context failed - %s\n", nt_errstr(status));
return False;
}
+ tmptbl = dcerpc_table_dssetup;
+ tmptbl.if_version += 100;
printf("Opening bad secondary connection\n");
- status = dcerpc_secondary_context(p, &p2, DCERPC_DSSETUP_UUID, DCERPC_DSSETUP_VERSION+100);
+ status = dcerpc_secondary_context(p, &p2, &tmptbl);
if (NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
printf("dcerpc_alter_context with wrong version should fail\n");
diff --git a/source4/torture/rpc/atsvc.c b/source4/torture/rpc/atsvc.c
index 0be4e3ca58..4447c8ac82 100644
--- a/source4/torture/rpc/atsvc.c
+++ b/source4/torture/rpc/atsvc.c
@@ -142,11 +142,7 @@ BOOL torture_rpc_atsvc(void)
mem_ctx = talloc_init("torture_rpc_atsvc");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_ATSVC_NAME,
- DCERPC_ATSVC_UUID,
- DCERPC_ATSVC_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_atsvc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/autoidl.c b/source4/torture/rpc/autoidl.c
index 4cfee1a379..4abe9f415e 100644
--- a/source4/torture/rpc/autoidl.c
+++ b/source4/torture/rpc/autoidl.c
@@ -94,8 +94,7 @@ static void reopen(TALLOC_CTX *mem_ctx,
talloc_free(*p);
status = torture_rpc_connection(mem_ctx,
- p, iface->endpoints->names[0],
- iface->uuid, iface->if_version);
+ p, iface);
if (!NT_STATUS_IS_OK(status)) {
printf("Failed to reopen '%s' - %s\n", iface->name, nt_errstr(status));
exit(1);
diff --git a/source4/torture/rpc/bench.c b/source4/torture/rpc/bench.c
index a2d0ba1dcf..21afc560a0 100644
--- a/source4/torture/rpc/bench.c
+++ b/source4/torture/rpc/bench.c
@@ -102,9 +102,7 @@ BOOL torture_bench_rpc(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_SRVSVC_NAME,
- DCERPC_SRVSVC_UUID,
- DCERPC_SRVSVC_VERSION);
+ &dcerpc_table_srvsvc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/bind.c b/source4/torture/rpc/bind.c
index 6ab36cf510..d27fbb2b11 100644
--- a/source4/torture/rpc/bind.c
+++ b/source4/torture/rpc/bind.c
@@ -38,8 +38,6 @@
BOOL torture_multi_bind(void)
{
struct dcerpc_pipe *p;
- const char *pipe_uuid = DCERPC_LSARPC_UUID;
- uint32_t pipe_version = DCERPC_LSARPC_VERSION;
struct dcerpc_binding *binding;
const char *binding_string = lp_parm_string(-1, "torture", "binding");
TALLOC_CTX *mem_ctx;
@@ -55,23 +53,18 @@ BOOL torture_multi_bind(void)
return False;
}
- status = torture_rpc_connection(mem_ctx,
- &p,
- NULL,
- pipe_uuid,
- pipe_version);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
}
- status = dcerpc_pipe_auth(p, binding, pipe_uuid, pipe_version,
- cmdline_credentials);
+ status = dcerpc_pipe_auth(p, binding, &dcerpc_table_lsarpc, cmdline_credentials);
if (NT_STATUS_IS_OK(status)) {
printf("(incorrectly) allowed re-bind to uuid %s - %s\n",
- pipe_uuid, nt_errstr(status));
+ dcerpc_table_lsarpc.uuid, nt_errstr(status));
ret = False;
} else {
printf("\n");
diff --git a/source4/torture/rpc/countcalls.c b/source4/torture/rpc/countcalls.c
index cd78e2eba4..0441191ebf 100644
--- a/source4/torture/rpc/countcalls.c
+++ b/source4/torture/rpc/countcalls.c
@@ -44,8 +44,7 @@ BOOL torture_rpc_countcalls(void)
return False;
}
- status = torture_rpc_connection(NULL, &p, iface->endpoints->names[0],
- iface->uuid, iface->if_version);
+ status = torture_rpc_connection(NULL, &p, iface);
if (!NT_STATUS_IS_OK(status)) {
printf("Failed to open '%s' - %s\n", iface->name, nt_errstr(status));
return False;
diff --git a/source4/torture/rpc/dcom.c b/source4/torture/rpc/dcom.c
index 318e9c88ea..92559b95bf 100644
--- a/source4/torture/rpc/dcom.c
+++ b/source4/torture/rpc/dcom.c
@@ -32,10 +32,7 @@ BOOL torture_rpc_dcom(void)
mem_ctx = talloc_init("torture_rpc_dcom");
- status = torture_rpc_connection(mem_ctx, &p,
- DCERPC_IOXIDRESOLVER_NAME,
- DCERPC_IOXIDRESOLVER_UUID,
- DCERPC_IOXIDRESOLVER_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_IOXIDResolver);
if (!NT_STATUS_IS_OK(status)) {
ret = False;
}
diff --git a/source4/torture/rpc/dfs.c b/source4/torture/rpc/dfs.c
index 4e33f921fa..c455786a27 100644
--- a/source4/torture/rpc/dfs.c
+++ b/source4/torture/rpc/dfs.c
@@ -175,9 +175,7 @@ BOOL torture_rpc_dfs(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_NETDFS_NAME,
- DCERPC_NETDFS_UUID,
- DCERPC_NETDFS_VERSION);
+ &dcerpc_table_netdfs);
if (!NT_STATUS_IS_OK(status)) {
return False;
}
diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c
index a3310e144f..9fbf0c21e6 100644
--- a/source4/torture/rpc/drsuapi.c
+++ b/source4/torture/rpc/drsuapi.c
@@ -634,9 +634,7 @@ BOOL torture_rpc_drsuapi(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_DRSUAPI_NAME,
- DCERPC_DRSUAPI_UUID,
- DCERPC_DRSUAPI_VERSION);
+ &dcerpc_table_drsuapi);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/drsuapi_cracknames.c b/source4/torture/rpc/drsuapi_cracknames.c
index 40deb18fab..3bfc0ee18a 100644
--- a/source4/torture/rpc/drsuapi_cracknames.c
+++ b/source4/torture/rpc/drsuapi_cracknames.c
@@ -784,15 +784,13 @@ BOOL torture_rpc_drsuapi_cracknames(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_DRSUAPI_NAME,
- DCERPC_DRSUAPI_UUID,
- DCERPC_DRSUAPI_VERSION);
+ &dcerpc_table_drsuapi);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
}
- printf("Connected to DRAUAPI pipe\n");
+ printf("Connected to DRSUAPI pipe\n");
ZERO_STRUCT(priv);
diff --git a/source4/torture/rpc/dssetup.c b/source4/torture/rpc/dssetup.c
index d4f76fea90..2469d66330 100644
--- a/source4/torture/rpc/dssetup.c
+++ b/source4/torture/rpc/dssetup.c
@@ -64,10 +64,7 @@ BOOL torture_rpc_dssetup(void)
mem_ctx = talloc_init("torture_rpc_dssetup");
- status = torture_rpc_connection(mem_ctx, &p,
- DCERPC_DSSETUP_NAME,
- DCERPC_DSSETUP_UUID,
- DCERPC_DSSETUP_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_dssetup);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/dssync.c b/source4/torture/rpc/dssync.c
index 8daba2438b..e28ff798a8 100644
--- a/source4/torture/rpc/dssync.c
+++ b/source4/torture/rpc/dssync.c
@@ -174,8 +174,7 @@ static BOOL _test_DsBind(struct DsSyncTest *ctx, struct cli_credentials *credent
status = dcerpc_pipe_connect_b(ctx,
&b->pipe, ctx->drsuapi_binding,
- DCERPC_DRSUAPI_UUID,
- DCERPC_DRSUAPI_VERSION,
+ &dcerpc_table_drsuapi,
credentials, event);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/torture/rpc/echo.c b/source4/torture/rpc/echo.c
index ae2be1fe6c..0064374a01 100644
--- a/source4/torture/rpc/echo.c
+++ b/source4/torture/rpc/echo.c
@@ -470,9 +470,7 @@ BOOL torture_rpc_echo(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_RPCECHO_NAME,
- DCERPC_RPCECHO_UUID,
- DCERPC_RPCECHO_VERSION);
+ &dcerpc_table_rpcecho);
if (!NT_STATUS_IS_OK(status)) {
return False;
}
diff --git a/source4/torture/rpc/epmapper.c b/source4/torture/rpc/epmapper.c
index 28877fa1a4..f7935ce2d7 100644
--- a/source4/torture/rpc/epmapper.c
+++ b/source4/torture/rpc/epmapper.c
@@ -281,11 +281,7 @@ BOOL torture_rpc_epmapper(void)
mem_ctx = talloc_init("torture_rpc_epmapper");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_EPMAPPER_NAME,
- DCERPC_EPMAPPER_UUID,
- DCERPC_EPMAPPER_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_epmapper);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/eventlog.c b/source4/torture/rpc/eventlog.c
index 576565e247..56647cfc3e 100644
--- a/source4/torture/rpc/eventlog.c
+++ b/source4/torture/rpc/eventlog.c
@@ -229,11 +229,7 @@ BOOL torture_rpc_eventlog(void)
mem_ctx = talloc_init("torture_rpc_atsvc");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_EVENTLOG_NAME,
- DCERPC_EVENTLOG_UUID,
- DCERPC_EVENTLOG_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_eventlog);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/initshutdown.c b/source4/torture/rpc/initshutdown.c
index ff1496aea4..29893d6515 100644
--- a/source4/torture/rpc/initshutdown.c
+++ b/source4/torture/rpc/initshutdown.c
@@ -120,11 +120,7 @@ BOOL torture_rpc_initshutdown(void)
mem_ctx = talloc_init("torture_rpc_initshutdown");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_INITSHUTDOWN_NAME,
- DCERPC_INITSHUTDOWN_UUID,
- DCERPC_INITSHUTDOWN_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_initshutdown);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c
index 9e5129bf5a..0207c756bd 100644
--- a/source4/torture/rpc/lsa.c
+++ b/source4/torture/rpc/lsa.c
@@ -1818,11 +1818,7 @@ BOOL torture_rpc_lsa(void)
mem_ctx = talloc_init("torture_rpc_lsa");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_LSARPC_NAME,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/mgmt.c b/source4/torture/rpc/mgmt.c
index 7dfa67ce95..72495c248b 100644
--- a/source4/torture/rpc/mgmt.c
+++ b/source4/torture/rpc/mgmt.c
@@ -210,9 +210,7 @@ BOOL torture_rpc_mgmt(void)
printf("\nTesting pipe '%s'\n", l->table->name);
if (b->transport == NCACN_IP_TCP) {
- status = dcerpc_epm_map_binding(loop_ctx, b,
- l->table->uuid,
- l->table->if_version, NULL);
+ status = dcerpc_epm_map_binding(loop_ctx, b, l->table, NULL);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(loop_ctx);
printf("Failed to map port for uuid %s\n", l->table->uuid);
@@ -224,11 +222,7 @@ BOOL torture_rpc_mgmt(void)
lp_set_cmdline("torture:binding", dcerpc_binding_string(loop_ctx, b));
- status = torture_rpc_connection(loop_ctx,
- &p,
- l->table->name,
- DCERPC_MGMT_UUID,
- DCERPC_MGMT_VERSION);
+ status = torture_rpc_connection(loop_ctx, &p, &dcerpc_table_mgmt);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(loop_ctx);
ret = False;
diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c
index a02f670439..1958b9cdfd 100644
--- a/source4/torture/rpc/netlogon.c
+++ b/source4/torture/rpc/netlogon.c
@@ -1436,8 +1436,7 @@ static BOOL test_ManyGetDCName(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
return False;
}
- status = dcerpc_bind_auth_none(p2, DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION);
+ status = dcerpc_bind_auth_none(p2, &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
printf("Failed to create bind on secondary connection\n");
return False;
@@ -1526,10 +1525,7 @@ BOOL torture_rpc_netlogon(void)
machine_password = cli_credentials_get_password(machine_credentials);
- status = torture_rpc_connection(mem_ctx, &p,
- DCERPC_NETLOGON_NAME,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_netlogon);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/oxidresolve.c b/source4/torture/rpc/oxidresolve.c
index 8bb1a7ae0a..61ef9b8ee8 100644
--- a/source4/torture/rpc/oxidresolve.c
+++ b/source4/torture/rpc/oxidresolve.c
@@ -227,9 +227,7 @@ BOOL torture_rpc_oxidresolve(void)
status = torture_rpc_connection(mem_ctx,
&premact,
- DCERPC_IREMOTEACTIVATION_NAME,
- DCERPC_IREMOTEACTIVATION_UUID,
- DCERPC_IREMOTEACTIVATION_VERSION);
+ &dcerpc_table_IRemoteActivation);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
@@ -238,9 +236,7 @@ BOOL torture_rpc_oxidresolve(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_IOXIDRESOLVER_NAME,
- DCERPC_IOXIDRESOLVER_UUID,
- DCERPC_IOXIDRESOLVER_VERSION);
+ &dcerpc_table_IOXIDResolver);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/remact.c b/source4/torture/rpc/remact.c
index bbda197854..84d0a2e35c 100644
--- a/source4/torture/rpc/remact.c
+++ b/source4/torture/rpc/remact.c
@@ -105,9 +105,7 @@ BOOL torture_rpc_remact(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_IREMOTEACTIVATION_NAME,
- DCERPC_IREMOTEACTIVATION_UUID,
- DCERPC_IREMOTEACTIVATION_VERSION);
+ &dcerpc_table_IRemoteActivation);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/rot.c b/source4/torture/rpc/rot.c
index ee47fe350e..c7694aa408 100644
--- a/source4/torture/rpc/rot.c
+++ b/source4/torture/rpc/rot.c
@@ -33,9 +33,7 @@ BOOL torture_rpc_rot(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_ROT_NAME,
- DCERPC_ROT_UUID,
- DCERPC_ROT_VERSION);
+ &dcerpc_table_rot);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/samlogon.c b/source4/torture/rpc/samlogon.c
index 43ab3f9874..996d78d25f 100644
--- a/source4/torture/rpc/samlogon.c
+++ b/source4/torture/rpc/samlogon.c
@@ -1537,8 +1537,7 @@ BOOL torture_rpc_samlogon(void)
b->flags |= DCERPC_SCHANNEL | DCERPC_SIGN | DCERPC_SCHANNEL_128;
status = dcerpc_pipe_connect_b(mem_ctx, &p, b,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION,
+ &dcerpc_table_netlogon,
machine_credentials, NULL);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c
index 42c005ab90..210e5def21 100644
--- a/source4/torture/rpc/samr.c
+++ b/source4/torture/rpc/samr.c
@@ -3350,11 +3350,7 @@ BOOL torture_rpc_samr(void)
mem_ctx = talloc_init("torture_rpc_samr");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/samsync.c b/source4/torture/rpc/samsync.c
index 7f77844459..98fea05a1d 100644
--- a/source4/torture/rpc/samsync.c
+++ b/source4/torture/rpc/samsync.c
@@ -1475,9 +1475,7 @@ BOOL torture_rpc_samsync(void)
status = torture_rpc_connection(samsync_state,
&samsync_state->p_lsa,
- DCERPC_LSARPC_NAME,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION);
+ &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
ret = False;
@@ -1529,8 +1527,7 @@ BOOL torture_rpc_samsync(void)
status = dcerpc_pipe_connect_b(samsync_state,
&samsync_state->p, b,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION,
+ &dcerpc_table_netlogon,
credentials, NULL);
if (!NT_STATUS_IS_OK(status)) {
@@ -1569,8 +1566,7 @@ BOOL torture_rpc_samsync(void)
status = dcerpc_pipe_connect_b(samsync_state,
&samsync_state->p_netlogon_wksta,
b_netlogon_wksta,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION,
+ &dcerpc_table_netlogon,
credentials_wksta, NULL);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/torture/rpc/scanner.c b/source4/torture/rpc/scanner.c
index a0adcea0ac..1f612fbaee 100644
--- a/source4/torture/rpc/scanner.c
+++ b/source4/torture/rpc/scanner.c
@@ -36,12 +36,16 @@ static BOOL test_num_calls(const struct dcerpc_interface_table *iface,
int i;
DATA_BLOB stub_in, stub_out;
int idl_calls;
+ struct dcerpc_interface_table tbl;
- uuid = GUID_string(mem_ctx, &id->uuid);
+ /* FIXME: This should be fixed when torture_rpc_connection
+ * takes a dcerpc_syntax_id */
+ tbl.name = iface->name;
+ tbl.uuid = GUID_string(mem_ctx, &id->uuid);
+ tbl.if_version = id->if_version;
status = torture_rpc_connection(mem_ctx,
- &p, iface->name,
- uuid, id->if_version);
+ &p, iface);
if (!NT_STATUS_IS_OK(status)) {
printf("Failed to connect to '%s' on '%s' - %s\n",
uuid, iface->name, nt_errstr(status));
@@ -166,9 +170,7 @@ BOOL torture_rpc_scanner(void)
printf("\nTesting pipe '%s'\n", l->table->name);
if (b->transport == NCACN_IP_TCP) {
- status = dcerpc_epm_map_binding(mem_ctx, b,
- l->table->uuid,
- l->table->if_version, NULL);
+ status = dcerpc_epm_map_binding(mem_ctx, b, l->table, NULL);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(loop_ctx);
printf("Failed to map port for uuid %s\n", l->table->uuid);
@@ -180,11 +182,7 @@ BOOL torture_rpc_scanner(void)
lp_set_cmdline("torture:binding", dcerpc_binding_string(mem_ctx, b));
- status = torture_rpc_connection(loop_ctx,
- &p,
- l->table->name,
- DCERPC_MGMT_UUID,
- DCERPC_MGMT_VERSION);
+ status = torture_rpc_connection(loop_ctx, &p, &dcerpc_table_mgmt);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(loop_ctx);
ret = False;
diff --git a/source4/torture/rpc/schannel.c b/source4/torture/rpc/schannel.c
index 338a71d27b..d0d7e051cb 100644
--- a/source4/torture/rpc/schannel.c
+++ b/source4/torture/rpc/schannel.c
@@ -181,10 +181,7 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx,
b->flags &= ~DCERPC_AUTH_OPTIONS;
b->flags |= dcerpc_flags;
- status = dcerpc_pipe_connect_b(test_ctx,
- &p, b,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION,
+ status = dcerpc_pipe_connect_b(test_ctx, &p, b, &dcerpc_table_samr,
credentials, NULL);
if (!NT_STATUS_IS_OK(status)) {
printf("Failed to connect with schannel: %s\n", nt_errstr(status));
@@ -201,8 +198,7 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx,
* the second */
/* Swap the binding details from SAMR to NETLOGON */
- status = dcerpc_epm_map_binding(test_ctx, b, DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION, NULL);
+ status = dcerpc_epm_map_binding(test_ctx, b, &dcerpc_table_netlogon, NULL);
if (!NT_STATUS_IS_OK(status)) {
goto failed;
}
@@ -214,9 +210,7 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx,
goto failed;
}
- status = dcerpc_bind_auth(p_netlogon,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION,
+ status = dcerpc_bind_auth(p_netlogon, &dcerpc_table_netlogon,
credentials, DCERPC_AUTH_TYPE_SCHANNEL,
NULL);
@@ -236,8 +230,7 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx,
}
/* Swap the binding details from SAMR to LSARPC */
- status = dcerpc_epm_map_binding(test_ctx, b, DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION, NULL);
+ status = dcerpc_epm_map_binding(test_ctx, b, &dcerpc_table_lsarpc, NULL);
if (!NT_STATUS_IS_OK(status)) {
goto failed;
}
@@ -249,9 +242,7 @@ static BOOL test_schannel(TALLOC_CTX *mem_ctx,
goto failed;
}
- status = dcerpc_bind_auth(p_lsa,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION,
+ status = dcerpc_bind_auth(p_lsa, &dcerpc_table_lsarpc,
credentials, DCERPC_AUTH_TYPE_SCHANNEL,
NULL);
diff --git a/source4/torture/rpc/session_key.c b/source4/torture/rpc/session_key.c
index 035ab7ace2..898991d88e 100644
--- a/source4/torture/rpc/session_key.c
+++ b/source4/torture/rpc/session_key.c
@@ -169,9 +169,7 @@ BOOL torture_rpc_lsa_secrets(void)
status = torture_rpc_connection(mem_ctx,
&p,
- DCERPC_LSARPC_NAME,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION);
+ &dcerpc_table_lsarpc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index 76c8673d4f..89407e33cc 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -1622,8 +1622,7 @@ static BOOL test_SecondaryClosePrinter(struct dcerpc_pipe *p, TALLOC_CTX *mem_ct
return False;
}
- status = dcerpc_bind_auth_none(p2, DCERPC_SPOOLSS_UUID,
- DCERPC_SPOOLSS_VERSION);
+ status = dcerpc_bind_auth_none(p2, &dcerpc_table_spoolss);
if (!NT_STATUS_IS_OK(status)) {
printf("Failed to create bind on secondary connection\n");
talloc_free(p2);
@@ -2059,11 +2058,7 @@ BOOL torture_rpc_spoolss(void)
mem_ctx = talloc_init("torture_rpc_spoolss");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_SPOOLSS_NAME,
- DCERPC_SPOOLSS_UUID,
- DCERPC_SPOOLSS_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_spoolss);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/srvsvc.c b/source4/torture/rpc/srvsvc.c
index 13b6cde675..422e06f056 100644
--- a/source4/torture/rpc/srvsvc.c
+++ b/source4/torture/rpc/srvsvc.c
@@ -719,11 +719,7 @@ BOOL torture_rpc_srvsvc(void)
mem_ctx = talloc_init("torture_rpc_srvsvc");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_SRVSVC_NAME,
- DCERPC_SRVSVC_UUID,
- DCERPC_SRVSVC_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_srvsvc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/svcctl.c b/source4/torture/rpc/svcctl.c
index 44b79058a9..102e3bad91 100644
--- a/source4/torture/rpc/svcctl.c
+++ b/source4/torture/rpc/svcctl.c
@@ -117,11 +117,7 @@ BOOL torture_rpc_svcctl(void)
mem_ctx = talloc_init("torture_rpc_svcctl");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_SVCCTL_NAME,
- DCERPC_SVCCTL_UUID,
- DCERPC_SVCCTL_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_svcctl);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/rpc/testjoin.c b/source4/torture/rpc/testjoin.c
index 66cb4a42c1..80342fa8bc 100644
--- a/source4/torture/rpc/testjoin.c
+++ b/source4/torture/rpc/testjoin.c
@@ -128,9 +128,7 @@ struct test_join *torture_create_testuser(const char *username,
status = torture_rpc_connection(join,
&join->p,
- DCERPC_SAMR_NAME,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
if (!NT_STATUS_IS_OK(status)) {
return NULL;
}
diff --git a/source4/torture/rpc/unixinfo.c b/source4/torture/rpc/unixinfo.c
index caa268b0c8..24d6a30d55 100644
--- a/source4/torture/rpc/unixinfo.c
+++ b/source4/torture/rpc/unixinfo.c
@@ -72,10 +72,7 @@ BOOL torture_rpc_unixinfo(void)
mem_ctx = talloc_init("torture_rpc_unixinfo");
- status = torture_rpc_connection(mem_ctx, &p,
- DCERPC_UNIXINFO_NAME,
- DCERPC_UNIXINFO_UUID,
- DCERPC_UNIXINFO_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_unixinfo);
if (!NT_STATUS_IS_OK(status)) {
return False;
}
diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c
index cfcb91cafb..3aaa7521fa 100644
--- a/source4/torture/rpc/winreg.c
+++ b/source4/torture/rpc/winreg.c
@@ -798,11 +798,7 @@ BOOL torture_rpc_winreg(void)
int i;
mem_ctx = talloc_init("torture_rpc_winreg");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_WINREG_NAME,
- DCERPC_WINREG_UUID,
- DCERPC_WINREG_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_winreg);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/wkssvc.c b/source4/torture/rpc/wkssvc.c
index 7b8388b125..7e71fc29b2 100644
--- a/source4/torture/rpc/wkssvc.c
+++ b/source4/torture/rpc/wkssvc.c
@@ -95,11 +95,7 @@ BOOL torture_rpc_wkssvc(void)
mem_ctx = talloc_init("torture_rpc_wkssvc");
- status = torture_rpc_connection(mem_ctx,
- &p,
- DCERPC_WKSSVC_NAME,
- DCERPC_WKSSVC_UUID,
- DCERPC_WKSSVC_VERSION);
+ status = torture_rpc_connection(mem_ctx, &p, &dcerpc_table_wkssvc);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(mem_ctx);
return False;
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index 412db115b7..a86a925778 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -123,9 +123,7 @@ BOOL torture_close_connection(struct smbcli_state *c)
/* open a rpc connection to the chosen binding string */
NTSTATUS torture_rpc_connection(TALLOC_CTX *parent_ctx,
struct dcerpc_pipe **p,
- const char *pipe_name,
- const char *pipe_uuid,
- uint32_t pipe_version)
+ const struct dcerpc_interface_table *table)
{
NTSTATUS status;
const char *binding = lp_parm_string(-1, "torture", "binding");
@@ -136,7 +134,7 @@ NTSTATUS torture_rpc_connection(TALLOC_CTX *parent_ctx,
}
status = dcerpc_pipe_connect(parent_ctx,
- p, binding, pipe_uuid, pipe_version,
+ p, binding, table,
cmdline_credentials, NULL);
return status;
@@ -145,9 +143,7 @@ NTSTATUS torture_rpc_connection(TALLOC_CTX *parent_ctx,
/* open a rpc connection to a specific transport */
NTSTATUS torture_rpc_connection_transport(TALLOC_CTX *parent_ctx,
struct dcerpc_pipe **p,
- const char *pipe_name,
- const char *pipe_uuid,
- uint32_t pipe_version,
+ const struct dcerpc_interface_table *table,
enum dcerpc_transport_t transport)
{
NTSTATUS status;
@@ -170,7 +166,7 @@ NTSTATUS torture_rpc_connection_transport(TALLOC_CTX *parent_ctx,
b->transport = transport;
- status = dcerpc_pipe_connect_b(mem_ctx, p, b, pipe_uuid, pipe_version,
+ status = dcerpc_pipe_connect_b(mem_ctx, p, b, table,
cmdline_credentials, NULL);
if (NT_STATUS_IS_OK(status)) {
diff --git a/source4/utils/ntlm_auth.c b/source4/utils/ntlm_auth.c
index 22fd377dca..54920664ec 100644
--- a/source4/utils/ntlm_auth.c
+++ b/source4/utils/ntlm_auth.c
@@ -875,7 +875,7 @@ enum {
OPT_MULTIPLEX,
};
- int main(int argc, const char **argv)
+int main(int argc, const char **argv)
{
static const char *helper_protocol;
int opt;
diff --git a/source4/winbind/wb_async_helpers.c b/source4/winbind/wb_async_helpers.c
index f6c61c8c36..330a6b4534 100644
--- a/source4/winbind/wb_async_helpers.c
+++ b/source4/winbind/wb_async_helpers.c
@@ -247,8 +247,7 @@ static void get_schannel_creds_recv_pipe(struct composite_context *creq)
if (!composite_is_ok(c)) return;
creq = dcerpc_bind_auth_none_send(state, state->p,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION);
+ &dcerpc_table_netlogon);
composite_continue(c, creq, get_schannel_creds_recv_anonbind, c);
}
diff --git a/source4/winbind/wb_connect_lsa.c b/source4/winbind/wb_connect_lsa.c
index 9443ef0dc7..76f75eb0a4 100644
--- a/source4/winbind/wb_connect_lsa.c
+++ b/source4/winbind/wb_connect_lsa.c
@@ -95,8 +95,7 @@ static void init_lsa_recv_pipe(struct composite_context *ctx)
switch (state->auth_type) {
case DCERPC_AUTH_TYPE_NONE:
ctx = dcerpc_bind_auth_none_send(state, state->lsa_pipe,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION);
+ &dcerpc_table_lsarpc);
composite_continue(state->ctx, ctx, init_lsa_recv_anon_bind,
state);
break;
@@ -108,8 +107,7 @@ static void init_lsa_recv_pipe(struct composite_context *ctx)
}
state->lsa_pipe->conn->flags |= (DCERPC_SIGN | DCERPC_SEAL);
ctx = dcerpc_bind_auth_send(state, state->lsa_pipe,
- DCERPC_LSARPC_UUID,
- DCERPC_LSARPC_VERSION,
+ &dcerpc_table_lsarpc,
state->creds, state->auth_type,
NULL);
composite_continue(state->ctx, ctx, init_lsa_recv_auth_bind,
diff --git a/source4/winbind/wb_connect_sam.c b/source4/winbind/wb_connect_sam.c
index b5511a1a12..e3b9c82310 100644
--- a/source4/winbind/wb_connect_sam.c
+++ b/source4/winbind/wb_connect_sam.c
@@ -102,8 +102,7 @@ static void connect_samr_recv_pipe(struct composite_context *ctx)
switch (state->auth_type) {
case DCERPC_AUTH_TYPE_NONE:
ctx = dcerpc_bind_auth_none_send(state, state->samr_pipe,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION);
+ &dcerpc_table_samr);
composite_continue(state->ctx, ctx,
connect_samr_recv_anon_bind, state);
break;
@@ -115,8 +114,7 @@ static void connect_samr_recv_pipe(struct composite_context *ctx)
}
state->samr_pipe->conn->flags |= (DCERPC_SIGN | DCERPC_SEAL);
ctx = dcerpc_bind_auth_send(state, state->samr_pipe,
- DCERPC_SAMR_UUID,
- DCERPC_SAMR_VERSION,
+ &dcerpc_table_samr,
state->creds, state->auth_type,
NULL);
composite_continue(state->ctx, ctx,
diff --git a/source4/winbind/wb_init_domain.c b/source4/winbind/wb_init_domain.c
index 07126dd04f..8b49ed7397 100644
--- a/source4/winbind/wb_init_domain.c
+++ b/source4/winbind/wb_init_domain.c
@@ -216,8 +216,7 @@ static void init_domain_recv_netlogonpipe(struct composite_context *ctx)
state->domain->netlogon_pipe->conn->flags |=
(DCERPC_SIGN | DCERPC_SEAL);
ctx = dcerpc_bind_auth_send(state, state->domain->netlogon_pipe,
- DCERPC_NETLOGON_UUID,
- DCERPC_NETLOGON_VERSION,
+ &dcerpc_table_netlogon,
state->domain->schannel_creds,
DCERPC_AUTH_TYPE_SCHANNEL,
NULL);