1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-08 21:18:16 +03:00

CVE-2023-4154 python/samba/ndr: add ndr_deepcopy() helper

This uses ndr_pack/unpack in order to create a deep copy
of the given object.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15424

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>

(cherry picked from commit 4627997dda)
This commit is contained in:
Stefan Metzmacher 2023-03-17 14:08:34 +01:00 committed by Jule Anger
parent b56849aa64
commit 571d3bf48e

View File

@ -56,6 +56,25 @@ def ndr_print(object):
return ndr_print()
def ndr_deepcopy(object):
"""Create a deep copy of a NDR object, using pack/unpack
:param object: Object to copy
:return: The object copy
"""
ndr_pack = getattr(object, "__ndr_pack__", None)
if ndr_pack is None:
raise TypeError("%r is not a NDR object" % object)
data = ndr_pack()
cls = type(object)
copy = cls()
ndr_unpack = getattr(copy, "__ndr_unpack__", None)
if ndr_unpack is None:
raise TypeError("%r is not a NDR object" % copy)
ndr_unpack(data, allow_remaining=False)
return copy
def ndr_pack_in(object, bigendian=False, ndr64=False):
"""Pack the input of an NDR function object.