| 2998 | |
| 2999 | |
| 3000 | class SMB2_Create_Context(_NTLMPayloadPacket): |
| 3001 | name = "SMB2 CREATE CONTEXT" |
| 3002 | OFFSET = 16 |
| 3003 | _NTLM_PAYLOAD_FIELD_NAME = "Buffer" |
| 3004 | fields_desc = [ |
| 3005 | LEIntField("Next", None), |
| 3006 | XLEShortField("NameBufferOffset", None), |
| 3007 | LEShortField("NameLen", None), |
| 3008 | ShortField("Reserved", 0), |
| 3009 | XLEShortField("DataBufferOffset", None), |
| 3010 | LEIntField("DataLen", None), |
| 3011 | _NTLMPayloadField( |
| 3012 | "Buffer", |
| 3013 | OFFSET, |
| 3014 | [ |
| 3015 | PadField( |
| 3016 | StrLenField("Name", b"", length_from=lambda pkt: pkt.NameLen), |
| 3017 | 8, |
| 3018 | ), |
| 3019 | # Must be padded on 8-octet alignment |
| 3020 | PacketLenField( |
| 3021 | "Data", None, conf.raw_layer, length_from=lambda pkt: pkt.DataLen |
| 3022 | ), |
| 3023 | ], |
| 3024 | force_order=["Name", "Data"], |
| 3025 | ), |
| 3026 | StrLenField( |
| 3027 | "pad", |
| 3028 | b"", |
| 3029 | length_from=lambda x: ( |
| 3030 | ( |
| 3031 | x.Next |
| 3032 | - max( |
| 3033 | x.DataBufferOffset + x.DataLen, x.NameBufferOffset + x.NameLen |
| 3034 | ) |
| 3035 | ) |
| 3036 | if x.Next |
| 3037 | else 0 |
| 3038 | ), |
| 3039 | ), |
| 3040 | ] |
| 3041 | |
| 3042 | def post_dissect(self, s): |
| 3043 | if not self.DataLen: |
| 3044 | return s |
| 3045 | try: |
| 3046 | if isinstance(self.parent, SMB2_Create_Request): |
| 3047 | data_cls = { |
| 3048 | b"DHnQ": SMB2_CREATE_DURABLE_HANDLE_REQUEST, |
| 3049 | b"DHnC": SMB2_CREATE_DURABLE_HANDLE_RECONNECT, |
| 3050 | b"AISi": SMB2_CREATE_ALLOCATION_SIZE, |
| 3051 | b"MxAc": SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST, |
| 3052 | b"TWrp": SMB2_CREATE_TIMEWARP_TOKEN, |
| 3053 | b"QFid": SMB2_CREATE_QUERY_ON_DISK_ID, |
| 3054 | b"RqLs": SMB2_CREATE_REQUEST_LEASE, |
| 3055 | b"DH2Q": SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2, |
| 3056 | b"DH2C": SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2, |
| 3057 | # 3.1.1 only |
no test coverage detected
searching dependent graphs…