]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
http: support per-tx file accounting
authorVictor Julien <victor@inliniac.net>
Thu, 18 Mar 2021 09:57:48 +0000 (10:57 +0100)
committerVictor Julien <victor@inliniac.net>
Wed, 1 Sep 2021 06:33:52 +0000 (08:33 +0200)
src/app-layer-htp-file.c
src/app-layer-htp-file.h
src/app-layer-htp.c

index b84df0e30f6da693c7e3a8b9dedb654c2078cd80..c025b04addbfb1db8b33713f43ea5da5fa4d094d 100644 (file)
@@ -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);
index 3e6bdc1fb923d221748f5b845903631a69ba68b2..6ace0f11253c649c10f46475c6300db96196d0ec 100644 (file)
@@ -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);
index 49225a81362973b504469f5bd74b4fe5d0f0f905..13d62917d18625eb602888ee0c331903d368e9f7 100644 (file)
@@ -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;