]> 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)
committerShivani Bhardwaj <shivanib134@gmail.com>
Fri, 17 Sep 2021 02:48:52 +0000 (08:18 +0530)
(cherry picked from commit d74c18ee28fbda3a5b6d2ddb157cae90b70da0bf)

src/app-layer-htp-file.c
src/app-layer-htp-file.h
src/app-layer-htp.c

index 464868d6b796d1276218648abe2dd50ae8b0b22c..6d86573891f3a418885c5282e1084818180be030 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 78a7380dbc40e439c2db6a7bafde4c492d0a397e..a347308f96df21f6a25730b551960cc99857b5e3 100644 (file)
@@ -1537,9 +1537,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) {
@@ -1590,9 +1589,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) {
@@ -1606,9 +1604,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) {
@@ -1679,7 +1676,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;
@@ -1750,8 +1747,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;