1# SPDX-License-Identifier: GPL-2.0-only
2# This file is part of Scapy RPC
3# See https://scapy.net/ for more information
4# Copyright (C) Gabriel Potter
5
6# This is from [MS-RPCE] and [C706] Appendix O
7
8"""
9RPC definitions for the following interfaces:
10- ept (v3.0): e1af8308-5d1f-11c9-91a4-08002b14a0fa
11This file is auto-generated by midl-to-scapy, do not modify.
12"""
13
14import uuid
15
16from scapy.fields import PacketListField, StrFixedLenField
17from scapy.layers.dcerpc import (
18 NDRPacket,
19 DceRpcOp,
20 NDRByteField,
21 NDRConfPacketListField,
22 NDRConfStrLenField,
23 NDRConfVarPacketListField,
24 NDRContextHandle,
25 NDRFullEmbPointerField,
26 NDRFullPointerField,
27 NDRIntField,
28 NDRPacketField,
29 NDRShortField,
30 NDRVarStrLenField,
31 register_dcerpc_interface,
32)
33
34
35class UUID(NDRPacket):
36 ALIGNMENT = (4, 4)
37 fields_desc = [
38 NDRIntField("Data1", 0),
39 NDRShortField("Data2", 0),
40 NDRShortField("Data3", 0),
41 StrFixedLenField("Data4", "", length=8),
42 ]
43
44
45class twr_p_t(NDRPacket):
46 ALIGNMENT = (4, 4)
47 DEPORTED_CONFORMANTS = ["tower_octet_string"]
48 fields_desc = [
49 NDRIntField("tower_length", None, size_of="tower_octet_string"),
50 NDRConfStrLenField(
51 "tower_octet_string",
52 "",
53 size_is=lambda pkt: pkt.tower_length,
54 conformant_in_struct=True,
55 ),
56 ]
57
58
59class ept_entry_t(NDRPacket):
60 ALIGNMENT = (4, 8)
61 fields_desc = [
62 NDRPacketField("object", UUID(), UUID),
63 NDRFullEmbPointerField(NDRPacketField("tower", twr_p_t(), twr_p_t)),
64 NDRVarStrLenField("annotation", ""),
65 ]
66
67
68class ept_insert_Request(NDRPacket):
69 fields_desc = [
70 NDRIntField("num_ents", None, size_of="entries"),
71 NDRConfPacketListField(
72 "entries", [], ept_entry_t, size_is=lambda pkt: pkt.num_ents
73 ),
74 NDRIntField("replace", 0),
75 ]
76
77
78class ept_insert_Response(NDRPacket):
79 fields_desc = [NDRIntField("status", 0)]
80
81
82class ept_delete_Request(NDRPacket):
83 fields_desc = [
84 NDRIntField("num_ents", None, size_of="entries"),
85 NDRConfPacketListField(
86 "entries", [], ept_entry_t, size_is=lambda pkt: pkt.num_ents
87 ),
88 ]
89
90
91class ept_delete_Response(NDRPacket):
92 fields_desc = [NDRIntField("status", 0)]
93
94
95class RPC_IF_ID(NDRPacket):
96 ALIGNMENT = (4, 4)
97 fields_desc = [
98 NDRPacketField("Uuid", UUID(), UUID),
99 NDRShortField("VersMajor", 0),
100 NDRShortField("VersMinor", 0),
101 ]
102
103
104class ept_lookup_Request(NDRPacket):
105 fields_desc = [
106 NDRIntField("inquiry_type", 0),
107 NDRFullPointerField(NDRPacketField("object", UUID(), UUID)),
108 NDRFullPointerField(NDRPacketField("Ifid", RPC_IF_ID(), RPC_IF_ID)),
109 NDRIntField("vers_option", 0),
110 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
111 NDRIntField("max_ents", 0),
112 ]
113
114
115class ept_lookup_Response(NDRPacket):
116 fields_desc = [
117 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
118 NDRIntField("num_ents", None, size_of="entries"),
119 NDRConfVarPacketListField(
120 "entries",
121 [],
122 ept_entry_t,
123 size_is=lambda pkt: pkt.max_ents,
124 length_is=lambda pkt: pkt.num_ents,
125 ),
126 NDRIntField("status", 0),
127 ]
128
129
130class ept_map_Request(NDRPacket):
131 fields_desc = [
132 NDRFullPointerField(NDRPacketField("obj", UUID(), UUID)),
133 NDRFullPointerField(NDRPacketField("map_tower", twr_p_t(), twr_p_t)),
134 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
135 NDRIntField("max_towers", 0),
136 ]
137
138
139class ept_map_Response(NDRPacket):
140 fields_desc = [
141 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
142 NDRIntField("num_towers", None, size_of="ITowers"),
143 NDRConfVarPacketListField(
144 "ITowers",
145 [],
146 twr_p_t,
147 size_is=lambda pkt: pkt.max_towers,
148 length_is=lambda pkt: pkt.num_towers,
149 ptr_lvl=1,
150 ),
151 NDRIntField("status", 0),
152 ]
153
154
155class ept_lookup_handle_free_Request(NDRPacket):
156 fields_desc = [NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle)]
157
158
159class ept_lookup_handle_free_Response(NDRPacket):
160 fields_desc = [
161 NDRPacketField("entry_handle", NDRContextHandle(), NDRContextHandle),
162 NDRIntField("status", 0),
163 ]
164
165
166class uuid_t(NDRPacket):
167 ALIGNMENT = (4, 4)
168 fields_desc = [
169 NDRIntField("time_low", 0),
170 NDRShortField("time_mid", 0),
171 NDRShortField("time_hi_and_version", 0),
172 NDRByteField("clock_seq_hi_and_reserved", 0),
173 NDRByteField("clock_seq_low", 0),
174 StrFixedLenField("node", "", length=6),
175 ]
176
177
178class ept_inq_object_Request(NDRPacket):
179 fields_desc = []
180
181
182class ept_inq_object_Response(NDRPacket):
183 fields_desc = [
184 NDRPacketField("ept_object", uuid_t(), uuid_t),
185 NDRIntField("status", 0),
186 ]
187
188
189class uuid_p_t(NDRPacket):
190 ALIGNMENT = (4, 4)
191 fields_desc = [
192 NDRIntField("time_low", 0),
193 NDRShortField("time_mid", 0),
194 NDRShortField("time_hi_and_version", 0),
195 NDRByteField("clock_seq_hi_and_reserved", 0),
196 NDRByteField("clock_seq_low", 0),
197 StrFixedLenField("node", "", length=6),
198 ]
199
200
201class ept_mgmt_delete_Request(NDRPacket):
202 fields_desc = [
203 NDRIntField("object_speced", 0),
204 NDRPacketField("object", uuid_p_t(), uuid_p_t),
205 NDRPacketField("tower", twr_p_t(), twr_p_t),
206 ]
207
208
209class ept_mgmt_delete_Response(NDRPacket):
210 fields_desc = [NDRIntField("status", 0)]
211
212
213EPT_OPNUMS = {
214 0: DceRpcOp(ept_insert_Request, ept_insert_Response),
215 1: DceRpcOp(ept_delete_Request, ept_delete_Response),
216 2: DceRpcOp(ept_lookup_Request, ept_lookup_Response),
217 3: DceRpcOp(ept_map_Request, ept_map_Response),
218 4: DceRpcOp(ept_lookup_handle_free_Request, ept_lookup_handle_free_Response),
219 5: DceRpcOp(ept_inq_object_Request, ept_inq_object_Response),
220 6: DceRpcOp(ept_mgmt_delete_Request, ept_mgmt_delete_Response),
221}
222register_dcerpc_interface(
223 name="ept",
224 uuid=uuid.UUID("e1af8308-5d1f-11c9-91a4-08002b14a0fa"),
225 version="3.0",
226 opnums=EPT_OPNUMS,
227)