]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge branch 'master' of
authorhuica <huica@cisco.com>
Tue, 1 Sep 2015 16:36:11 +0000 (12:36 -0400)
committerhuica <huica@cisco.com>
Tue, 1 Sep 2015 16:36:11 +0000 (12:36 -0400)
https://huica@stash-eng-rtp1.cisco.com/stash/scm/snort/snort3.git into
fileclass2

Conflicts:
src/CMakeLists.txt
src/file_api/file_capture.cc
src/file_api/file_mime_process.cc
src/file_api/file_service.cc
src/service_inspectors/nhttp_inspect/nhttp_flow_data.h
src/service_inspectors/nhttp_inspect/nhttp_msg_body.cc
src/service_inspectors/nhttp_inspect/nhttp_msg_header.cc
src/service_inspectors/smtp/smtp.cc

25 files changed:
1  2 
configure.ac
src/CMakeLists.txt
src/Makefile.am
src/file_api/file_capture.cc
src/file_api/file_mempool.cc
src/file_api/file_resume_block.cc
src/file_api/file_stats.h
src/main/modules.cc
src/main/snort.cc
src/parser/config_file.cc
src/service_inspectors/ftp_telnet/ftp_data.cc
src/service_inspectors/ftp_telnet/pp_ftp.cc
src/service_inspectors/imap/imap.cc
src/service_inspectors/imap/imap_paf.cc
src/service_inspectors/nhttp_inspect/nhttp_flow_data.cc
src/service_inspectors/nhttp_inspect/nhttp_flow_data.h
src/service_inspectors/nhttp_inspect/nhttp_msg_body.cc
src/service_inspectors/nhttp_inspect/nhttp_msg_chunk.cc
src/service_inspectors/nhttp_inspect/nhttp_msg_header.cc
src/service_inspectors/nhttp_inspect/nhttp_msg_header.h
src/service_inspectors/nhttp_inspect/nhttp_stream_splitter.cc
src/service_inspectors/pop/pop.cc
src/service_inspectors/pop/pop_paf.cc
src/service_inspectors/smtp/smtp.cc
src/service_inspectors/smtp/smtp_paf.cc

diff --cc configure.ac
Simple merge
index 318aa9e45480e1876c9842c3e9475fdd26ee2cd7,df1b7a1849033e96a0833277076ea064b0eec8e8..9a88aadfe2932dfc2aa7b01f53db0b9157f7c231
@@@ -95,12 -103,14 +103,15 @@@ target_link_libraries( snor
      stream_udp
      stream_user
      stream_file
-     http_inspect
-     flow
-     parser
-     file_api
      file
+     file_api
 +    mime
+     http_inspect
+     ${PIGLET_LIBRARIES}
+     ips_options
+     parser
+     search_engines
+     flow
      control
      filter
      detection
diff --cc src/Makefile.am
index 19195c815d1774f8b7ad8670968dc8e13cc3e36f,5396e6fcc6f3540b846fd69bff5f56d9914b9fdb..f5b3d491f676cdcaa24fcd35c17664d0f84f1878
@@@ -59,8 -67,8 +67,9 @@@ stream/user/libstream_user.a 
  stream/file/libstream_file.a \
  file_api/libfile_api.a \
  file_api/libs/libfile.a \
 +mime/libmime.a \
  service_inspectors/http_inspect/libhttp_inspect.a \
+ $(pig_list) \
  ips_options/libips_options.a \
  parser/libparser.a \
  search_engines/libsearch_engines.a \
index 705a890a89ba31b14f6993a5e92064fb31099b40,916c18f18645831fd6dff532652cfebfb4c32851..648f8a8d8554484de048f544fdfc5a2b01f67d5e
  FileMemPool* file_mempool = NULL;
  File_Capture_Stats file_capture_stats;
  
- /*
-  * Verify file capture information and file context information matched
-  * This is used for debug purpose
-  */
+ #ifdef DEBUG_MSGS
+ // verify file capture information and file context information matched
  
 -static void verify_file_capture_info(
 -    FileContext* context, FileCaptureInfo* fileInfo)
 +void FileCapture::verifiy(FileContext* context)
  {
 -    /* file capture length should be one of two possible values */
 -    if (context->processed_bytes)
 -    {
 -        if ((fileInfo->file_size != context->processed_bytes) &&
 -            (fileInfo->file_size + context->current_data_len
 -                != context->processed_bytes))
 -        {
 -            FILE_DEBUG_MSGS("File capture size failed w.r.t processed size!\n");
 -        }
 -    }
 -    else
 -    {
 -        if ((fileInfo->file_size != context->file_size) &&
 -            (fileInfo->file_size + context->current_data_len
 -                != context->file_size))
 -        {
 -            FILE_DEBUG_MSGS("File capture size failed w.r.t final file size!\n");
 -        }
 -    }
 -}
 -
 -static void verifiy_file_capture(
 -    FileContext* context, FileCaptureInfo* fileInfo)
 -{
 -    SHA256CONTEXT sha_ctx;
 +    SHA256_CTX sha_ctx;
      uint8_t* buff;
      int size;
 -    FileCaptureInfo* file_mem = fileInfo;
 +    FileCaptureBlock* file_mem = head;
      uint8_t sha256[SHA256_HASH_SIZE + 1];
      int i;
  
Simple merge
Simple merge
index 7ad59fe4deaf51f3fe1d108d7b54baac220e3840,ff73fddb65068b86ed241ca1319e06a47a7403de..c62130b0f86b293a12abe95017b66d455bc06be6
@@@ -52,9 -52,16 +52,9 @@@ typedef struct _File_Stat
  
  extern FileStats file_stats;
  
- #define FILE_DEBUG_MSGS(msg) DEBUG_WRAP(DebugMessage(DEBUG_FILE, msg); )
+ #define FILE_DEBUG_MSGS(msg) DebugMessage(DEBUG_FILE, msg)
  
 -void printFileContext(FileContext* context);
 -
  void print_file_stats();
  
 -/*
 - * Print out file statistics
 - */
 -void print_file_stats(int exiting);
 -
  #endif
  
Simple merge
Simple merge
Simple merge
Simple merge
index 07002e76880b58aff2d0ff3e922b1d8c66063022,8609fe61d6e478e26a70570a3418c54812301572..548eb389e4addf8480fa8cc95fd2297ccc432ac8
@@@ -206,10 -206,10 +206,10 @@@ static bool find_data_end_mime_data(con
      }
  
      // check for mime flush point
 -    if (file_api->process_mime_paf_data(&(pfdata->mime_info), ch))
 +    if (process_mime_paf_data(&(pfdata->mime_info), ch))
      {
-         DEBUG_WRAP(DebugMessage(DEBUG_IMAP, "IMAP PAF: Mime Boundary found."
-             " Flushing data!\n"); );
+         DebugMessage(DEBUG_IMAP, "IMAP PAF: Mime Boundary found."
+             " Flushing data!\n");
          return true;
      }
  
index 87f8a88449a899e8c3a05dec6a380e6ce77a0692,46710fe850e7d25db8612c2f3c45ca510afb1fd0..0aaa8661392828975f0e69b985aba51329feb6c4
@@@ -96,7 -96,9 +96,9 @@@ private
      NHttpEnums::MethodId method_id = NHttpEnums::METH__NOTPRESENT;
      int32_t status_code_num = NHttpEnums::STAT_NOTPRESENT;
      int64_t file_depth_remaining[2] = { NHttpEnums::STAT_NOTPRESENT, NHttpEnums::STAT_NOTPRESENT };
 -    MimeState* mime_state = nullptr;  // SRC_CLIENT only
+     int64_t detect_depth_remaining[2] = { NHttpEnums::STAT_NOTPRESENT,
+         NHttpEnums::STAT_NOTPRESENT };
 +    MimeSession* mime_state = nullptr;  // SRC_CLIENT only
  
      // number of user data octets seen so far (regular body or chunks)
      int64_t body_octets[2] = { NHttpEnums::STAT_NOTPRESENT, NHttpEnums::STAT_NOTPRESENT };
index 26a100371aa44511ab0be836b13a1f7a1273479f,c5ae1fbeacf16c250cbe90d8cc2b442b4e7ac246..d115646dd1d8580a9a7ba6a0c2b8ee4f93ce8693
@@@ -110,10 -116,10 +116,10 @@@ void NHttpMsgBody::do_file_processing(
              session_data->file_depth_remaining[source_id] = 0;
          }
      }
 -    else
 +    else if (session_data->mime_state != nullptr)
      {
-         session_data->mime_state->process_mime_data(flow, data.start, data.start + fp_length,
-             true, file_position);
 -        file_api->process_mime_data(flow, file_data.start, file_data.start + fp_length,
 -            session_data->mime_state, true, file_position);
++        session_data->mime_state->process_mime_data(flow, file_data.start,
++            file_data.start + fp_length, true, file_position);
  
          session_data->file_depth_remaining[source_id] -= fp_length;
          if (session_data->file_depth_remaining[source_id] == 0)
index ec6f69ff394a9485d9cac070987f84bb72117570,f447b9795b45ebbf9bd176e359a1cfeb596f2c26..abdc06640f122aaf3f34c4cf9579fc77db2167d3
@@@ -123,3 -104,46 +105,46 @@@ void NHttpMsgHeader::update_flow(
      session_data->section_type[source_id] = SEC__NOTCOMPUTE;
  }
  
 -        if ((session_data->file_depth_remaining[source_id] = file_api->get_max_file_depth()) < 0)
+ // Common activities of preparing for upcoming regular body or chunked body
+ void NHttpMsgHeader::prepare_body()
+ {
+     session_data->body_octets[source_id] = 0;
+     const int64_t& depth = (source_id == SRC_CLIENT) ? params->request_depth :
+         params->response_depth;
+     session_data->detect_depth_remaining[source_id] = (depth != -1) ? depth : INT64_MAX;
+     setup_file_processing();
+     setup_decompression();
+     update_depth();
+     session_data->infractions[source_id].reset();
+     session_data->events[source_id].reset();
+ }
+ void NHttpMsgHeader::setup_file_processing()
+ {
+     // FIXIT-M Bidirectional file processing is problematic so we don't do it. When the library
+     // fully supports it remove the outer if statement that prevents it from being done.
+     if (session_data->file_depth_remaining[1-source_id] == 0)
+     {
++        if ((session_data->file_depth_remaining[source_id] = FileService::get_max_file_depth) < 0)
+         {
+            session_data->file_depth_remaining[source_id] = 0;
+         }
+         if (source_id == SRC_CLIENT)
+         {
+             // FIXIT-L Cannot use new because file_api insists on freeing the mime_state using
+             // free().
+             session_data->mime_state = (MimeState*) new_calloc(1, sizeof(MimeState));
+             file_api->set_mime_log_config_defauts(&mime_conf);
+             session_data->mime_state->log_config = &mime_conf;
+             file_api->set_mime_decode_config_defauts(&decode_conf);
+             session_data->mime_state->decode_conf = &decode_conf;
+             file_api->set_log_buffers(&session_data->mime_state->log_state,
+                 session_data->mime_state->log_config);
+         }
+     }
+ }
+ void NHttpMsgHeader::setup_decompression()
+ {
+ }
index d6473cfd45b6bfefacb66492e2cbfda8a8610a3c,72e131a83b2979da81df9def85a6131686780ee5..4c03cb44ff9b65858c76fb247fc361256326423e
@@@ -38,8 -39,12 +39,12 @@@ public
      void update_flow() override;
  private:
      // Dummy configurations to support MIME processing
 -    MAIL_LogConfig mime_conf;
 +    MailLogConfig mime_conf;
      DecodeConfig decode_conf;
+     void prepare_body();
+     void setup_file_processing();
+     void setup_decompression();
  };
  
  #endif
index aaec2743323810ab7431af0f4c179e27d583905a,ce0749b0c66fee039e910efb8adee5ba4a906407..b908f3521de6416d2a4735ee480f382f585db512
@@@ -485,10 -517,11 +485,10 @@@ static void POP_ProcessServerPacket(Pac
      {
          if (pop_ssn->state == STATE_DATA)
          {
-             DEBUG_WRAP(DebugMessage(DEBUG_POP, "DATA STATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); );
+             DebugMessage(DEBUG_POP, "DATA STATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
              //ptr = POP_HandleData(p, ptr, end);
 -            FilePosition position = file_api->get_file_position(p);
 -            ptr = file_api->process_mime_data(p->flow, ptr, end, &(pop_ssn->mime_ssn), 0,
 -                position);
 +            FilePosition position = get_file_position(p);
 +            ptr = pop_ssn->mime_ssn->process_mime_data(p->flow, ptr, end, 0, position);
              continue;
          }
          POP_GetEOL(ptr, end, &eol, &eolm);
index f3ec905feec031bd420f1b96491fd5d58f771b63,5a1af3543cf15a65f130e1af2e42fad193584492..89c41b6dab1259b5f33e53549c5039cd65ea0cee
@@@ -201,9 -201,9 +201,9 @@@ static bool find_data_end_multi_line(Po
  {
      // FIXIT:  This will currently flush on MIME boundary, and one line later at end of PDU
  
 -    if (file_api->check_data_end(&(pfdata->end_state), ch))
 +    if (check_data_end(&(pfdata->end_state), ch))
      {
-         DEBUG_WRAP(DebugMessage(DEBUG_POP, "End of Multi-line response found\n"); );
+         DebugMessage(DEBUG_POP, "End of Multi-line response found\n");
          pfdata->end_of_data = true;
          pfdata->pop_state = POP_PAF_SINGLE_LINE_STATE;
          reset_data_states(pfdata);
      // if this is a data command, search for MIME ending
      if (mime_data)
      {
 -        if (file_api->process_mime_paf_data(&(pfdata->data_info), ch))
 +        if (process_mime_paf_data(&(pfdata->data_info), ch))
          {
-             DEBUG_WRAP(DebugMessage(DEBUG_POP, "Mime Boundary found.  Flushing data!\n"); );
+             DebugMessage(DEBUG_POP, "Mime Boundary found.  Flushing data!\n");
              pfdata->cmd_continued = true;
              return true;
          }
index 53b8e9cdc309a07628dfa76740a44d3574f96ec2,53679a4ae478bd0afed814e260db58763f76560b..fc3c1fc6bfd3acac6e76885b830dc760b962807d
@@@ -1073,9 -1182,10 +1073,9 @@@ static void SMTP_ProcessClientPacket(SM
              break;
          case STATE_DATA:
          case STATE_BDATA:
-             DEBUG_WRAP(DebugMessage(DEBUG_SMTP, "DATA STATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); );
+             DebugMessage(DEBUG_SMTP, "DATA STATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
 -            position = file_api->get_file_position(p);
 -            ptr = file_api->process_mime_data(p->flow, ptr, end, &(smtp_ssn->mime_ssn), 1,
 -                position);
 +            position = get_file_position(p);
 +            ptr = smtp_ssn->mime_ssn->process_mime_data(p->flow, ptr, end, 1, position);
              //ptr = SMTP_HandleData(p, ptr, end, &(smtp_ssn->mime_ssn));
              break;
          case STATE_XEXCH50:
index 167c55b8b1c1d25216977a036104a06252cc7eb2,74fab0c7cf71a91b6083044eea1dc0f343f7de4e..91112c9bb8772e3990dbd006fce2efc71d32dafa
@@@ -260,9 -260,9 +260,9 @@@ static inline bool flush_based_length(S
   *   * Process data boundary and flush each file based on boundary*/
  static inline bool process_data(SmtpPafData* pfdata,  uint8_t data)
  {
 -    if (flush_based_length(pfdata)|| file_api->check_data_end(&(pfdata->data_end_state), data))
 +    if (flush_based_length(pfdata)|| check_data_end(&(pfdata->data_end_state), data))
      {
-         DEBUG_WRAP(DebugMessage(DEBUG_SMTP, "End of data\n"); );
+         DebugMessage(DEBUG_SMTP, "End of data\n");
          /*Clean up states*/
          pfdata->smtp_state = SMTP_PAF_CMD_STATE;
          pfdata->end_of_data = true;