From: Victor Julien Date: Thu, 18 Mar 2021 09:57:48 +0000 (+0100) Subject: http: support per-tx file accounting X-Git-Tag: suricata-7.0.0-beta1~1443 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d74c18ee28fbda3a5b6d2ddb157cae90b70da0bf;p=thirdparty%2Fsuricata.git http: support per-tx file accounting --- diff --git a/src/app-layer-htp-file.c b/src/app-layer-htp-file.c index b84df0e30f..c025b04add 100644 --- a/src/app-layer-htp-file.c +++ b/src/app-layer-htp-file.c @@ -76,9 +76,8 @@ * \retval -1 error * \retval -2 not handling files on this flow */ -int HTPFileOpen(HtpState *s, const uint8_t *filename, uint16_t filename_len, - const uint8_t *data, uint32_t data_len, - uint64_t txid, uint8_t direction) +int HTPFileOpen(HtpState *s, HtpTxUserData *tx, const uint8_t *filename, uint16_t filename_len, + const uint8_t *data, uint32_t data_len, uint64_t txid, uint8_t direction) { int retval = 0; uint16_t flags = 0; @@ -145,6 +144,7 @@ int HTPFileOpen(HtpState *s, const uint8_t *filename, uint16_t filename_len, } FileSetTx(files->tail, txid); + tx->tx_data.files_opened++; end: SCReturnInt(retval); diff --git a/src/app-layer-htp-file.h b/src/app-layer-htp-file.h index 3e6bdc1fb9..6ace0f1125 100644 --- a/src/app-layer-htp-file.h +++ b/src/app-layer-htp-file.h @@ -31,7 +31,8 @@ typedef struct HtpContentRange_ { int64_t size; } HtpContentRange; -int HTPFileOpen(HtpState *, const uint8_t *, uint16_t, const uint8_t *, uint32_t, uint64_t, uint8_t); +int HTPFileOpen(HtpState *, HtpTxUserData *, const uint8_t *, uint16_t, const uint8_t *, uint32_t, + uint64_t, uint8_t); int HTPParseContentRange(bstr * rawvalue, HtpContentRange *range); int HTPFileSetRange(HtpState *, bstr *rawvalue); int HTPFileStoreChunk(HtpState *, const uint8_t *, uint32_t, uint8_t); diff --git a/src/app-layer-htp.c b/src/app-layer-htp.c index 49225a8136..13d62917d1 100644 --- a/src/app-layer-htp.c +++ b/src/app-layer-htp.c @@ -1536,9 +1536,8 @@ static int HtpRequestBodyHandleMultipart(HtpState *hstate, HtpTxUserData *htud, printf("FILEDATA END: \n"); #endif - result = HTPFileOpen(hstate, filename, filename_len, - filedata, filedata_len, HtpGetActiveRequestTxID(hstate), - STREAM_TOSERVER); + result = HTPFileOpen(hstate, htud, filename, filename_len, filedata, filedata_len, + HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER); if (result == -1) { goto end; } else if (result == -2) { @@ -1589,9 +1588,8 @@ static int HtpRequestBodyHandleMultipart(HtpState *hstate, HtpTxUserData *htud, filedata = NULL; filedata_len = 0; } - result = HTPFileOpen(hstate, filename, filename_len, - filedata, filedata_len, HtpGetActiveRequestTxID(hstate), - STREAM_TOSERVER); + result = HTPFileOpen(hstate, htud, filename, filename_len, filedata, + filedata_len, HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER); if (result == -1) { goto end; } else if (result == -2) { @@ -1605,9 +1603,8 @@ static int HtpRequestBodyHandleMultipart(HtpState *hstate, HtpTxUserData *htud, filedata_len = header_next - filedata - 2; SCLogDebug("filedata_len %u", filedata_len); - result = HTPFileOpen(hstate, filename, filename_len, - filedata, filedata_len, HtpGetActiveRequestTxID(hstate), - STREAM_TOSERVER); + result = HTPFileOpen(hstate, htud, filename, filename_len, filedata, + filedata_len, HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER); if (result == -1) { goto end; } else if (result == -2) { @@ -1678,7 +1675,7 @@ static int HtpRequestBodyHandlePOSTorPUT(HtpState *hstate, HtpTxUserData *htud, } if (filename != NULL) { - result = HTPFileOpen(hstate, filename, (uint32_t)filename_len, data, data_len, + result = HTPFileOpen(hstate, htud, filename, (uint32_t)filename_len, data, data_len, HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER); if (result == -1) { goto end; @@ -1749,8 +1746,8 @@ static int HtpResponseBodyHandle(HtpState *hstate, HtpTxUserData *htud, } if (filename != NULL) { - result = HTPFileOpen(hstate, filename, (uint32_t)filename_len, - data, data_len, HtpGetActiveResponseTxID(hstate), STREAM_TOCLIENT); + result = HTPFileOpen(hstate, htud, filename, (uint32_t)filename_len, data, data_len, + HtpGetActiveResponseTxID(hstate), STREAM_TOCLIENT); SCLogDebug("result %d", result); if (result == -1) { goto end;