From 569cc5d238639c27a88a94069bf28d8f60809f03 Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Thu, 19 Jan 2017 10:52:41 -0800 Subject: [PATCH] util-file: introduce new functions for file size This patch introduces the FileDataSize and FileTrackedSize functions. The first one is just a renaming of the initial FilSize function whereas the other one is using the newly introduced size field as value. --- src/app-layer-htp-file.c | 4 ++-- src/app-layer-smtp.c | 8 ++++---- src/detect-engine-file.c | 2 +- src/detect-engine-filedata-smtp.c | 4 ++-- src/detect-filemagic.c | 8 ++++---- src/detect-filesize.c | 2 +- src/log-file.c | 2 +- src/log-filestore.c | 2 +- src/output-filedata.c | 2 +- src/output-json-file.c | 2 +- src/util-file.c | 30 ++++++++++++++++++++++-------- src/util-file.h | 3 ++- src/util-lua-common.c | 2 +- 13 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/app-layer-htp-file.c b/src/app-layer-htp-file.c index 199290610a..520f734c03 100644 --- a/src/app-layer-htp-file.c +++ b/src/app-layer-htp-file.c @@ -633,11 +633,11 @@ static int HTPFileParserTest03(void) } if (http_state->files_ts->head == NULL || - FileSize(http_state->files_ts->head) != 11) + FileDataSize(http_state->files_ts->head) != 11) { if (http_state->files_ts->head != NULL) printf("filedata len not 11 but %"PRIu64": ", - FileSize(http_state->files_ts->head)); + FileDataSize(http_state->files_ts->head)); goto end; } diff --git a/src/app-layer-smtp.c b/src/app-layer-smtp.c index cd02d91236..f1e9aecb83 100644 --- a/src/app-layer-smtp.c +++ b/src/app-layer-smtp.c @@ -371,7 +371,7 @@ static void SMTPPruneFiles(FileContainer *files) if (file->sb->stream_offset == 0) window = MAX(window, smtp_config.content_inspect_min_size); - uint64_t file_size = FileSize(file); + uint64_t file_size = FileDataSize(file); uint64_t data_size = file_size - file->sb->stream_offset; SCLogDebug("window %"PRIu32", file_size %"PRIu64", data_size %"PRIu64, @@ -4840,8 +4840,8 @@ static int SMTPParserTest14(void) printf("smtp-mime file name is incorrect"); goto end; } - if (FileSize(file) != filesize){ - printf("smtp-mime file size %"PRIu64" is incorrect", FileSize(file)); + if (FileTrackedSize(file) != filesize){ + printf("smtp-mime file size %"PRIu64" is incorrect", FileDataSize(file)); goto end; } static uint8_t org_binary[] = { @@ -5127,7 +5127,7 @@ static int SMTPProcessDataChunkTest05(void){ FAIL_IF(file == NULL); ret = SMTPProcessDataChunk((uint8_t *)mimemsg, sizeof(mimemsg), state); FAIL_IF(ret != 0); - FAIL_IF((uint32_t)FileSize(file) != 106); + FAIL_IF((uint32_t)FileDataSize(file) != 106); SMTPStateFree(smtp_state); FLOW_DESTROY(&f); PASS; diff --git a/src/detect-engine-file.c b/src/detect-engine-file.c index dafb28a880..9b9462ab5d 100644 --- a/src/detect-engine-file.c +++ b/src/detect-engine-file.c @@ -110,7 +110,7 @@ static int DetectFileInspect(ThreadVars *tv, DetectEngineThreadCtx *det_ctx, break; } - uint64_t file_size = FileSize(file); + uint64_t file_size = FileDataSize(file); if ((s->file_flags & FILE_SIG_NEED_MAGIC) && file_size == 0) { SCLogDebug("sig needs file content, but we don't have any"); r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH; diff --git a/src/detect-engine-filedata-smtp.c b/src/detect-engine-filedata-smtp.c index e0fa467e9e..4635ad10ee 100644 --- a/src/detect-engine-filedata-smtp.c +++ b/src/detect-engine-filedata-smtp.c @@ -96,7 +96,7 @@ static const uint8_t *DetectEngineSMTPGetBufferForTX(uint64_t tx_id, const uint8_t *buffer = NULL; *buffer_len = 0; *stream_start_offset = 0; - uint64_t file_size = FileSize(curr_file); + uint64_t file_size = FileDataSize(curr_file); if (det_ctx->smtp_buffers_list_len == 0) { if (SMTPCreateSpace(det_ctx, 1) < 0) @@ -160,7 +160,7 @@ static const uint8_t *DetectEngineSMTPGetBufferForTX(uint64_t tx_id, det_ctx->smtp[index].offset = curr_file->content_inspected; /* updat inspected tracker */ - curr_file->content_inspected = FileSize(curr_file); + curr_file->content_inspected = FileDataSize(curr_file); SCLogDebug("content_inspected %u, offset %u", (uint)curr_file->content_inspected, (uint)det_ctx->smtp[index].offset); diff --git a/src/detect-filemagic.c b/src/detect-filemagic.c index 9fe540ffa8..2c2c46f676 100644 --- a/src/detect-filemagic.c +++ b/src/detect-filemagic.c @@ -110,7 +110,7 @@ void DetectFilemagicRegister(void) */ int FilemagicGlobalLookup(File *file) { - if (file == NULL || FileSize(file) == 0) { + if (file == NULL || FileDataSize(file) == 0) { SCReturnInt(-1); } @@ -121,7 +121,7 @@ int FilemagicGlobalLookup(File *file) StreamingBufferGetData(file->sb, &data, &data_len, &offset); if (offset == 0) { - if (FileSize(file) >= FILEMAGIC_MIN_SIZE) { + if (FileDataSize(file) >= FILEMAGIC_MIN_SIZE) { file->magic = MagicGlobalLookup(data, data_len); } else if (file->state >= FILE_STATE_CLOSED) { file->magic = MagicGlobalLookup(data, data_len); @@ -141,7 +141,7 @@ int FilemagicGlobalLookup(File *file) */ int FilemagicThreadLookup(magic_t *ctx, File *file) { - if (ctx == NULL || file == NULL || FileSize(file) == 0) { + if (ctx == NULL || file == NULL || FileDataSize(file) == 0) { SCReturnInt(-1); } @@ -152,7 +152,7 @@ int FilemagicThreadLookup(magic_t *ctx, File *file) StreamingBufferGetData(file->sb, &data, &data_len, &offset); if (offset == 0) { - if (FileSize(file) >= FILEMAGIC_MIN_SIZE) { + if (FileDataSize(file) >= FILEMAGIC_MIN_SIZE) { file->magic = MagicThreadLookup(ctx, data, data_len); } else if (file->state >= FILE_STATE_CLOSED) { file->magic = MagicThreadLookup(ctx, data, data_len); diff --git a/src/detect-filesize.c b/src/detect-filesize.c index 142baa02ae..12b4c18f25 100644 --- a/src/detect-filesize.c +++ b/src/detect-filesize.c @@ -93,7 +93,7 @@ static int DetectFilesizeMatch (ThreadVars *t, DetectEngineThreadCtx *det_ctx, F DetectFilesizeData *fsd = (DetectFilesizeData *)m->ctx; int ret = 0; - uint64_t file_size = FileSize(file); + uint64_t file_size = FileTrackedSize(file); SCLogDebug("file size %"PRIu64", check %"PRIu64, file_size, fsd->size1); diff --git a/src/log-file.c b/src/log-file.c index 0b441127b9..3ddf8643b1 100644 --- a/src/log-file.c +++ b/src/log-file.c @@ -319,7 +319,7 @@ static void LogFileWriteJsonRecord(LogFileLogThread *aft, const Packet *p, const break; } fprintf(fp, "\"stored\": %s, ", ff->flags & FILE_STORED ? "true" : "false"); - fprintf(fp, "\"size\": %"PRIu64" ", FileSize(ff)); + fprintf(fp, "\"size\": %"PRIu64" ", FileTrackedSize(ff)); fprintf(fp, "}\n"); fflush(fp); SCMutexUnlock(&aft->file_ctx->fp_mutex); diff --git a/src/log-filestore.c b/src/log-filestore.c index 260357cb9d..5fca12d203 100644 --- a/src/log-filestore.c +++ b/src/log-filestore.c @@ -291,7 +291,7 @@ static void LogFilestoreLogCloseMetaFile(const File *ff) fprintf(fp, "STATE: UNKNOWN\n"); break; } - fprintf(fp, "SIZE: %"PRIu64"\n", FileSize(ff)); + fprintf(fp, "SIZE: %"PRIu64"\n", FileTrackedSize(ff)); fclose(fp); } else { diff --git a/src/output-filedata.c b/src/output-filedata.c index 3e7734375b..0f2f9e29d7 100644 --- a/src/output-filedata.c +++ b/src/output-filedata.c @@ -183,7 +183,7 @@ static TmEcode OutputFiledataLog(ThreadVars *tv, Packet *p, void *thread_data) /* if we have no data chunks left to log, we should still * close the logger(s) */ - if (FileSize(ff) == ff->content_stored && + if (FileDataSize(ff) == ff->content_stored && (file_trunc || file_close)) { CallLoggers(tv, store, p, ff, NULL, 0, OUTPUT_FILEDATA_FLAG_CLOSE); ff->flags |= FILE_STORED; diff --git a/src/output-json-file.c b/src/output-json-file.c index 0258c98513..e840b669c8 100644 --- a/src/output-json-file.c +++ b/src/output-json-file.c @@ -171,7 +171,7 @@ static void FileWriteJsonRecord(JsonFileLogThread *aft, const Packet *p, const F if (ff->flags & FILE_STORED) { json_object_set_new(fjs, "file_id", json_integer(ff->file_id)); } - json_object_set_new(fjs, "size", json_integer(ff->size)); + json_object_set_new(fjs, "size", json_integer(FileTrackedSize(ff))); json_object_set_new(fjs, "tx_id", json_integer(ff->txid)); /* originally just 'file', but due to bug 1127 naming it fileinfo */ diff --git a/src/util-file.c b/src/util-file.c index 8148f7a2ea..f868222a85 100644 --- a/src/util-file.c +++ b/src/util-file.c @@ -267,12 +267,12 @@ int FileMagicSize(void) } /** - * \brief get the size of the file + * \brief get the size of the file data * * This doesn't reflect how much of the file we have in memory, just the - * total size tracked so far. + * total size of filedata so far. */ -uint64_t FileSize(const File *file) +uint64_t FileDataSize(const File *file) { if (file != NULL && file->sb != NULL) { SCLogDebug("returning %"PRIu64, @@ -283,6 +283,20 @@ uint64_t FileSize(const File *file) return 0; } +/** + * \brief get the size of the file + * + * This doesn't reflect how much of the file we have in memory, just the + * total size of file so far. + */ +uint64_t FileTrackedSize(const File *file) +{ + if (file != NULL) { + return file->size; + } + return 0; +} + static int FilePruneFile(File *file) { SCEnter(); @@ -299,7 +313,7 @@ static int FilePruneFile(File *file) #endif uint64_t left_edge = file->content_stored; if (file->flags & FILE_NOSTORE) { - left_edge = FileSize(file); + left_edge = FileDataSize(file); } if (file->flags & FILE_USE_DETECT) { left_edge = MIN(left_edge, file->content_inspected); @@ -309,7 +323,7 @@ static int FilePruneFile(File *file) StreamingBufferSlideToOffset(file->sb, left_edge); } - if (left_edge != FileSize(file)) { + if (left_edge != FileDataSize(file)) { SCReturnInt(0); } @@ -516,7 +530,7 @@ static int FileStoreNoStoreCheck(File *ff) if (ff->flags & FILE_NOSTORE) { if (ff->state == FILE_STATE_OPENED && - FileSize(ff) >= (uint64_t)FileMagicSize()) + FileDataSize(ff) >= (uint64_t)FileMagicSize()) { SCReturnInt(1); } @@ -706,7 +720,7 @@ File *FileOpenFile(FileContainer *ffc, const StreamingBufferConfig *sbcfg, ff->state = FILE_STATE_ERROR; SCReturnPtr(NULL, "File"); } - SCLogDebug("file size is now %"PRIu64, FileSize(ff)); + SCLogDebug("file size is now %"PRIu64, FileTrackedSize(ff)); } SCReturnPtr(ff, "File"); @@ -1034,7 +1048,7 @@ void FileDisableStoringForFile(File *ff) SCLogDebug("not storing this file"); ff->flags |= FILE_NOSTORE; - if (ff->state == FILE_STATE_OPENED && FileSize(ff) >= (uint64_t)FileMagicSize()) { + if (ff->state == FILE_STATE_OPENED && FileDataSize(ff) >= (uint64_t)FileMagicSize()) { if (g_file_force_md5 == 0 && g_file_force_sha1 == 0 && g_file_force_sha256 == 0 && g_file_force_tracking == 0) { (void)FileCloseFilePtr(ff, NULL, 0, diff --git a/src/util-file.h b/src/util-file.h index 6794364eb4..8c3828d9b9 100644 --- a/src/util-file.h +++ b/src/util-file.h @@ -214,7 +214,8 @@ void FileStoreFileById(FileContainer *fc, uint32_t); void FileTruncateAllOpenFiles(FileContainer *); -uint64_t FileSize(const File *file); +uint64_t FileDataSize(const File *file); +uint64_t FileTrackedSize(const File *file); uint16_t FileFlowToFlags(const Flow *flow, uint8_t direction); diff --git a/src/util-lua-common.c b/src/util-lua-common.c index b51f8aad40..f1c13a8a95 100644 --- a/src/util-lua-common.c +++ b/src/util-lua-common.c @@ -650,7 +650,7 @@ static int LuaCallbackFileInfoPushToStackFromFile(lua_State *luastate, const Fil lua_pushnumber(luastate, file->file_id); lua_pushnumber(luastate, file->txid); lua_pushlstring(luastate, (char *)file->name, file->name_len); - lua_pushnumber(luastate, FileSize(file)); + lua_pushnumber(luastate, FileTrackedSize(file)); lua_pushstring (luastate, #ifdef HAVE_MAGIC file->magic -- 2.47.2