rust: bindgen AppLayerParserStateSetFlag

Ticket: 7667
pull/13419/head
Philippe Antoine 2 months ago committed by Victor Julien
parent 249131e9de
commit 6d56beffef

@ -537,7 +537,6 @@ pub const APP_LAYER_TX_ACCEPT: u8 = BIT_U8!(4);
/// cbindgen:ignore /// cbindgen:ignore
extern "C" { extern "C" {
pub fn AppLayerParserStateSetFlag(state: *mut c_void, flag: u16);
pub fn AppLayerParserStateIssetFlag(state: *mut c_void, flag: u16) -> u16; pub fn AppLayerParserStateIssetFlag(state: *mut c_void, flag: u16) -> u16;
pub fn AppLayerParserSetStreamDepth(ipproto: u8, alproto: AppProto, stream_depth: u32); pub fn AppLayerParserSetStreamDepth(ipproto: u8, alproto: AppProto, stream_depth: u32);
pub fn AppLayerParserConfParserEnabled(ipproto: *const c_char, proto: *const c_char) -> c_int; pub fn AppLayerParserConfParserEnabled(ipproto: *const c_char, proto: *const c_char) -> c_int;

@ -24,7 +24,10 @@ use crate::frames::Frame;
use nom7::Err; use nom7::Err;
use std::ffi::CString; use std::ffi::CString;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use suricata_sys::sys::{AppProto, SCAppLayerProtoDetectConfProtoDetectionEnabled}; use suricata_sys::sys::{
AppLayerParserState_, AppProto, SCAppLayerParserStateSetFlag,
SCAppLayerProtoDetectConfProtoDetectionEnabled,
};
#[repr(C)] #[repr(C)]
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
@ -236,7 +239,11 @@ impl SSHState {
if flags != 0 { if flags != 0 {
unsafe { unsafe {
AppLayerParserStateSetFlag(pstate, flags); // TODO a later bindgen should prove that this cast is useless
SCAppLayerParserStateSetFlag(
pstate as *mut AppLayerParserState_,
flags,
);
} }
} }
} }

@ -689,3 +689,12 @@ extern "C" {
default_enabled: bool, default_enabled: bool,
) -> ::std::os::raw::c_int; ) -> ::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);
}

@ -1216,10 +1216,10 @@ static inline void SetEOFFlags(AppLayerParserState *pstate, const uint8_t flags)
{ {
if ((flags & (STREAM_EOF|STREAM_TOSERVER)) == (STREAM_EOF|STREAM_TOSERVER)) { if ((flags & (STREAM_EOF|STREAM_TOSERVER)) == (STREAM_EOF|STREAM_TOSERVER)) {
SCLogDebug("setting APP_LAYER_PARSER_EOF_TS"); 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)) { } else if ((flags & (STREAM_EOF|STREAM_TOCLIENT)) == (STREAM_EOF|STREAM_TOCLIENT)) {
SCLogDebug("setting APP_LAYER_PARSER_EOF_TC"); 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; goto end;
SCLogDebug("setting APP_LAYER_PARSER_EOF_TC and APP_LAYER_PARSER_EOF_TS"); 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: end:
SCReturn; SCReturn;
@ -1818,9 +1818,8 @@ void AppLayerParserRegisterProtocolParsers(void)
ValidateParsers(); ValidateParsers();
} }
/* coccinelle: SCAppLayerParserStateSetFlag():2,2:APP_LAYER_PARSER_ */
/* coccinelle: AppLayerParserStateSetFlag():2,2:APP_LAYER_PARSER_ */ void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag)
void AppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag)
{ {
SCEnter(); SCEnter();
pstate->flags |= flag; pstate->flags |= flag;

@ -33,6 +33,7 @@ typedef struct AppLayerParserState_ AppLayerParserState;
typedef struct AppLayerDecoderEvents_ AppLayerDecoderEvents; typedef struct AppLayerDecoderEvents_ AppLayerDecoderEvents;
typedef struct ThreadVars_ ThreadVars; typedef struct ThreadVars_ ThreadVars;
typedef struct File_ File; typedef struct File_ File;
typedef enum LoggerId LoggerId;
// Forward declarations from rust // Forward declarations from rust
typedef struct StreamSlice StreamSlice; typedef struct StreamSlice StreamSlice;
typedef struct AppLayerResult AppLayerResult; typedef struct AppLayerResult AppLayerResult;
@ -301,7 +302,7 @@ void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserStat
void AppLayerParserRegisterProtocolParsers(void); 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); uint16_t AppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag);
AppLayerParserState *AppLayerParserStateAlloc(void); AppLayerParserState *AppLayerParserStateAlloc(void);

@ -2334,13 +2334,12 @@ static struct SSLDecoderResult SSLv2Decode(uint8_t direction, SSLState *ssl_stat
(ssl_state->flags & SSL_AL_FLAG_SSL_SERVER_SSN_ENCRYPTED)) (ssl_state->flags & SSL_AL_FLAG_SSL_SERVER_SSN_ENCRYPTED))
{ {
if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) { if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) {
AppLayerParserStateSetFlag(pstate, SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION);
APP_LAYER_PARSER_NO_INSPECTION);
} }
if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) { if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) {
AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY); SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY);
AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY); SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY);
} }
SCLogDebug("SSLv2 No reassembly & inspection has been set"); 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) { if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) {
SCLogDebug("setting APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD"); SCLogDebug("setting APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD");
AppLayerParserStateSetFlag(pstate, SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD);
APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD);
} }
/* Encrypted data, reassembly not asked, bypass asked, let's sacrifice /* Encrypted data, reassembly not asked, bypass asked, let's sacrifice
* heartbeat lke inspection to be able to be able to bypass the flow */ * heartbeat lke inspection to be able to be able to bypass the flow */
if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) { if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) {
SCLogDebug("setting APP_LAYER_PARSER_NO_REASSEMBLY"); SCLogDebug("setting APP_LAYER_PARSER_NO_REASSEMBLY");
AppLayerParserStateSetFlag(pstate, SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY);
APP_LAYER_PARSER_NO_REASSEMBLY); SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION);
AppLayerParserStateSetFlag(pstate, SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY);
APP_LAYER_PARSER_NO_INSPECTION);
AppLayerParserStateSetFlag(pstate,
APP_LAYER_PARSER_BYPASS_READY);
} }
break; break;

@ -47,5 +47,6 @@
#include "conf.h" #include "conf.h"
#include "app-layer-detect-proto.h" #include "app-layer-detect-proto.h"
#include "app-layer-parser.h"
#endif #endif

@ -246,11 +246,11 @@ static inline Packet *FlowPseudoPacketSetup(
if (direction == 0) { if (direction == 0) {
if (f->alparser && !STREAM_HAS_SEEN_DATA(&ssn->client)) { 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 { } else {
if (f->alparser && !STREAM_HAS_SEEN_DATA(&ssn->server)) { 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);
} }
} }

@ -388,8 +388,8 @@ static inline void FlowWorkerStreamTCPUpdate(ThreadVars *tv, FlowWorkerThreadDat
if (setting_nopayload) { if (setting_nopayload) {
FlowSetNoPayloadInspectionFlag(p->flow); FlowSetNoPayloadInspectionFlag(p->flow);
} }
AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TS); SCAppLayerParserStateSetFlag(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_TC);
} }
/* Packets here can safely access p->flow as it's locked */ /* Packets here can safely access p->flow as it's locked */

@ -454,8 +454,8 @@ void StreamTcpDisableAppLayer(Flow *f)
StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server); StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server);
StreamTcpDisableAppLayerReassembly(ssn); StreamTcpDisableAppLayerReassembly(ssn);
if (f->alparser) { if (f->alparser) {
AppLayerParserStateSetFlag(f->alparser, SCAppLayerParserStateSetFlag(
(APP_LAYER_PARSER_EOF_TS|APP_LAYER_PARSER_EOF_TC)); f->alparser, (APP_LAYER_PARSER_EOF_TS | APP_LAYER_PARSER_EOF_TC));
} }
} }

@ -474,7 +474,7 @@ typedef enum PacketProfileDetectId_ {
} PacketProfileDetectId; } PacketProfileDetectId;
/** \note update PacketProfileLoggerIdToString if you change anything here */ /** \note update PacketProfileLoggerIdToString if you change anything here */
typedef enum { typedef enum LoggerId {
LOGGER_UNDEFINED, LOGGER_UNDEFINED,
/* TX loggers first for low logger IDs */ /* TX loggers first for low logger IDs */

Loading…
Cancel
Save