refactor dcerpc in prep for dcerpc over smb

remotes/origin/master-1.0.x
Kirby Kuehl 17 years ago committed by Victor Julien
parent 546e9b5f28
commit 008de4321b

@ -0,0 +1,175 @@
/*
* Copyright (c) 2009,2010 Open Information Security Foundation
* app-layer-dcerpc.h
*
* \author Kirby Kuehl <kkuehl@gmail.com>
*/
#ifndef APPLAYERDCERPCCOMMON_H_
#define APPLAYERDCERPCCOMMON_H_
#include "app-layer-protos.h"
#include "app-layer-parser.h"
#include "flow.h"
#include "queue.h"
#include "util-byte.h"
void RegisterDCERPCParsers(void);
void DCERPCParserTests(void);
void DCERPCParserRegisterTests(void);
// http://www.opengroup.org/onlinepubs/9629399/chap12.htm#tagcjh_17_06
#define REQUEST 0
#define PING 1
#define RESPONSE 2
#define FAULT 3
#define WORKING 4
#define NOCALL 5
#define REJECT 6
#define ACK 7
#define CL_CANCEL 8
#define FACK 9
#define CANCEL_ACK 10
#define BIND 11
#define BIND_ACK 12
#define BIND_NAK 13
#define ALTER_CONTEXT 14
#define ALTER_CONTEXT_RESP 15
#define SHUTDOWN 17
#define CO_CANCEL 18
#define ORPHANED 19
#if 0
typedef struct {
uint8_t rpc_vers; /* 4 RPC protocol major version (4 LSB only)*/
uint8_t ptype; /* Packet type (5 LSB only) */
uint8_t flags1; /* Packet flags */
uint8_t flags2; /* Packet flags */
uint8_t drep[3]; /* Data representation format label */
uint8_t serial_hi; /* High byte of serial number */
uuid_t object; /* Object identifier */
uuid_t if_id; /* Interface identifier */
uuid_t act_id; /* Activity identifier */
unsigned long server_boot;/* Server boot time */
unsigned long if_vers; /* Interface version */
unsigned long seqnum; /* Sequence number */
unsigned short opnum; /* Operation number */
unsigned short ihint; /* Interface hint */
unsigned short ahint; /* Activity hint */
unsigned short len; /* Length of packet body */
unsigned short fragnum; /* Fragment number */
unsigned small auth_proto; /* Authentication protocol identifier*/
unsigned small serial_lo; /* Low byte of serial number */
} dc_rpc_cl_pkt_hdr_t;
#endif
#define RESERVED_01 0x01
#define LASTFRAG 0x02
#define FRAG 0x04
#define NOFACK 0x08
#define MAYBE 0x10
#define IDEMPOTENT 0x20
#define BROADCAST 0x40
#define RESERVED_80 0x80
#define CANCEL_PENDING 0x02
#define RESERVED_04 0x04
#define RESERVED_10 0x10
#define RESERVED_20 0x20
#define RESERVED_40 0x40
#define RESERVED_80 0x80
typedef struct dcerpc_hdr_ {
uint8_t rpc_vers; /* 00:01 RPC version should be 5 */
uint8_t rpc_vers_minor; /* 01:01 minor version */
uint8_t type; /* 02:01 packet type */
uint8_t pfc_flags; /* 03:01 flags (see PFC_... ) */
uint8_t packed_drep[4]; /* 04:04 NDR data representation format label */
uint16_t frag_length; /* 08:02 total length of fragment */
uint16_t auth_length; /* 10:02 length of auth_value */
uint32_t call_id; /* 12:04 call identifier */
}DCERPCHdr;
#define DCERPC_HDR_LEN 16
struct uuid_entry {
uint16_t ctxid;
uint16_t result;
uint8_t uuid[16];
uint16_t version;
uint16_t versionminor;
TAILQ_ENTRY(uuid_entry) next;
};
typedef struct dcerpc_bind_bind_ack_ {
uint8_t numctxitems;
uint8_t numctxitemsleft;
uint8_t ctxbytesprocessed;
uint16_t ctxid;
uint8_t uuid[16];
uint16_t version;
uint16_t versionminor;
struct uuid_entry *uuid_entry;
TAILQ_HEAD(, uuid_entry) uuid_list;
uint16_t secondaryaddrlen;
uint16_t secondaryaddrlenleft;
uint16_t result;
}DCERPCBindBindAck;
typedef struct dcerpc_request_ {
uint16_t opnum;
uint8_t *stub_data;
}DCERPCRequest;
typedef struct DCERPC_ {
DCERPCHdr dcerpchdr;
DCERPCBindBindAck dcerpcbindbindack;
DCERPCRequest dcerpcrequest;
uint16_t bytesprocessed;
uint8_t pad;
uint8_t padleft;
}DCERPC;
#define PFC_FIRST_FRAG 0x01/* First fragment */
#define PFC_LAST_FRAG 0x02/* Last fragment */
#define PFC_PENDING_CANCEL 0x04/* Cancel was pending at sender */
#define PFC_RESERVED_1 0x08
#define PFC_CONC_MPX 0x10/* supports concurrent multiplexing
* of a single connection. */
#define PFC_DID_NOT_EXECUTE 0x20/* only meaningful on `fault' packet;
* if true, guaranteed call did not
* execute. */
#define PFC_MAYBE 0x40/* `maybe' call semantics requested */
#define PFC_OBJECT_UUID 0x80/* if true, a non-nil object UUID
* was specified in the handle, and
* is present in the optional object
* field. If false, the object field
* is omitted. */
#define REASON_NOT_SPECIFIED 0
#define TEMPORARY_CONGESTION 1
#define LOCAL_LIMIT_EXCEEDED 2
#define CALLED_PADDR_UNKNOWN 3 /* not used */
#define PROTOCOL_VERSION_NOT_SUPPORTED 4
#define DEFAULT_CONTEXT_NOT_SUPPORTED 5 /* not used */
#define USER_DATA_NOT_READABLE 6 /* not used */
#define NO_PSAP_AVAILABLE 7 /* not used */
/*
typedef uint16_t p_context_id_t;
typedef struct {
uuid_t if_uuid;
uint32_t if_version;
} p_syntax_id_t;
typedef struct {
p_context_id_t p_cont_id;
uint8_t n_transfer_syn; // number of items
uint8_t reserved; // alignment pad, m.b.z.
p_syntax_id_t abstract_syntax; // transfer syntax list
p_syntax_id_t [size_is(n_transfer_syn)] transfer_syntaxes[];
} p_cont_elem_t;
*/
int DCERPCParser(DCERPC *dcerpc, uint8_t *input, uint32_t input_len);
#endif /* APPLAYERDCERPCCOMMON_H_ */

File diff suppressed because it is too large Load Diff

@ -9,157 +9,18 @@
#define APPLAYERDCERPC_H_
#include "app-layer-protos.h"
#include "app-layer-parser.h"
#include "app-layer-dcerpc-common.h"
#include "flow.h"
#include "queue.h"
#include "util-byte.h"
void RegisterDCERPCParsers(void);
void DCERPCParserTests(void);
void DCERPCParserRegisterTests(void);
// http://www.opengroup.org/onlinepubs/9629399/chap12.htm#tagcjh_17_06
#define REQUEST 0
#define PING 1
#define RESPONSE 2
#define FAULT 3
#define WORKING 4
#define NOCALL 5
#define REJECT 6
#define ACK 7
#define CL_CANCEL 8
#define FACK 9
#define CANCEL_ACK 10
#define BIND 11
#define BIND_ACK 12
#define BIND_NAK 13
#define ALTER_CONTEXT 14
#define ALTER_CONTEXT_RESP 15
#define SHUTDOWN 17
#define CO_CANCEL 18
#define ORPHANED 19
#if 0
typedef struct {
uint8_t rpc_vers; /* 4 RPC protocol major version (4 LSB only)*/
uint8_t ptype; /* Packet type (5 LSB only) */
uint8_t flags1; /* Packet flags */
uint8_t flags2; /* Packet flags */
uint8_t drep[3]; /* Data representation format label */
uint8_t serial_hi; /* High byte of serial number */
uuid_t object; /* Object identifier */
uuid_t if_id; /* Interface identifier */
uuid_t act_id; /* Activity identifier */
unsigned long server_boot;/* Server boot time */
unsigned long if_vers; /* Interface version */
unsigned long seqnum; /* Sequence number */
unsigned short opnum; /* Operation number */
unsigned short ihint; /* Interface hint */
unsigned short ahint; /* Activity hint */
unsigned short len; /* Length of packet body */
unsigned short fragnum; /* Fragment number */
unsigned small auth_proto; /* Authentication protocol identifier*/
unsigned small serial_lo; /* Low byte of serial number */
} dc_rpc_cl_pkt_hdr_t;
#endif
#define RESERVED_01 0x01
#define LASTFRAG 0x02
#define FRAG 0x04
#define NOFACK 0x08
#define MAYBE 0x10
#define IDEMPOTENT 0x20
#define BROADCAST 0x40
#define RESERVED_80 0x80
#define CANCEL_PENDING 0x02
#define RESERVED_04 0x04
#define RESERVED_10 0x10
#define RESERVED_20 0x20
#define RESERVED_40 0x40
#define RESERVED_80 0x80
typedef struct dcerpc_hdr_ {
uint8_t rpc_vers; /* 00:01 RPC version should be 5 */
uint8_t rpc_vers_minor; /* 01:01 minor version */
uint8_t type; /* 02:01 packet type */
uint8_t pfc_flags; /* 03:01 flags (see PFC_... ) */
uint8_t packed_drep[4]; /* 04:04 NDR data representation format label */
uint16_t frag_length; /* 08:02 total length of fragment */
uint16_t auth_length; /* 10:02 length of auth_value */
uint32_t call_id; /* 12:04 call identifier */
}DCERPCHdr;
#define DCERPC_HDR_LEN 16
struct uuid_entry {
uint16_t ctxid;
uint16_t result;
uint8_t uuid[16];
uint16_t version;
uint16_t versionminor;
TAILQ_ENTRY(uuid_entry) next;
};
typedef struct DCERPCState_ {
DCERPCHdr dcerpc;
uint16_t bytesprocessed;
uint8_t numctxitems;
uint8_t numctxitemsleft;
uint8_t ctxbytesprocessed;
uint16_t ctxid;
uint16_t result;
uint8_t uuid[16];
uint16_t version;
uint16_t versionminor;
uint8_t pad;
uint8_t padleft;
struct uuid_entry *uuid_entry;
TAILQ_HEAD(, uuid_entry) uuid_list;
uint16_t secondaryaddrlen;
uint16_t secondaryaddrlenleft;
uint16_t opnum;
uint8_t *stub_data;
DCERPC dcerpc;
}DCERPCState;
#define PFC_FIRST_FRAG 0x01/* First fragment */
#define PFC_LAST_FRAG 0x02/* Last fragment */
#define PFC_PENDING_CANCEL 0x04/* Cancel was pending at sender */
#define PFC_RESERVED_1 0x08
#define PFC_CONC_MPX 0x10/* supports concurrent multiplexing
* of a single connection. */
#define PFC_DID_NOT_EXECUTE 0x20/* only meaningful on `fault' packet;
* if true, guaranteed call did not
* execute. */
#define PFC_MAYBE 0x40/* `maybe' call semantics requested */
#define PFC_OBJECT_UUID 0x80/* if true, a non-nil object UUID
* was specified in the handle, and
* is present in the optional object
* field. If false, the object field
* is omitted. */
#define REASON_NOT_SPECIFIED 0
#define TEMPORARY_CONGESTION 1
#define LOCAL_LIMIT_EXCEEDED 2
#define CALLED_PADDR_UNKNOWN 3 /* not used */
#define PROTOCOL_VERSION_NOT_SUPPORTED 4
#define DEFAULT_CONTEXT_NOT_SUPPORTED 5 /* not used */
#define USER_DATA_NOT_READABLE 6 /* not used */
#define NO_PSAP_AVAILABLE 7 /* not used */
/*
typedef uint16_t p_context_id_t;
typedef struct {
uuid_t if_uuid;
uint32_t if_version;
} p_syntax_id_t;
typedef struct {
p_context_id_t p_cont_id;
uint8_t n_transfer_syn; // number of items
uint8_t reserved; // alignment pad, m.b.z.
p_syntax_id_t abstract_syntax; // transfer syntax list
p_syntax_id_t [size_is(n_transfer_syn)] transfer_syntaxes[];
} p_cont_elem_t;
*/
void RegisterDCERPCParsers(void);
void DCERPCParserTests(void);
void DCERPCParserRegisterTests(void);
#endif /* APPLAYERDCERPC_H_ */

@ -262,13 +262,13 @@ int DetectDceIfaceMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx, Flow *f,
/* if any_frag is not enabled, we need to match only against the first
* fragment */
if (!dce_data->any_frag &&
!(dcerpc_state->dcerpc.pfc_flags & PFC_FIRST_FRAG)) {
!(dcerpc_state->dcerpc.dcerpchdr.pfc_flags & PFC_FIRST_FRAG)) {
/* any_frag has not been set, and apparently it's not the first fragment */
ret = 0;
goto end;
}
TAILQ_FOREACH(item, &dcerpc_state->uuid_list, next) {
TAILQ_FOREACH(item, &dcerpc_state->dcerpc.dcerpcbindbindack.uuid_list, next) {
ret = 1;
/* if the uuid has been rejected(item->result == 1), we skip to the

@ -244,11 +244,11 @@ int DetectDceOpnumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx, Flow *f,
for ( ; dor != NULL; dor = dor->next) {
if (dor->range2 == DCE_OPNUM_RANGE_UNINITIALIZED) {
if (dor->range1 == dcerpc_state->opnum)
if (dor->range1 == dcerpc_state->dcerpc.dcerpcrequest.opnum)
return 1;
} else {
if (dor->range1 <= dcerpc_state->opnum &&
dor->range2 >= dcerpc_state->opnum) {
if (dor->range1 <= dcerpc_state->dcerpc.dcerpcrequest.opnum &&
dor->range2 >= dcerpc_state->dcerpc.dcerpcrequest.opnum) {
return 1;
}
}
@ -1140,8 +1140,8 @@ static int DetectDceOpnumTestParse08(void)
}
/* do detect */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT, dcerpc_bindack,
dcerpc_bindack_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT,
dcerpc_bindack, dcerpc_bindack_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
@ -1825,8 +1825,9 @@ static int DetectDceOpnumTestParse10(void)
ssn.alproto = ALPROTO_DCERPC;
de_ctx = DetectEngineCtxInit();
if (de_ctx == NULL)
if (de_ctx == NULL) {
goto end;
}
de_ctx->flags |= DE_QUIET;
@ -1835,8 +1836,9 @@ static int DetectDceOpnumTestParse10(void)
"(msg:\"DCERPC\"; "
"dce_opnum:2,15,22; "
"sid:1;)");
if (s == NULL)
if (s == NULL) {
goto end;
}
SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
@ -1844,7 +1846,7 @@ static int DetectDceOpnumTestParse10(void)
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER | STREAM_START,
dcerpc_bind, dcerpc_bind_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
SCLogDebug("AppLayerParse for dcerpc bind failed. Returned %" PRId32, r);
goto end;
}
@ -1854,16 +1856,16 @@ static int DetectDceOpnumTestParse10(void)
goto end;
}
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT, dcerpc_bindack,
dcerpc_bindack_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT,
dcerpc_bindack, dcerpc_bindack_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
}
/* request1 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER, dcerpc_request1,
dcerpc_request1_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER,
dcerpc_request1, dcerpc_request1_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
@ -1872,12 +1874,14 @@ static int DetectDceOpnumTestParse10(void)
/* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, &p);
if (!PacketAlertCheck(&p, 1))
if (!PacketAlertCheck(&p, 1)) {
printf("PacketAlertCheck 3\n");
goto end;
}
/* response1 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT, dcerpc_response1,
dcerpc_response1_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT,
dcerpc_response1, dcerpc_response1_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
@ -1886,12 +1890,13 @@ static int DetectDceOpnumTestParse10(void)
/* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, &p);
if (!PacketAlertCheck(&p, 1))
if (!PacketAlertCheck(&p, 1)) {
goto end;
}
/* request2 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER, dcerpc_request2,
dcerpc_request2_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER,
dcerpc_request2, dcerpc_request2_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
@ -1900,12 +1905,13 @@ static int DetectDceOpnumTestParse10(void)
/* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, &p);
if (!PacketAlertCheck(&p, 1))
if (!PacketAlertCheck(&p, 1)) {
goto end;
}
/* response2 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT, dcerpc_response2,
dcerpc_response2_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT,
dcerpc_response2, dcerpc_response2_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
@ -1914,12 +1920,13 @@ static int DetectDceOpnumTestParse10(void)
/* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, &p);
if (!PacketAlertCheck(&p, 1))
if (!PacketAlertCheck(&p, 1)) {
goto end;
}
/* request3 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER, dcerpc_request3,
dcerpc_request3_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER,
dcerpc_request3, dcerpc_request3_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
goto end;
@ -1928,8 +1935,9 @@ static int DetectDceOpnumTestParse10(void)
/* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, &p);
if (!PacketAlertCheck(&p, 1))
if (!PacketAlertCheck(&p, 1)) {
goto end;
}
/* response3 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT | STREAM_EOF,
@ -1942,8 +1950,9 @@ static int DetectDceOpnumTestParse10(void)
/* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, &p);
if (!PacketAlertCheck(&p, 1))
if (!PacketAlertCheck(&p, 1)) {
goto end;
}
result = 1;
@ -2096,12 +2105,14 @@ static int DetectDceOpnumTestParse11(void)
dcerpc_request1, dcerpc_request1_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
printf("AppLayerParse for dcerpcrequest1 failed. Returned %" PRId32, r);
goto end;
}
dcerpc_state = ssn.aldata[AlpGetStateIdx(ALPROTO_DCERPC)];
if (dcerpc_state == NULL) {
SCLogDebug("no dcerpc state: ");
printf("no dcerpc state: ");
goto end;
}
@ -2112,10 +2123,11 @@ static int DetectDceOpnumTestParse11(void)
goto end;
/* response1 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT, dcerpc_response1,
dcerpc_response1_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT,
dcerpc_response1, dcerpc_response1_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
printf("AppLayerParse for dcerpcresponse1 failed. Returned %" PRId32, r);
goto end;
}
@ -2126,10 +2138,11 @@ static int DetectDceOpnumTestParse11(void)
goto end;
/* request2 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER, dcerpc_request2,
dcerpc_request2_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER,
dcerpc_request2, dcerpc_request2_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
printf("AppLayerParse for dcerpcrequest2 failed. Returned %" PRId32, r);
goto end;
}
@ -2140,10 +2153,11 @@ static int DetectDceOpnumTestParse11(void)
goto end;
/* response2 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT, dcerpc_response2,
dcerpc_response2_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOCLIENT,
dcerpc_response2, dcerpc_response2_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
printf("AppLayerParse for dcerpcresponse2 failed. Returned %" PRId32, r);
goto end;
}
@ -2154,10 +2168,11 @@ static int DetectDceOpnumTestParse11(void)
goto end;
/* request3 */
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER, dcerpc_request3,
dcerpc_request3_len);
r = AppLayerParse(&f, ALPROTO_DCERPC, STREAM_TOSERVER,
dcerpc_request3, dcerpc_request3_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
printf("AppLayerParse for dcerpc request3 failed. Returned %" PRId32, r);
goto end;
}
@ -2172,6 +2187,7 @@ static int DetectDceOpnumTestParse11(void)
dcerpc_response3, dcerpc_response3_len);
if (r != 0) {
SCLogDebug("AppLayerParse for dcerpc failed. Returned %" PRId32, r);
printf("AppLayerParse for dcerpc response3 failed. Returned %" PRId32, r);
goto end;
}
@ -2379,9 +2395,9 @@ static int DetectDceOpnumTestParse12(void)
goto end;
}
if (dcerpc_state->opnum != 40) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 40) {
printf("dcerpc state holding invalid opnum. Holding %d, while we are "
"expecting 40\n", dcerpc_state->opnum);
"expecting 40\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2405,9 +2421,9 @@ static int DetectDceOpnumTestParse12(void)
goto end;
}
if (dcerpc_state->opnum != 40) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 40) {
printf("dcerpc state holding invalid opnum. Holding %d, while we are "
"expecting 40\n", dcerpc_state->opnum);
"expecting 40\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2431,9 +2447,9 @@ static int DetectDceOpnumTestParse12(void)
goto end;
}
if (dcerpc_state->opnum != 30) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 30) {
printf("dcerpc state holding invalid opnum. Holding %d, while we are "
"expecting 30\n", dcerpc_state->opnum);
"expecting 30\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2457,9 +2473,9 @@ static int DetectDceOpnumTestParse12(void)
goto end;
}
if (dcerpc_state->opnum != 30) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 30) {
printf("dcerpc state holding invalid opnum. Holding %d, while we are "
"expecting 30\n", dcerpc_state->opnum);
"expecting 30\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2617,9 +2633,9 @@ static int DetectDceOpnumTestParse13(void)
goto end;
}
if (dcerpc_state->opnum != 40) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 40) {
printf("dcerpc state holding invalid opnum after request1. Holding %d, while we are "
"expecting 40\n", dcerpc_state->opnum);
"expecting 40\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2643,9 +2659,9 @@ static int DetectDceOpnumTestParse13(void)
goto end;
}
if (dcerpc_state->opnum != 40) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 40) {
printf("dcerpc state holding invalid opnum after response1. Holding %d, while we are "
"expecting 40\n", dcerpc_state->opnum);
"expecting 40\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2670,9 +2686,9 @@ static int DetectDceOpnumTestParse13(void)
goto end;
}
if (dcerpc_state->opnum != 30) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 30) {
printf("dcerpc state holding invalid opnum after request2. Holding %d, while we are "
"expecting 30\n", dcerpc_state->opnum);
"expecting 30\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}
@ -2696,9 +2712,9 @@ static int DetectDceOpnumTestParse13(void)
goto end;
}
if (dcerpc_state->opnum != 30) {
if (dcerpc_state->dcerpc.dcerpcrequest.opnum != 30) {
printf("dcerpc state holding invalid opnum after response2. Holding %d, while we are "
"expecting 30\n", dcerpc_state->opnum);
"expecting 30\n", dcerpc_state->dcerpc.dcerpcrequest.opnum);
goto end;
}

@ -65,7 +65,7 @@ int DetectDceStubDataMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx, Flow *
return 0;
}
if (dcerpc_state->stub_data == NULL)
if (dcerpc_state->dcerpc.dcerpcrequest.stub_data == NULL)
return 0;
return 1;

Loading…
Cancel
Save