summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/Makefile.in5
-rw-r--r--source4/build/pidl/idl.gram2
-rw-r--r--source4/build/pidl/parser.pm44
-rw-r--r--source4/librpc/idl/browser.idl10
-rw-r--r--source4/librpc/idl/dcom.idl43
-rw-r--r--source4/librpc/idl/keysvc.idl15
-rw-r--r--source4/librpc/idl/lsa.idl14
-rw-r--r--source4/librpc/idl/netlogon.idl15
-rw-r--r--source4/librpc/idl/ntsvcs.idl15
-rw-r--r--source4/librpc/idl/protected_storage.idl15
-rw-r--r--source4/librpc/idl/scerpc.idl16
-rw-r--r--source4/librpc/idl/trkwks.idl15
-rw-r--r--source4/librpc/idl/w32time.idl15
-rw-r--r--source4/librpc/idl/wzcsvc.idl15
-rw-r--r--source4/librpc/rpc/dcerpc.h6
-rw-r--r--source4/torture/rpc/epmapper.c5
-rw-r--r--source4/torture/rpc/mgmt.c11
17 files changed, 255 insertions, 6 deletions
diff --git a/source4/Makefile.in b/source4/Makefile.in
index a1f9fb158f..a7895b24ce 100644
--- a/source4/Makefile.in
+++ b/source4/Makefile.in
@@ -199,7 +199,10 @@ LIBRAW_NDR_OBJ = librpc/ndr/ndr.o librpc/ndr/ndr_basic.o librpc/ndr/ndr_sec.o \
librpc/gen_ndr/ndr_epmapper.o librpc/gen_ndr/ndr_winreg.o \
librpc/gen_ndr/ndr_mgmt.o librpc/gen_ndr/ndr_protected_storage.o \
librpc/gen_ndr/ndr_dcom.o librpc/gen_ndr/ndr_wzcsvc.o \
- librpc/gen_ndr/ndr_browser.o
+ librpc/gen_ndr/ndr_browser.o librpc/gen_ndr/ndr_w32time.o \
+ librpc/gen_ndr/ndr_scerpc.o librpc/gen_ndr/ndr_ntsvcs.o \
+ librpc/gen_ndr/ndr_netlogon.o librpc/gen_ndr/ndr_trkwks.o \
+ librpc/gen_ndr/ndr_keysvc.o
LIBRAW_RPC_OBJ = librpc/rpc/dcerpc.o librpc/rpc/dcerpc_auth.o \
librpc/rpc/dcerpc_util.o \
diff --git a/source4/build/pidl/idl.gram b/source4/build/pidl/idl.gram
index b354b9772a..adabbe41a6 100644
--- a/source4/build/pidl/idl.gram
+++ b/source4/build/pidl/idl.gram
@@ -17,7 +17,7 @@ module_header: '[' <commit> module_param(s? /,/) ']'
}}
| <error?>
-module_param: identifier '(' text ')'
+module_param: identifier '(' <commit> text ')'
{{ "$item{identifier}" => "$item{text}" }}
| <error>
diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm
index a10058a160..5bf5e4220f 100644
--- a/source4/build/pidl/parser.pm
+++ b/source4/build/pidl/parser.pm
@@ -14,6 +14,10 @@ use client;
my %needed;
my %structs;
+my $if_uuid;
+my $if_version;
+my $if_endpoints;
+
sub pidl($)
{
print OUT shift;
@@ -1281,7 +1285,31 @@ sub FunctionTable($)
}
pidl "\t{ NULL, 0, NULL, NULL }\n};\n\n";
- pidl "\nconst struct dcerpc_interface_table dcerpc_table_$interface->{NAME} = {\"$interface->{NAME}\", DCERPC_$uname\_UUID, DCERPC_$uname\_VERSION, $count, $interface->{NAME}\_calls};\n\n";
+ my $endpoints;
+
+ if (! defined $if_endpoints) {
+ $if_endpoints = $interface->{NAME};
+ }
+
+ pidl "static const struct dcerpc_endpoint_list $interface->{NAME}\_endpoints = {\n";
+ my @e = split / /, $if_endpoints;
+ my $endpoint_count = $#e + 1;
+ pidl "\t$endpoint_count,\n";
+ pidl "\t{ ";
+ for (my $i=0; $i < $#e; $i++) {
+ pidl "\"$e[$i]\", ";
+ }
+ pidl "\"$e[$#e]\" }\n";
+ pidl "};\n\n";
+
+ pidl "\nconst struct dcerpc_interface_table dcerpc_table_$interface->{NAME} = {\n";
+ pidl "\t\"$interface->{NAME}\",\n";
+ pidl "\tDCERPC_$uname\_UUID,\n";
+ pidl "\tDCERPC_$uname\_VERSION,\n";
+ pidl "\t$count,\n";
+ pidl "\t$interface->{NAME}\_calls,\n";
+ pidl "\t&$interface->{NAME}\_endpoints\n";
+ pidl "};\n\n";
}
@@ -1389,6 +1417,17 @@ sub BuildNeeded($)
}
#####################################################################
+# parse the interface definitions
+sub ModuleHeader($)
+{
+ my($h) = shift;
+
+ $if_uuid = $h->{PROPERTIES}->{uuid};
+ $if_version = $h->{PROPERTIES}->{version};
+ $if_endpoints = $h->{PROPERTIES}->{endpoints};
+}
+
+#####################################################################
# parse a parsed IDL structure back into an IDL file
sub Parse($$)
{
@@ -1400,6 +1439,9 @@ sub Parse($$)
pidl "/* parser auto-generated by pidl */\n\n";
pidl "#include \"includes.h\"\n\n";
foreach my $x (@{$idl}) {
+ ($x->{TYPE} eq "MODULEHEADER") &&
+ ModuleHeader($x);
+
if ($x->{TYPE} eq "INTERFACE") {
BuildNeeded($x);
ParseInterface($x);
diff --git a/source4/librpc/idl/browser.idl b/source4/librpc/idl/browser.idl
new file mode 100644
index 0000000000..e1441c7857
--- /dev/null
+++ b/source4/librpc/idl/browser.idl
@@ -0,0 +1,10 @@
+[
+ uuid(6bffd098-a112-3610-9833-012892020162),
+ version(0.0)
+]
+interface browser
+{
+ /******************/
+ /* Function 0x00 */
+ NTSTATUS browser_Unknown0();
+}
diff --git a/source4/librpc/idl/dcom.idl b/source4/librpc/idl/dcom.idl
new file mode 100644
index 0000000000..fc432c6aa4
--- /dev/null
+++ b/source4/librpc/idl/dcom.idl
@@ -0,0 +1,43 @@
+/*
+ this is just a placeholder until we start to support DCOM calls
+*/
+
+[
+ uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
+ version(0.0)
+]
+interface IOXIDResolver
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR ResolveOxid();
+}
+
+
+[
+ uuid(4d9f4ab8-7d1c-11cf-861e-0020af6e7c57),
+ version(0.0)
+]
+interface IRemoteActivation
+{
+
+ /*****************/
+ /* Function 0x00 */
+ NTSTATUS RemoteActivation();
+}
+
+
+
+[
+ uuid(000001a0-0000-0000-c000-000000000046),
+ version(0.0)
+]
+interface ISystemActivator
+{
+
+ /*****************/
+ /* Function 0x00 */
+ NTSTATUS isa_Unknown0();
+
+}
diff --git a/source4/librpc/idl/keysvc.idl b/source4/librpc/idl/keysvc.idl
new file mode 100644
index 0000000000..396e0fedaf
--- /dev/null
+++ b/source4/librpc/idl/keysvc.idl
@@ -0,0 +1,15 @@
+/*
+ cryptographic key services interface
+*/
+
+[
+ uuid(8d0ffe72-d252-11d0-bf8f-00c04fd9126b),
+ version(1.0)
+]
+interface keysvc
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR keysvc_Unknown0();
+}
diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl
index 7b2de5bd8f..c90654d941 100644
--- a/source4/librpc/idl/lsa.idl
+++ b/source4/librpc/idl/lsa.idl
@@ -6,6 +6,7 @@
[ uuid(12345778-1234-abcd-ef00-0123456789ab),
version(0.0),
+ endpoints(lsarpc lsass),
pointer_default(unique)
] interface lsarpc
{
@@ -444,7 +445,20 @@
NTSTATUS UNK_GET_CONNUSER ();
/* Function: 0x2e */
NTSTATUS QUERYINFO2 ();
+}
+
+[
+ uuid(3919286a-b10c-11d0-9ba8-00c04fd92ef5)
+ version(0.0),
+ endpoints(lsarpc,lsass),
+ pointer_default(unique)
+]
+interface lsads
+{
+ /*****************/
+ /* Function 0x00 */
+ lsads_Unknown0();
}
diff --git a/source4/librpc/idl/netlogon.idl b/source4/librpc/idl/netlogon.idl
new file mode 100644
index 0000000000..049e6936ca
--- /dev/null
+++ b/source4/librpc/idl/netlogon.idl
@@ -0,0 +1,15 @@
+/*
+ plug and play services?
+*/
+
+[
+ uuid(12345678-1234-abcd-ef00-01234567cffb),
+ version(1.0)
+]
+interface netlogon
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR netlogon_Unknown0();
+}
diff --git a/source4/librpc/idl/ntsvcs.idl b/source4/librpc/idl/ntsvcs.idl
new file mode 100644
index 0000000000..88d51a05ba
--- /dev/null
+++ b/source4/librpc/idl/ntsvcs.idl
@@ -0,0 +1,15 @@
+/*
+ plug and play services?
+*/
+
+[
+ uuid(8d9f4e40-a03d-11ce-8f69-08003e30051b),
+ version(1.0)
+]
+interface ntsvcs
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR ntsvcs_Unknown0();
+}
diff --git a/source4/librpc/idl/protected_storage.idl b/source4/librpc/idl/protected_storage.idl
new file mode 100644
index 0000000000..aaf223bbb2
--- /dev/null
+++ b/source4/librpc/idl/protected_storage.idl
@@ -0,0 +1,15 @@
+#include "idl_types.h"
+
+/*
+ protected_storage interface definitions
+*/
+
+[ uuid(e3514235-4b06-11d1-ab04-00c04fc2dcd2),
+ version(4.0),
+ pointer_default(unique)
+] interface protected_storage
+{
+ /*****************************/
+ /* Function 0x00 */
+ WERROR ps_XXX ();
+}
diff --git a/source4/librpc/idl/scerpc.idl b/source4/librpc/idl/scerpc.idl
new file mode 100644
index 0000000000..049de3b19b
--- /dev/null
+++ b/source4/librpc/idl/scerpc.idl
@@ -0,0 +1,16 @@
+/*
+ security configuration editor interface definitions
+*/
+
+[
+ uuid(93149ca2-973b-11d1-8c39-00c04fb984f9),
+ version(0.0)
+]
+interface scerpc
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR scerpc_Unknown0();
+}
+
diff --git a/source4/librpc/idl/trkwks.idl b/source4/librpc/idl/trkwks.idl
new file mode 100644
index 0000000000..c91e1ea788
--- /dev/null
+++ b/source4/librpc/idl/trkwks.idl
@@ -0,0 +1,15 @@
+/*
+ distributed key tracking services
+*/
+
+[
+ uuid(300f3532-38cc-11d0-a3f0-0020af6b0add),
+ version(1.2)
+]
+interface trkwks
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR trkwks_Unknown0();
+}
diff --git a/source4/librpc/idl/w32time.idl b/source4/librpc/idl/w32time.idl
new file mode 100644
index 0000000000..cca5cacc3b
--- /dev/null
+++ b/source4/librpc/idl/w32time.idl
@@ -0,0 +1,15 @@
+/*
+ w32time interface definitions
+*/
+
+[
+ uuid(8fb6d884-2388-11d0-8c35-00c04fda2795),
+ version(4.1)
+]
+interface w32time
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR w32time_Unknown0();
+}
diff --git a/source4/librpc/idl/wzcsvc.idl b/source4/librpc/idl/wzcsvc.idl
new file mode 100644
index 0000000000..167496e3cc
--- /dev/null
+++ b/source4/librpc/idl/wzcsvc.idl
@@ -0,0 +1,15 @@
+/*
+ windows zero-configuration service
+*/
+
+[
+ uuid(378e52b0-c0a9-11cf-822d-00aa0051e40f),
+ version(1.0)
+]
+interface wzcsvc
+{
+
+ /*****************/
+ /* Function 0x00 */
+ WERROR wzcsvc_Unknown0();
+}
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index 6f9aa75e8b..7c6ab160f3 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -76,10 +76,16 @@ struct dcerpc_interface_call {
void (*ndr_print)(struct ndr_print *, const char *, int, void *);
};
+struct dcerpc_endpoint_list {
+ uint32 count;
+ const char *names[];
+};
+
struct dcerpc_interface_table {
const char *name;
const char *uuid;
uint32 if_version;
uint32 num_calls;
const struct dcerpc_interface_call *calls;
+ const struct dcerpc_endpoint_list *endpoints;
};
diff --git a/source4/torture/rpc/epmapper.c b/source4/torture/rpc/epmapper.c
index 22d8ee4343..65e431bdc2 100644
--- a/source4/torture/rpc/epmapper.c
+++ b/source4/torture/rpc/epmapper.c
@@ -118,6 +118,11 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
r.out.entry_handle = &handle;
r.in.max_towers = 100;
+ if (twr->towers.num_floors != 5) {
+ printf(" tower has %d floors - skipping test_Map\n", twr->towers.num_floors);
+ return True;
+ }
+
uuid_str = GUID_string(mem_ctx, &twr->towers.floors[0].lhs.info.uuid.uuid);
printf("epm_Map results for '%s':\n",
diff --git a/source4/torture/rpc/mgmt.c b/source4/torture/rpc/mgmt.c
index 75839e3900..24bf080ffb 100644
--- a/source4/torture/rpc/mgmt.c
+++ b/source4/torture/rpc/mgmt.c
@@ -49,11 +49,16 @@ static BOOL test_inq_if_ids(struct dcerpc_pipe *p,
}
for (i=0;i<r.out.if_id_vector->count;i++) {
+ const char *uuid;
struct dcerpc_syntax_id *id = r.out.if_id_vector->if_id[i].id;
if (!id) continue;
- printf("\tuuid %s version 0x%04x:0x%04x\n",
- GUID_string(mem_ctx, &id->uuid),
- id->major_version, id->minor_version);
+
+ uuid = GUID_string(mem_ctx, &id->uuid);
+
+ printf("\tuuid %s version 0x%04x:0x%04x '%s'\n",
+ uuid,
+ id->major_version, id->minor_version,
+ idl_pipe_name(uuid, id->major_version));
}
return True;