summaryrefslogtreecommitdiff
path: root/source4/librpc
diff options
context:
space:
mode:
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/idl/drsuapi.idl2
-rw-r--r--source4/librpc/idl/echo.idl2
-rw-r--r--source4/librpc/idl/epmapper.idl2
-rw-r--r--source4/librpc/idl/lsa.idl2
-rw-r--r--source4/librpc/idl/lsads.idl2
-rw-r--r--source4/librpc/idl/netlogon.idl2
-rw-r--r--source4/librpc/idl/oxidresolver.idl2
-rw-r--r--source4/librpc/idl/samr.idl2
-rw-r--r--source4/librpc/idl/spoolss.idl2
-rw-r--r--source4/librpc/idl/w32time.idl2
-rw-r--r--source4/librpc/idl/winreg.idl2
-rw-r--r--source4/librpc/rpc/dcerpc_smb.c11
-rw-r--r--source4/librpc/rpc/dcerpc_util.c37
13 files changed, 41 insertions, 29 deletions
diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl
index a59dec5a29..15ebb6077d 100644
--- a/source4/librpc/idl/drsuapi.idl
+++ b/source4/librpc/idl/drsuapi.idl
@@ -3,7 +3,7 @@
[
uuid(e3514235-4b06-11d1-ab04-00c04fc2dcd2),
version(4.0),
- endpoints(lsass,protected_storage,TCP-0),
+ endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]","ncacn_ip_tcp:"),
helpstring("Active Directory Replication"),
pointer_default(unique)
]
diff --git a/source4/librpc/idl/echo.idl b/source4/librpc/idl/echo.idl
index f8cc734513..e54b3914f8 100644
--- a/source4/librpc/idl/echo.idl
+++ b/source4/librpc/idl/echo.idl
@@ -3,7 +3,7 @@
[
uuid(60a15ec5-4de8-11d7-a637-005056a20182),
- endpoints(rpcecho, TCP-0),
+ endpoint("ncacn_np:[\\pipe\\rpcecho]", "ncacn_ip_tcp:"),
version(1.0),
helpstring("Simple echo pipe")
]
diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl
index 18bb6bf7d7..eaf2b185f6 100644
--- a/source4/librpc/idl/epmapper.idl
+++ b/source4/librpc/idl/epmapper.idl
@@ -11,7 +11,7 @@ http://www.opengroup.org/onlinepubs/9629399/chap6.htm#tagcjh_11_02_03_01: bindin
[
uuid(e1af8308-5d1f-11c9-91a4-08002b14a0fa),
version(3.0),
- endpoints(epmapper, TCP-135),
+ endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]"),
pointer_default(unique)
]
interface epmapper
diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl
index fe3aa1d51b..ca1090545a 100644
--- a/source4/librpc/idl/lsa.idl
+++ b/source4/librpc/idl/lsa.idl
@@ -6,7 +6,7 @@
[ uuid(12345778-1234-abcd-ef00-0123456789ab),
version(0.0),
- endpoints(lsarpc,lsass,TCP-0),
+ endpoint("ncacn_np:[\\pipe\\lsarpc]","ncacn_np:[\\pipe\\lsass]","ncacn_ip_tcp:"),
pointer_default(unique),
helpstring("Local Server Authentication(?)")
] interface lsarpc
diff --git a/source4/librpc/idl/lsads.idl b/source4/librpc/idl/lsads.idl
index 53ff69d687..3caed0f92f 100644
--- a/source4/librpc/idl/lsads.idl
+++ b/source4/librpc/idl/lsads.idl
@@ -3,7 +3,7 @@
[
uuid(3919286a-b10c-11d0-9ba8-00c04fd92ef5),
version(0.0),
- endpoints(lsarpc,lsass),
+ endpoint("ncacn_np:[\\pipe\\lsarpc]","ncacn_np:[\\pipe\\lsass]"),
pointer_default(unique)
]
interface lsads
diff --git a/source4/librpc/idl/netlogon.idl b/source4/librpc/idl/netlogon.idl
index d52fd2e757..9e0c3c4576 100644
--- a/source4/librpc/idl/netlogon.idl
+++ b/source4/librpc/idl/netlogon.idl
@@ -9,7 +9,7 @@
[
uuid(12345678-1234-abcd-ef00-01234567cffb),
version(1.0),
- endpoints(netlogon,TCP-0),
+ endpoint("ncacn_np:[\\pipe\\netlogon]","ncacn_ip_tcp:"),
pointer_default(unique)
]
diff --git a/source4/librpc/idl/oxidresolver.idl b/source4/librpc/idl/oxidresolver.idl
index 1ef20e5bf0..6354e7b380 100644
--- a/source4/librpc/idl/oxidresolver.idl
+++ b/source4/librpc/idl/oxidresolver.idl
@@ -15,7 +15,7 @@
[
uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
helpstring("Object Exporter ID Resolver"),
- endpoints(epmapper, TCP-135),
+ endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]"),
pointer_default(unique)
]
interface IOXIDResolver
diff --git a/source4/librpc/idl/samr.idl b/source4/librpc/idl/samr.idl
index 8feb726ac8..42a549cc5c 100644
--- a/source4/librpc/idl/samr.idl
+++ b/source4/librpc/idl/samr.idl
@@ -10,7 +10,7 @@
[ uuid(12345778-1234-abcd-ef00-0123456789ac),
version(1.0),
- endpoints(samr,TCP-0),
+ endpoint("ncacn_np:[\\pipe\\samr]","ncacn_ip_tcp:"),
pointer_default(unique)
] interface samr
{
diff --git a/source4/librpc/idl/spoolss.idl b/source4/librpc/idl/spoolss.idl
index 4ee9eab90c..be6dae084a 100644
--- a/source4/librpc/idl/spoolss.idl
+++ b/source4/librpc/idl/spoolss.idl
@@ -6,7 +6,7 @@
[ uuid(12345678-1234-abcd-ef00-0123456789ab),
version(1.0),
- endpoints(spoolss),
+ endpoint("ncacn_np:[\\pipe\\spoolss]"),
pointer_default(unique),
helpstring("Spooler SubSystem")
] interface spoolss
diff --git a/source4/librpc/idl/w32time.idl b/source4/librpc/idl/w32time.idl
index 568f97ef1d..3ba1bc1ed1 100644
--- a/source4/librpc/idl/w32time.idl
+++ b/source4/librpc/idl/w32time.idl
@@ -4,7 +4,7 @@
[
uuid(8fb6d884-2388-11d0-8c35-00c04fda2795),
- endpoints(srvsvc,atsvc,browser,keysvc,wkssvc),
+ endpoint("ncacn_np:[\\pipe\\srvsvc]","ncacn_np:[\\pipe\\atsvc]","ncacn_np:[\\pipe\\browser]","ncacn_np:[\\pipe\\keysvc]","ncacn_np:[\\pipe\\wkssvc]"),
version(4.1),
helpstring("Win32 Time Server")
]
diff --git a/source4/librpc/idl/winreg.idl b/source4/librpc/idl/winreg.idl
index 428345ff30..1f7123f7f3 100644
--- a/source4/librpc/idl/winreg.idl
+++ b/source4/librpc/idl/winreg.idl
@@ -6,7 +6,7 @@
[ uuid(338cd001-2244-31f1-aaaa-900038001003),
version(1.0),
- endpoints(winreg,TCP-0),
+ endpoint("ncacn_np:[\\pipe\\winreg]","ncacn_ip_tcp:"),
pointer_default(unique),
helpstring("Remote Registry Service")
] interface winreg
diff --git a/source4/librpc/rpc/dcerpc_smb.c b/source4/librpc/rpc/dcerpc_smb.c
index ffe7e55a85..cfb02680e2 100644
--- a/source4/librpc/rpc/dcerpc_smb.c
+++ b/source4/librpc/rpc/dcerpc_smb.c
@@ -372,14 +372,8 @@ NTSTATUS dcerpc_pipe_open_smb(struct dcerpc_pipe **p,
{
struct smb_private *smb;
NTSTATUS status;
- char *name;
union smb_open io;
- name = talloc_asprintf(tree, "\\%s", pipe_name);
- if (!name) {
- return NT_STATUS_NO_MEMORY;
- }
-
io.ntcreatex.level = RAW_OPEN_NTCREATEX;
io.ntcreatex.in.flags = 0;
io.ntcreatex.in.root_fid = 0;
@@ -398,10 +392,9 @@ NTSTATUS dcerpc_pipe_open_smb(struct dcerpc_pipe **p,
io.ntcreatex.in.create_options = 0;
io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_IMPERSONATION;
io.ntcreatex.in.security_flags = 0;
- io.ntcreatex.in.fname = name;
+ io.ntcreatex.in.fname = pipe_name;
- status = smb_raw_open(tree, name, &io);
- talloc_free(name);
+ status = smb_raw_open(tree, pipe_name, &io);
if (!NT_STATUS_IS_OK(status)) {
return status;
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index 747f8d1277..a82f30f3e5 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -4,6 +4,7 @@
dcerpc utility functions
Copyright (C) Andrew Tridgell 2003
+ Copyright (C) Jelmer Vernooij 2004
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -129,7 +130,6 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server,
return NT_STATUS_OK;
}
-
/*
find the pipe name for a local IDL interface
*/
@@ -425,24 +425,39 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_np(struct dcerpc_pipe **p,
BOOL retry;
struct smbcli_state *cli;
const char *pipe_name;
+ TALLOC_CTX *mem_ctx = talloc_init("dcerpc_pipe_connect_ncacn_np");
if (!binding->options || !binding->options[0] || !strlen(binding->options[0])) {
const struct dcerpc_interface_table *table = idl_iface_by_uuid(pipe_uuid);
+ struct dcerpc_binding default_binding;
+ int i;
+
if (!table) {
DEBUG(0,("Unknown interface endpoint '%s'\n", pipe_uuid));
+ talloc_destroy(mem_ctx);
return NT_STATUS_INVALID_PARAMETER;
}
- /* only try the first endpoint for now */
- pipe_name = table->endpoints->names[0];
+
+ /* Find one of the default pipes for this interface */
+ for (i = 0; i < table->endpoints->count; i++) {
+ status = dcerpc_parse_binding(mem_ctx, table->endpoints->names[i], &default_binding);
+
+ if (NT_STATUS_IS_OK(status) && default_binding.transport == ENDPOINT_SMB) {
+ pipe_name = default_binding.options[0];
+ break;
+
+ }
+ }
} else {
pipe_name = binding->options[0];
}
- if (strncasecmp(pipe_name, "\\pipe\\", 6) == 0) {
- pipe_name += 6;
+ if (!strncasecmp(pipe_name, "/pipe/", 6)) {
+ pipe_name+=6;
}
- if (strncasecmp(pipe_name, "/pipe/", 6) == 0) {
- pipe_name += 6;
+
+ if (strncasecmp(pipe_name, "\\pipe\\", 6)) {
+ pipe_name = talloc_asprintf(mem_ctx, "\\pipe\\%s", pipe_name);
}
if (!username || !username[0]) {
@@ -459,6 +474,7 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_np(struct dcerpc_pipe **p,
}
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Failed to connect to %s - %s\n", binding->host, nt_errstr(status)));
+ talloc_destroy(mem_ctx);
return status;
}
@@ -467,8 +483,11 @@ static NTSTATUS dcerpc_pipe_connect_ncacn_np(struct dcerpc_pipe **p,
DEBUG(0,("Failed to open pipe %s - %s\n", pipe_name, nt_errstr(status)));
smbcli_tdis(cli);
smbcli_shutdown(cli);
- return status;
- }
+ talloc_destroy(mem_ctx);
+ return status;
+ }
+
+ talloc_destroy(mem_ctx);
/* this ensures that the reference count is decremented so
a pipe close will really close the link */