rust: bindgen AppLayerParserStateSetFlag

Ticket: 7667
pull/13419/head
Philippe Antoine 1 month 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
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;

@ -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,
);
}
}
}

@ -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);
}

@ -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;

@ -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);

@ -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;

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

@ -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);
}
}

@ -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 */

@ -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));
}
}

@ -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 */

Loading…
Cancel
Save