From: Michael Altizer (mialtize) Date: Fri, 31 Jan 2020 05:46:28 +0000 (+0000) Subject: Merge pull request #1953 in SNORT/snort3 from ~OKHOMIAK/snort3:snort2lua_variable_exp... X-Git-Tag: 3.0.0-268~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c5b69136faa7b20181c086f313641465612766d;p=thirdparty%2Fsnort3.git Merge pull request #1953 in SNORT/snort3 from ~OKHOMIAK/snort3:snort2lua_variable_expansion to master Squashed commit of the following: commit 02f1799f1ed55f6763603fb2aa3470fc0741a3ee Author: Oleksii Khomiakovskyi Date: Tue Jan 21 09:49:35 2020 +0200 snort2lua: conversion of path containing variables --- diff --git a/tools/snort2lua/conversion_state.h b/tools/snort2lua/conversion_state.h index 61fef0598..b7fa77009 100644 --- a/tools/snort2lua/conversion_state.h +++ b/tools/snort2lua/conversion_state.h @@ -75,6 +75,50 @@ protected: return false; } + inline bool parse_path_option(const std::string& opt_name, + std::istringstream& stream) + { + std::string val; + + if (stream >> val) + { + std::size_t prev_pos = 0; + while (true) + { + auto env_start = val.find('$', prev_pos); + if (env_start == std::string::npos) + { + if (prev_pos) + val.push_back('\''); + break; + } + + if (env_start) + { + if (!prev_pos) + { + val.insert(prev_pos, "$\'"); + env_start += 2; + } + val.replace(env_start, 1, "\' .. "); + } + + auto env_end = val.find('/', env_start + 1); + if (env_end == std::string::npos) + break; + + val.replace(env_end, 1, " .. \'/"); + prev_pos = env_end + 5; + } + + table_api.add_option(opt_name, val); + return true; + } + + table_api.add_comment("snort.conf missing argument for: " + opt_name + " "); + return false; + } + inline bool parse_int_option(const std::string& opt_name, std::istringstream& stream, bool append) { diff --git a/tools/snort2lua/preprocessor_states/pps_reputation.cc b/tools/snort2lua/preprocessor_states/pps_reputation.cc index d1026e83e..b09ebe377 100644 --- a/tools/snort2lua/preprocessor_states/pps_reputation.cc +++ b/tools/snort2lua/preprocessor_states/pps_reputation.cc @@ -73,16 +73,7 @@ bool Reputation::convert(std::istringstream& data_stream) else if (keyword == "blacklist") { - std::string file_name; - if( arg_stream >> file_name) - { - tmpval = table_api.add_option("blacklist", file_name); - } - else - { - data_api.failed_conversion(arg_stream, "reputation: blacklist "); - tmpval = false; - } + tmpval = parse_path_option("blacklist", arg_stream); } else if (keyword == "memcap") { @@ -142,16 +133,7 @@ bool Reputation::convert(std::istringstream& data_stream) } else if (keyword == "whitelist") { - std::string file_name; - if( arg_stream >> file_name) - { - tmpval = table_api.add_option("whitelist", file_name); - } - else - { - data_api.failed_conversion(arg_stream, "reputation: whitelist "); - tmpval = false; - } + tmpval = parse_path_option("whitelist", arg_stream); } else {