Skip to content

Commit 1bdc210

Browse files
authored
DceRpc fix register_dcerpc_interface duplication (#4672)
1 parent 53b9cce commit 1bdc210

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

scapy/layers/dcerpc.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,15 +1205,9 @@ def register_dcerpc_interface(name, uuid, version, opnums):
12051205
# Interface is already registered.
12061206
interface = DCE_RPC_INTERFACES[(uuid, if_version)]
12071207
if interface.name == name:
1208-
if interface.if_version == if_version and set(opnums) - set(
1209-
interface.opnums
1210-
):
1208+
if set(opnums) - set(interface.opnums):
12111209
# Interface is an extension of a previous interface
12121210
interface.opnums.update(opnums)
1213-
return
1214-
elif interface.if_version != if_version:
1215-
# Interface has a different version
1216-
pass
12171211
else:
12181212
log_runtime.warning(
12191213
"This interface is already registered: %s. Skip" % interface
@@ -1223,15 +1217,17 @@ def register_dcerpc_interface(name, uuid, version, opnums):
12231217
raise ValueError(
12241218
"An interface with the same UUID is already registered: %s" % interface
12251219
)
1226-
DCE_RPC_INTERFACES_NAMES[uuid] = name
1227-
DCE_RPC_INTERFACES_NAMES_rev[name.lower()] = uuid
1228-
DCE_RPC_INTERFACES[(uuid, if_version)] = DceRpcInterface(
1229-
name,
1230-
uuid,
1231-
version_tuple,
1232-
if_version,
1233-
opnums,
1234-
)
1220+
else:
1221+
# New interface
1222+
DCE_RPC_INTERFACES_NAMES[uuid] = name
1223+
DCE_RPC_INTERFACES_NAMES_rev[name.lower()] = uuid
1224+
DCE_RPC_INTERFACES[(uuid, if_version)] = DceRpcInterface(
1225+
name,
1226+
uuid,
1227+
version_tuple,
1228+
if_version,
1229+
opnums,
1230+
)
12351231
# bind for build
12361232
for opnum, operations in opnums.items():
12371233
bind_top_down(DceRpc5Request, operations.request, opnum=opnum)

0 commit comments

Comments
 (0)