From a465add90f3291f022104600c6221e8d90287e64 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 21 Nov 2003 13:14:17 +0000 Subject: * changed the way strings are handled in pidl to a much more general interface. We now support an arbitrary set of flags to each parser, and these can be used to control the string types. I have provided some common IDL string types in librpc/idl/idl_types.h which needs to be included in every IDL file. * added IDL for the endpoint mapper. Added a test suite that enumerates all endpoints on the server. (This used to be commit d2665f36a75b482ff82733f72ffac938c2acf87a) --- source4/librpc/idl/atsvc.idl | 2 + source4/librpc/idl/dfs.idl | 2 + source4/librpc/idl/echo.idl | 3 + source4/librpc/idl/epmapper.idl | 134 ++++++++++++++++++++++++++++++++++++++++ source4/librpc/idl/eventlog.idl | 2 + source4/librpc/idl/lsa.idl | 4 +- source4/librpc/idl/misc.idl | 2 + source4/librpc/idl/samr.idl | 24 ++++++- source4/librpc/idl/spoolss.idl | 4 +- source4/librpc/idl/srvsvc.idl | 4 +- source4/librpc/idl/winreg.idl | 2 + source4/librpc/idl/wkssvc.idl | 2 + 12 files changed, 179 insertions(+), 6 deletions(-) create mode 100644 source4/librpc/idl/epmapper.idl (limited to 'source4/librpc/idl') diff --git a/source4/librpc/idl/atsvc.idl b/source4/librpc/idl/atsvc.idl index 81394c747b..39add81b09 100644 --- a/source4/librpc/idl/atsvc.idl +++ b/source4/librpc/idl/atsvc.idl @@ -2,6 +2,8 @@ atsvc interface definition */ +#include "idl_types.h" + [ uuid(1ff70682-0a51-30e8-076d-740be8cee98b), version(1.0), pointer_default(unique) diff --git a/source4/librpc/idl/dfs.idl b/source4/librpc/idl/dfs.idl index 8e8488e367..fd9e164ffa 100644 --- a/source4/librpc/idl/dfs.idl +++ b/source4/librpc/idl/dfs.idl @@ -2,6 +2,8 @@ dfs interface definition */ +#include "idl_types.h" + [ uuid(4fc742e0-4a10-11cf-8273-00aa004ae673), version(3.0), pointer_default(unique) diff --git a/source4/librpc/idl/echo.idl b/source4/librpc/idl/echo.idl index 38650e990d..e6d93e52c4 100644 --- a/source4/librpc/idl/echo.idl +++ b/source4/librpc/idl/echo.idl @@ -1,3 +1,6 @@ +#include "idl_types.h" + + [ uuid(60a15ec5-4de8-11d7-a637-005056a20182), version(1.0) diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl new file mode 100644 index 0000000000..c58ceb1fc0 --- /dev/null +++ b/source4/librpc/idl/epmapper.idl @@ -0,0 +1,134 @@ +#include "idl_types.h" + +/* + endpoint mapper interface +*/ + +[ + uuid(e1af8308-5d1f-11c9-91a4-08002b14a0fa), + version(3.0), + pointer_default(unique) +] +interface epmapper +{ + + typedef struct { + GUID uuid; + uint16 version; + } epm_prot_uuid; + + typedef [nodiscriminant] union { + [case(13)] epm_prot_uuid uuid; + [default] ; + } epm_protocol_info; + + typedef struct { + uint8 protocol; + [switch_is(protocol)] epm_protocol_info info; + } epm_lhs; + + typedef struct { + uint16 unknown; + } epm_rhs; + + typedef struct { + [subcontext(2)] epm_lhs lhs; + [subcontext(2)] epm_rhs rhs; + } epm_floor; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 num_floors; + epm_floor floors[num_floors]; + } epm_towers; + + typedef struct { + uint32 tower_length; + [subcontext(4)] epm_towers towers; + } twr_t; + + typedef struct { + GUID object; + twr_t *tower; + ascstr2 annotation; + } epm_entry_t; + + typedef struct { + GUID uuid; + uint16 vers_major; + uint16 vers_minor; + } rpc_if_id_t; + + /**********************/ + /* Function 0x0 */ + void epm_Insert( + [in] uint32 num_ents, + [in,size_is(num_ents)] epm_entry_t entries[], + [in] uint32 replace, + [out] uint32 *status + ); + + /**********************/ + /* Function 0x1 */ + void epm_Delete( + [in] uint32 num_ents, + [in, size_is(num_ents)] epm_entry_t entries[], + [out] uint32 *status + ); + + /**********************/ + /* Function 0x02 */ + void epm_Lookup( + [in] uint32 inquiry_type, + [in] GUID *object, + [in] rpc_if_id_t *interface_id, + [in] uint32 vers_option, + [in, out, ref] policy_handle *entry_handle, + [in] uint32 max_ents, + [out] uint32 num_ents, + [out, length_is(num_ents), size_is(max_ents)] epm_entry_t entries[], + [out] uint32 status + ); + + + /**********************/ + /* Function 0x03 */ + + typedef struct { + twr_t *twr; + } twr_p_t; + + void epm_Map( + [in] GUID *object, + [in] twr_t *map_tower, + [in, out] policy_handle *entry_handle, + [in] uint32 max_towers, + [out] uint32 *num_towers, + [out, length_is(*num_towers), size_is(max_towers)] twr_p_t towers[], + [out] uint32 *status + ); + + + /**********************/ + /* Function 0x04 */ + void epm_LookupHandleFree( + [in, out] policy_handle *entry_handle, + [out] uint32 *status + ); + + /**********************/ + /* Function 0x05 */ + void epm_InqObject( + [out] GUID *epm_object, + [out] uint32 *status + ); + + + /**********************/ + /* Function 0x05 */ + void epm_MgmtDelete( + [in] uint32 object_speced, + [in] GUID *object, + [in] twr_t *tower, + [out] uint32 *status + ); +} diff --git a/source4/librpc/idl/eventlog.idl b/source4/librpc/idl/eventlog.idl index a8eba4ae16..ee5bd8bba8 100644 --- a/source4/librpc/idl/eventlog.idl +++ b/source4/librpc/idl/eventlog.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* eventlog interface definition */ diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl index 6aedd33b97..7b2de5bd8f 100644 --- a/source4/librpc/idl/lsa.idl +++ b/source4/librpc/idl/lsa.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* lsa interface definition */ @@ -54,7 +56,7 @@ typedef struct { uint32 size; - [subcontext] security_descriptor *sd; + [subcontext(4)] security_descriptor *sd; } sec_desc_buf; NTSTATUS lsa_QuerySecObj ( diff --git a/source4/librpc/idl/misc.idl b/source4/librpc/idl/misc.idl index 031ca89821..04e03fc814 100644 --- a/source4/librpc/idl/misc.idl +++ b/source4/librpc/idl/misc.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* miscellaneous IDL structures */ diff --git a/source4/librpc/idl/samr.idl b/source4/librpc/idl/samr.idl index 29ba402503..bb0e85b7de 100644 --- a/source4/librpc/idl/samr.idl +++ b/source4/librpc/idl/samr.idl @@ -1,6 +1,7 @@ +#include "idl_types.h" + /* samr interface definition - */ /* @@ -44,7 +45,7 @@ typedef struct { uint32 sd_size; - [subcontext] security_descriptor *sd; + [subcontext(4)] security_descriptor *sd; } samr_SdBuf; NTSTATUS samr_QuerySecurity ( @@ -727,9 +728,26 @@ /* Function 0x2b */ NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_USER(); + /************************/ /* Function 0x2c */ - NTSTATUS samr_GET_USRDOM_PWINFO(); + +/* +const ULONG DOMAIN_PASSWORD_COMPLEX = 0x00000001; +const ULONG DOMAIN_PASSWORD_NO_ANON_CHANGE = 0x00000002; +const ULONG DOMAIN_PASSWORD_NO_CLEAR_CHANGE = 0x00000004; +const ULONG DOMAIN_PASSWORD_STORE_CLEARTEXT = 0x00000010; +const ULONG DOMAIN_REFUSE_PASSWORD_CHANGE = 0x00000020; +*/ + typedef struct { + uint16 min_pwd_len; + uint32 passwd_properties; + } samr_PwInfo; + + NTSTATUS samr_GetUserPwInfo( + [in,ref] policy_handle *handle, + [out] samr_PwInfo info + ); /************************/ /* Function 0x2d */ diff --git a/source4/librpc/idl/spoolss.idl b/source4/librpc/idl/spoolss.idl index 586536b69c..a9d653458b 100644 --- a/source4/librpc/idl/spoolss.idl +++ b/source4/librpc/idl/spoolss.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* spoolss interface definitions */ @@ -179,7 +181,7 @@ [in,ref] policy_handle *handle, [in] uint32 level, [in] DATA_BLOB *buffer, - [out,subcontext,switch_is(level)] spoolss_PrinterInfo *info, + [out,subcontext(4),switch_is(level)] spoolss_PrinterInfo *info, [in,out,ref] uint32 *buf_size ); diff --git a/source4/librpc/idl/srvsvc.idl b/source4/librpc/idl/srvsvc.idl index 530b19d6cf..ac421d8626 100644 --- a/source4/librpc/idl/srvsvc.idl +++ b/source4/librpc/idl/srvsvc.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* srvsvc interface definitions */ @@ -302,7 +304,7 @@ unistr *path; uint32 *password; uint32 unknown; - [subcontext] security_descriptor *sd; + [subcontext(4)] security_descriptor *sd; } srvsvc_NetShare502; typedef struct { diff --git a/source4/librpc/idl/winreg.idl b/source4/librpc/idl/winreg.idl index 68b13f8245..84250a61a5 100644 --- a/source4/librpc/idl/winreg.idl +++ b/source4/librpc/idl/winreg.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* winreg interface definition */ diff --git a/source4/librpc/idl/wkssvc.idl b/source4/librpc/idl/wkssvc.idl index 2a1fb83f79..31e37d4759 100644 --- a/source4/librpc/idl/wkssvc.idl +++ b/source4/librpc/idl/wkssvc.idl @@ -1,3 +1,5 @@ +#include "idl_types.h" + /* wkssvc interface definitions */ -- cgit