It turns out that the Netlogon PAC verification is encrypted.
[kai/samba.git] / source4 / librpc / idl / epmapper.idl
1 #include "idl_types.h"
2
3 /*
4   endpoint mapper interface
5   Related links:
6         http://www.opengroup.org/onlinepubs/9629399/apdxo.htm : The official IDL for this pipe
7         http://www.opengroup.org/onlinepubs/9629399/apdxl.htm : Details on towers
8 http://www.opengroup.org/onlinepubs/9629399/chap6.htm#tagcjh_11_02_03_01: binding strings
9
10 */
11
12 import "misc.idl";
13
14 [
15  uuid("e1af8308-5d1f-11c9-91a4-08002b14a0fa"), 
16  version(3.0), 
17  endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]", 
18                   "ncalrpc:[EPMAPPER]"),
19  helpstring("EndPoint Mapper"),
20  pointer_default(ptr)
21 ]
22 interface epmapper
23 {
24
25         /*
26           note that the following IDL won't work in MIDL, and in fact
27           that the full towers/floors representation of epm cannot be
28           represented in MIDL at all. I decided to represent it using
29           the extended IDL syntax in pidl to make it easier to work
30           with.
31         */
32
33         const int EPMAPPER_STATUS_NO_MORE_ENTRIES = 0x16c9a0d6;
34         const int EPMAPPER_STATUS_NO_MEMORY = 0x16C9A012;
35         const int EPMAPPER_STATUS_OK = 0;
36
37
38
39         typedef [enum8bit] enum {
40                 
41                 /* Level 4 and higher */
42                 EPM_PROTOCOL_DNET_NSP           = 0x04,
43                 EPM_PROTOCOL_OSI_TP4            = 0x05,
44                 EPM_PROTOCOL_OSI_CLNS           = 0x06,
45                 EPM_PROTOCOL_TCP                = 0x07,
46                 EPM_PROTOCOL_UDP                = 0x08,
47                 EPM_PROTOCOL_IP                 = 0x09,
48                 /* These 4 are protocol identifiers, always at level 3 or lower */
49                 EPM_PROTOCOL_NCADG                      = 0x0a, /* Connectionless RPC */
50                 EPM_PROTOCOL_NCACN                      = 0x0b,
51                 EPM_PROTOCOL_NCALRPC            = 0x0c, /* Local RPC */
52                 EPM_PROTOCOL_UUID                       = 0x0d,
53                 EPM_PROTOCOL_IPX                        = 0x0e,
54                 EPM_PROTOCOL_SMB                = 0x0f,
55                 EPM_PROTOCOL_PIPE               = 0x10,
56                 EPM_PROTOCOL_NETBIOS            = 0x11,
57                 EPM_PROTOCOL_NETBEUI            = 0x12,
58                 EPM_PROTOCOL_SPX                = 0x13,
59                 EPM_PROTOCOL_NB_IPX             = 0x14, /* NetBIOS over IPX */
60                 EPM_PROTOCOL_DSP                        = 0x16, /* AppleTalk Data Stream Protocol */
61                 EPM_PROTOCOL_DDP                    = 0x17, /* AppleTalk Data Datagram Protocol */
62                 EPM_PROTOCOL_APPLETALK          = 0x18, /* AppleTalk */
63                 EPM_PROTOCOL_VINES_SPP          = 0x1a, 
64                 EPM_PROTOCOL_VINES_IPC          = 0x1b, /* Inter Process Communication */
65                 EPM_PROTOCOL_STREETTALK         = 0x1c, /* Vines Streettalk */
66                 EPM_PROTOCOL_HTTP               = 0x1f,
67                 EPM_PROTOCOL_UNIX_DS            = 0x20, /* Unix domain socket */
68                 EPM_PROTOCOL_NULL                       = 0x21
69         } epm_protocol;
70
71         typedef struct {
72                 /*FIXME */
73         } epm_rhs_dnet_nsp;
74
75         typedef struct {
76                 /*FIXME*/
77         } epm_rhs_osi_tp4;
78
79         typedef struct {
80                 /*FIXME*/
81         } epm_rhs_osi_clns;
82         
83         typedef struct {
84                 uint16 port;
85         } epm_rhs_udp;
86
87         typedef struct {
88                 uint16 port;
89         } epm_rhs_tcp;
90
91         typedef struct {
92                 ipv4address ipaddr;
93         } epm_rhs_ip;
94
95         typedef struct {
96                 uint16 minor_version;
97         } epm_rhs_ncadg;
98
99         typedef struct {
100                 uint16 minor_version;
101         } epm_rhs_ncacn;
102
103         typedef struct {
104                 [flag(NDR_REMAINING)] DATA_BLOB unknown;
105         } epm_rhs_uuid;
106
107         typedef struct {
108                 /*FIXME */
109         } epm_rhs_ipx;
110
111         typedef struct {
112                 astring unc;
113         } epm_rhs_smb;
114
115         typedef struct {
116                 astring path;   
117         } epm_rhs_pipe;
118
119         typedef struct {
120                 astring name;
121         } epm_rhs_netbios;
122
123         typedef struct {
124         } epm_rhs_netbeui;
125
126         typedef struct {
127         } epm_rhs_spx;
128
129         typedef struct {
130         } epm_rhs_nb_ipx;
131
132         typedef struct {
133                 uint16 port;
134         } epm_rhs_http;
135
136         typedef struct {
137                 astring path;
138         } epm_rhs_unix_ds;
139
140         typedef struct {
141         } epm_rhs_null;
142
143         typedef struct {
144                 uint16 minor_version;
145         } epm_rhs_ncalrpc;
146
147         typedef struct {
148         } epm_rhs_appletalk;
149
150         typedef struct {
151         } epm_rhs_atalk_stream;
152
153         typedef struct {
154         } epm_rhs_atalk_datagram;
155
156         typedef struct {
157                 uint16 port;
158         } epm_rhs_vines_spp;
159
160         typedef struct {
161                 uint16 port;
162         } epm_rhs_vines_ipc;
163
164         typedef struct {
165                 astring streettalk;
166         } epm_rhs_streettalk;
167
168         typedef [flag(NDR_BIG_ENDIAN),nodiscriminant] union {
169                 [case(EPM_PROTOCOL_DNET_NSP)] epm_rhs_dnet_nsp dnet_nsp;
170                 [case(EPM_PROTOCOL_OSI_TP4)] epm_rhs_osi_tp4 osi_tp4;
171                 [case(EPM_PROTOCOL_OSI_CLNS)] epm_rhs_osi_clns osi_clns;
172                 [case(EPM_PROTOCOL_TCP)] epm_rhs_tcp tcp;
173                 [case(EPM_PROTOCOL_UDP)] epm_rhs_udp udp;
174                 [case(EPM_PROTOCOL_IP)] epm_rhs_ip ip;
175                 [case(EPM_PROTOCOL_NCADG)] epm_rhs_ncadg ncadg;
176                 [case(EPM_PROTOCOL_NCACN)] epm_rhs_ncacn ncacn;
177                 [case(EPM_PROTOCOL_NCALRPC)] epm_rhs_ncalrpc ncalrpc;
178                 [case(EPM_PROTOCOL_UUID)] epm_rhs_uuid uuid;
179                 [case(EPM_PROTOCOL_IPX)] epm_rhs_ipx ipx;
180                 [case(EPM_PROTOCOL_SMB)] epm_rhs_smb smb;
181                 [case(EPM_PROTOCOL_PIPE)] epm_rhs_pipe pipe;
182                 [case(EPM_PROTOCOL_NETBIOS)] epm_rhs_netbios netbios;
183                 [case(EPM_PROTOCOL_NETBEUI)] epm_rhs_netbeui netbeui;
184                 [case(EPM_PROTOCOL_SPX)] epm_rhs_spx spx;
185                 [case(EPM_PROTOCOL_NB_IPX)] epm_rhs_nb_ipx nb_ipx;
186                 [case(EPM_PROTOCOL_DSP)] epm_rhs_atalk_stream atalk_stream;
187                 [case(EPM_PROTOCOL_DDP)] epm_rhs_atalk_datagram atalk_datagram;
188                 [case(EPM_PROTOCOL_APPLETALK)] epm_rhs_appletalk appletalk;
189                 [case(EPM_PROTOCOL_VINES_SPP)] epm_rhs_vines_spp vines_spp;
190                 [case(EPM_PROTOCOL_VINES_IPC)] epm_rhs_vines_ipc vines_ipc;
191                 [case(EPM_PROTOCOL_STREETTALK)] epm_rhs_streettalk streettalk;
192                 [case(EPM_PROTOCOL_HTTP)] epm_rhs_http http;
193                 [case(EPM_PROTOCOL_UNIX_DS)] epm_rhs_unix_ds unix_ds;
194                 [case(EPM_PROTOCOL_NULL)] epm_rhs_null null;
195                 [default]  [flag(NDR_REMAINING)] DATA_BLOB unknown;
196         } epm_rhs;
197
198         typedef struct {
199                 epm_protocol protocol;
200                 [flag(NDR_REMAINING)] DATA_BLOB lhs_data;
201         } epm_lhs;
202
203         typedef struct {
204                 [subcontext(2)] epm_lhs lhs;
205                 [subcontext(2),switch_is(lhs.protocol)] epm_rhs rhs;
206         } epm_floor;
207
208         /* note that the NDR_NOALIGN flag is inherited by all nested
209            structures. All of the towers/floors stuff is
210            non-aligned. I wonder what sort of wicked substance these
211            guys were smoking?
212         */
213         typedef [gensize,flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] struct {
214                 uint16 num_floors;
215                 epm_floor floors[num_floors];
216         } epm_tower;
217
218         typedef struct {
219                 [value(ndr_size_epm_tower(&tower, ndr->flags))] uint32  tower_length;
220                 [subcontext(4)] epm_tower tower;
221         } epm_twr_t;
222
223         typedef struct {
224                 GUID        object;
225                 epm_twr_t   *tower;
226                 /*
227                  * In theory this should be:
228                  *      [charset(DOS),string] uint8 annotation[64]
229                  * But midl treats this as:
230                  *      [charset(DOS),string] uint8 annotation[]
231                  * and pidl doesn't support this yet
232                  */
233                 [value(0)] uint32 __annotation_offset;
234                 [value(strlen(annotation)+1)] uint32 __annotation_length;
235                 [charset(DOS)] uint8 annotation[__annotation_length];
236         } epm_entry_t;
237
238         typedef struct {
239                 GUID                uuid;
240                 uint16              vers_major;
241                 uint16              vers_minor;
242         } rpc_if_id_t;
243     
244         /**********************/
245         /* Function 0x0       */
246         error_status_t epm_Insert(
247                 [in]            uint32          num_ents,
248                 [in,size_is(num_ents)]  epm_entry_t         entries[],
249                 [in]            uint32          replace
250                 );
251     
252         /**********************/
253         /* Function 0x1       */
254         error_status_t epm_Delete(
255                 [in]            uint32          num_ents,
256                 [in, size_is(num_ents)]  epm_entry_t entries[]
257                 );
258     
259         /**********************/
260         /* Function 0x02      */
261         error_status_t epm_Lookup(
262                 [in]            uint32          inquiry_type,
263                 [in,ptr]       GUID            *object,
264                 [in,ptr]       rpc_if_id_t     *interface_id,
265                 [in]            uint32          vers_option,
266                 [in,out]        policy_handle   *entry_handle,
267                 [in]            uint32          max_ents,
268                 [out]           uint32          *num_ents,
269                 [out, length_is(*num_ents), size_is(max_ents)]  epm_entry_t entries[]
270                 );
271
272
273         /**********************/
274         /* Function 0x03      */
275
276         typedef struct {
277                 epm_twr_t *twr;
278         } epm_twr_p_t;
279
280         [public] error_status_t epm_Map(
281                 [in,ptr]       GUID            *object,
282                 [in,ptr]       epm_twr_t       *map_tower,
283                 [in,out]        policy_handle   *entry_handle,
284                 [in]            uint32          max_towers,
285                 [out]           uint32          *num_towers,
286                 [out, length_is(*num_towers), size_is(max_towers)]  epm_twr_p_t towers[]
287                 );
288     
289
290         /**********************/
291         /* Function 0x04      */
292         error_status_t epm_LookupHandleFree(
293                 [in,out]        policy_handle   *entry_handle
294                 );
295     
296         /**********************/
297         /* Function 0x05      */
298         error_status_t epm_InqObject(
299                 [in]            GUID            *epm_object
300                 );
301     
302
303         /**********************/
304         /* Function 0x06      */
305         error_status_t epm_MgmtDelete(
306                 [in]            uint32          object_speced,
307                 [in,ptr]       GUID            *object,
308                 [in,ptr]       epm_twr_t       *tower
309                 );
310
311         /**********************/
312         /* Function 0x07      */
313         [todo] error_status_t epm_MapAuth();
314 }