MCPcopy Create free account
hub / github.com/secdev/scapy / NDRPacketField

Class NDRPacketField

scapy/layers/dcerpc.py:1942–1985  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1940
1941
1942class NDRPacketField(NDRConstructedType, NDRAlign):
1943 def __init__(self, name, default, pkt_cls, **kwargs):
1944 self.DEPORTED_CONFORMANTS = pkt_cls.DEPORTED_CONFORMANTS
1945 self.fld = _NDRPacketField(name, default, pkt_cls=pkt_cls, **kwargs)
1946 NDRAlign.__init__(
1947 self,
1948 _NDRPacketPadField(self.fld, align=pkt_cls.ALIGNMENT),
1949 align=pkt_cls.ALIGNMENT,
1950 )
1951 NDRConstructedType.__init__(self, pkt_cls.fields_desc)
1952
1953 def getfield(self, pkt, x):
1954 # Handle deformed conformants max_count here
1955 if self.DEPORTED_CONFORMANTS:
1956 # C706 14.3.2: "In other words, the size information precedes the
1957 # structure and is aligned independently of the structure alignment."
1958 fld = NDRInt3264Field("", 0)
1959 max_counts = []
1960 for _ in self.DEPORTED_CONFORMANTS:
1961 x, max_count = fld.getfield(pkt, x)
1962 max_counts.append(max_count)
1963 res, val = super(NDRPacketField, self).getfield(pkt, x)
1964 if len(max_counts) == 1:
1965 val.max_count = max_counts[0]
1966 else:
1967 val.max_counts = max_counts
1968 return res, val
1969 return super(NDRPacketField, self).getfield(pkt, x)
1970
1971 def addfield(self, pkt, s, x):
1972 # Handle deformed conformants max_count here
1973 if self.DEPORTED_CONFORMANTS:
1974 mcfld = NDRInt3264Field("", 0)
1975 if len(self.DEPORTED_CONFORMANTS) == 1:
1976 max_counts = [x.max_count]
1977 else:
1978 max_counts = x.max_counts
1979 for fldname, max_count in zip(self.DEPORTED_CONFORMANTS, max_counts):
1980 if max_count is None:
1981 fld, val = x.getfield_and_val(fldname)
1982 max_count = fld.i2len(x, val)
1983 s = mcfld.addfield(pkt, s, max_count)
1984 return super(NDRPacketField, self).addfield(pkt, s, x)
1985 return super(NDRPacketField, self).addfield(pkt, s, x)
1986
1987
1988# Array types

Callers 15

SIDClass · 0.90
S4U_DELEGATION_INFOClass · 0.90
CLAIM_ENTRYClass · 0.90
PAC_DEVICE_INFOClass · 0.90
InstanceInfoDataClass · 0.90
ScmRequestInfoDataClass · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…