From: Philippe Antoine Date: Mon, 9 Jun 2025 20:12:44 +0000 (+0200) Subject: rust: bindgen AppLayerParserStateSetFlag X-Git-Tag: suricata-8.0.0-rc1~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d56beffefa8ca247edb3f089a03a1d673606804;p=thirdparty%2Fsuricata.git rust: bindgen AppLayerParserStateSetFlag Ticket: 7667 --- diff --git a/rust/src/applayer.rs b/rust/src/applayer.rs index 73728fdf76..a11cc8b2f5 100644 --- a/rust/src/applayer.rs +++ b/rust/src/applayer.rs @@ -537,7 +537,6 @@ pub const APP_LAYER_TX_ACCEPT: u8 = BIT_U8!(4); /// cbindgen:ignore extern "C" { - pub fn AppLayerParserStateSetFlag(state: *mut c_void, flag: u16); pub fn AppLayerParserStateIssetFlag(state: *mut c_void, flag: u16) -> u16; pub fn AppLayerParserSetStreamDepth(ipproto: u8, alproto: AppProto, stream_depth: u32); pub fn AppLayerParserConfParserEnabled(ipproto: *const c_char, proto: *const c_char) -> c_int; diff --git a/rust/src/ssh/ssh.rs b/rust/src/ssh/ssh.rs index fac31c2d71..62a5b155e2 100644 --- a/rust/src/ssh/ssh.rs +++ b/rust/src/ssh/ssh.rs @@ -24,7 +24,10 @@ use crate::frames::Frame; use nom7::Err; use std::ffi::CString; use std::sync::atomic::{AtomicBool, Ordering}; -use suricata_sys::sys::{AppProto, SCAppLayerProtoDetectConfProtoDetectionEnabled}; +use suricata_sys::sys::{ + AppLayerParserState_, AppProto, SCAppLayerParserStateSetFlag, + SCAppLayerProtoDetectConfProtoDetectionEnabled, +}; #[repr(C)] #[derive(Debug, PartialEq, Eq, Clone, Copy)] @@ -236,7 +239,11 @@ impl SSHState { if flags != 0 { unsafe { - AppLayerParserStateSetFlag(pstate, flags); + // TODO a later bindgen should prove that this cast is useless + SCAppLayerParserStateSetFlag( + pstate as *mut AppLayerParserState_, + flags, + ); } } } diff --git a/rust/sys/src/sys.rs b/rust/sys/src/sys.rs index 845203cf8c..13470292a3 100644 --- a/rust/sys/src/sys.rs +++ b/rust/sys/src/sys.rs @@ -689,3 +689,12 @@ extern "C" { default_enabled: bool, ) -> ::std::os::raw::c_int; } +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct AppLayerParserState_ { + _unused: [u8; 0], +} +pub type AppLayerParserState = AppLayerParserState_; +extern "C" { + pub fn SCAppLayerParserStateSetFlag(pstate: *mut AppLayerParserState, flag: u16); +} diff --git a/src/app-layer-parser.c b/src/app-layer-parser.c index bd0f536c35..75497284a8 100644 --- a/src/app-layer-parser.c +++ b/src/app-layer-parser.c @@ -1216,10 +1216,10 @@ static inline void SetEOFFlags(AppLayerParserState *pstate, const uint8_t flags) { if ((flags & (STREAM_EOF|STREAM_TOSERVER)) == (STREAM_EOF|STREAM_TOSERVER)) { SCLogDebug("setting APP_LAYER_PARSER_EOF_TS"); - AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TS); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TS); } else if ((flags & (STREAM_EOF|STREAM_TOCLIENT)) == (STREAM_EOF|STREAM_TOCLIENT)) { SCLogDebug("setting APP_LAYER_PARSER_EOF_TC"); - AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TC); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TC); } } @@ -1503,7 +1503,7 @@ void AppLayerParserSetEOF(AppLayerParserState *pstate) goto end; SCLogDebug("setting APP_LAYER_PARSER_EOF_TC and APP_LAYER_PARSER_EOF_TS"); - AppLayerParserStateSetFlag(pstate, (APP_LAYER_PARSER_EOF_TS|APP_LAYER_PARSER_EOF_TC)); + SCAppLayerParserStateSetFlag(pstate, (APP_LAYER_PARSER_EOF_TS | APP_LAYER_PARSER_EOF_TC)); end: SCReturn; @@ -1818,9 +1818,8 @@ void AppLayerParserRegisterProtocolParsers(void) ValidateParsers(); } - -/* coccinelle: AppLayerParserStateSetFlag():2,2:APP_LAYER_PARSER_ */ -void AppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag) +/* coccinelle: SCAppLayerParserStateSetFlag():2,2:APP_LAYER_PARSER_ */ +void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag) { SCEnter(); pstate->flags |= flag; diff --git a/src/app-layer-parser.h b/src/app-layer-parser.h index f1ef436914..90075141e7 100644 --- a/src/app-layer-parser.h +++ b/src/app-layer-parser.h @@ -33,6 +33,7 @@ typedef struct AppLayerParserState_ AppLayerParserState; typedef struct AppLayerDecoderEvents_ AppLayerDecoderEvents; typedef struct ThreadVars_ ThreadVars; typedef struct File_ File; +typedef enum LoggerId LoggerId; // Forward declarations from rust typedef struct StreamSlice StreamSlice; typedef struct AppLayerResult AppLayerResult; @@ -301,7 +302,7 @@ void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserStat void AppLayerParserRegisterProtocolParsers(void); -void AppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag); +void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag); uint16_t AppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag); AppLayerParserState *AppLayerParserStateAlloc(void); diff --git a/src/app-layer-ssl.c b/src/app-layer-ssl.c index 2af5ac514b..3b3a91ba06 100644 --- a/src/app-layer-ssl.c +++ b/src/app-layer-ssl.c @@ -2334,13 +2334,12 @@ static struct SSLDecoderResult SSLv2Decode(uint8_t direction, SSLState *ssl_stat (ssl_state->flags & SSL_AL_FLAG_SSL_SERVER_SSN_ENCRYPTED)) { if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) { - AppLayerParserStateSetFlag(pstate, - APP_LAYER_PARSER_NO_INSPECTION); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION); } if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) { - AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY); - AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY); } SCLogDebug("SSLv2 No reassembly & inspection has been set"); } @@ -2554,20 +2553,16 @@ static struct SSLDecoderResult SSLv3Decode(uint8_t direction, SSLState *ssl_stat if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) { SCLogDebug("setting APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD"); - AppLayerParserStateSetFlag(pstate, - APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD); } /* Encrypted data, reassembly not asked, bypass asked, let's sacrifice * heartbeat lke inspection to be able to be able to bypass the flow */ if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) { SCLogDebug("setting APP_LAYER_PARSER_NO_REASSEMBLY"); - AppLayerParserStateSetFlag(pstate, - APP_LAYER_PARSER_NO_REASSEMBLY); - AppLayerParserStateSetFlag(pstate, - APP_LAYER_PARSER_NO_INSPECTION); - AppLayerParserStateSetFlag(pstate, - APP_LAYER_PARSER_BYPASS_READY); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION); + SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY); } break; diff --git a/src/bindgen.h b/src/bindgen.h index 81e80ce8c6..d110785237 100644 --- a/src/bindgen.h +++ b/src/bindgen.h @@ -47,5 +47,6 @@ #include "conf.h" #include "app-layer-detect-proto.h" +#include "app-layer-parser.h" #endif diff --git a/src/flow-timeout.c b/src/flow-timeout.c index 136fc31f7e..2e6099ab7f 100644 --- a/src/flow-timeout.c +++ b/src/flow-timeout.c @@ -246,11 +246,11 @@ static inline Packet *FlowPseudoPacketSetup( if (direction == 0) { if (f->alparser && !STREAM_HAS_SEEN_DATA(&ssn->client)) { - AppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TS); + SCAppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TS); } } else { if (f->alparser && !STREAM_HAS_SEEN_DATA(&ssn->server)) { - AppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TC); + SCAppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TC); } } diff --git a/src/flow-worker.c b/src/flow-worker.c index 585dfa755b..92b21b0ba2 100644 --- a/src/flow-worker.c +++ b/src/flow-worker.c @@ -388,8 +388,8 @@ static inline void FlowWorkerStreamTCPUpdate(ThreadVars *tv, FlowWorkerThreadDat if (setting_nopayload) { FlowSetNoPayloadInspectionFlag(p->flow); } - AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TS); - AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TC); + SCAppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TS); + SCAppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TC); } /* Packets here can safely access p->flow as it's locked */ diff --git a/src/stream-tcp-reassemble.c b/src/stream-tcp-reassemble.c index 2c0c3ca7cc..e530d30982 100644 --- a/src/stream-tcp-reassemble.c +++ b/src/stream-tcp-reassemble.c @@ -454,8 +454,8 @@ void StreamTcpDisableAppLayer(Flow *f) StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server); StreamTcpDisableAppLayerReassembly(ssn); if (f->alparser) { - AppLayerParserStateSetFlag(f->alparser, - (APP_LAYER_PARSER_EOF_TS|APP_LAYER_PARSER_EOF_TC)); + SCAppLayerParserStateSetFlag( + f->alparser, (APP_LAYER_PARSER_EOF_TS | APP_LAYER_PARSER_EOF_TC)); } } diff --git a/src/suricata-common.h b/src/suricata-common.h index 58a4ac4c43..3bfe425593 100644 --- a/src/suricata-common.h +++ b/src/suricata-common.h @@ -474,7 +474,7 @@ typedef enum PacketProfileDetectId_ { } PacketProfileDetectId; /** \note update PacketProfileLoggerIdToString if you change anything here */ -typedef enum { +typedef enum LoggerId { LOGGER_UNDEFINED, /* TX loggers first for low logger IDs */