diff options
Diffstat (limited to 'source4/librpc')
-rw-r--r-- | source4/librpc/idl/drsuapi.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/echo.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/epmapper.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/lsa.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/lsads.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/netlogon.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/oxidresolver.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/samr.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/spoolss.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/w32time.idl | 2 | ||||
-rw-r--r-- | source4/librpc/idl/winreg.idl | 2 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_smb.c | 11 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_util.c | 37 |
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 */ |