diff --git a/winixd/Makefile b/winixd/Makefile index b750bb2..5a73c47 100644 --- a/winixd/Makefile +++ b/winixd/Makefile @@ -65,7 +65,7 @@ all: winix winix.so plugins winix: $(objfiles_main) winix.so - $(CXX) -o winix $(CXXFLAGS) $(LDFLAGS) $(objfiles_main) winix.so -lfcgi + $(CXX) -o winix $(CXXFLAGS) $(LDFLAGS) $(objfiles_main) winix.so winix.so: $(objfiles_no_main) diff --git a/winixd/Makefile.dep b/winixd/Makefile.dep index 734fc3f..340c9a9 100644 --- a/winixd/Makefile.dep +++ b/winixd/Makefile.dep @@ -2212,6 +2212,68 @@ ./core/winixsystem.o: core/filelog.h core/lock.h ./core/synchro.h ./core/winixsystem.o: ./core/plugin.h ./core/pluginmsg.h ./core/plugindata.h ./core/winixsystem.o: ./core/winixbase.h +./core/postparser.o: ./core/postparser.h ./core/httpsimpleparser.h +./core/postparser.o: ./core/winixmodeldeprecated.h core/winixbase.h +./core/postparser.o: core/config.h ../../pikotools/src/space/spaceparser.h +./core/postparser.o: ../../pikotools/src/space/space.h +./core/postparser.o: ../../pikotools/src/textstream/types.h +./core/postparser.o: ../../pikotools/src/convert/inttostr.h +./core/postparser.o: ../../pikotools/src/utf8/utf8.h +./core/postparser.o: ../../pikotools/src/textstream/stream.h +./core/postparser.o: ../../pikotools/src/utf8/utf8_templates.h +./core/postparser.o: ../../pikotools/src/utf8/utf8_private.h +./core/postparser.o: ../../pikotools/src/convert/baseparser.h +./core/postparser.o: ../../pikotools/src/textstream/textstream.h +./core/postparser.o: ../../pikotools/src/textstream/stream.h +./core/postparser.o: ../../pikotools/src/space/space.h +./core/postparser.o: ../../pikotools/src/date/date.h +./core/postparser.o: ../../pikotools/src/membuffer/membuffer.h +./core/postparser.o: ../../pikotools/src/textstream/types.h +./core/postparser.o: ../../pikotools/src/utf8/utf8_stream.h core/log.h +./core/postparser.o: core/logmanipulators.h ../../pikotools/src/log/log.h +./core/postparser.o: ../../pikotools/src/log/filelog.h ../../morm/src/morm.h +./core/postparser.o: ../../morm/src/morm_types.h ../../morm/src/model.h +./core/postparser.o: ../../morm/src/modelconnector.h ../../morm/src/clearer.h +./core/postparser.o: ../../morm/src/ft.h ../../morm/src/dbconnector.h +./core/postparser.o: ../../morm/src/queryresult.h +./core/postparser.o: ../../morm/src/flatconnector.h +./core/postparser.o: ../../morm/src/dbexpression.h +./core/postparser.o: ../../morm/src/baseexpression.h +./core/postparser.o: ../../morm/src/modelenv.h ../../morm/src/modeldata.h +./core/postparser.o: ../../morm/src/cursorhelper.h +./core/postparser.o: ../../morm/src/finderhelper.h +./core/postparser.o: ../../morm/src/fieldvaluehelper.h +./core/postparser.o: ../../morm/src/wrapper.h ../../morm/src/spacewrapper.h +./core/postparser.o: ../../morm/src/baseobjectwrapper.h +./core/postparser.o: ../../morm/src/modelcontainerwrapper.h +./core/postparser.o: ../../ezc/src/funinfo.h ../../ezc/src/item.h +./core/postparser.o: ../../pikotools/src/convert/text.h +./core/postparser.o: ../../morm/src/flatexpression.h ../../morm/src/finder.h +./core/postparser.o: ../../morm/src/cursor.h ../../morm/src/jsonexpression.h +./core/postparser.o: ../../morm/src/postgresqlexpression.h +./core/postparser.o: ../../morm/src/jsonconnector.h +./core/postparser.o: ../../morm/src/postgresqlconnector.h +./core/postparser.o: ../../morm/src/postgresqlqueryresult.h +./core/postparser.o: ../../morm/src/transaction.h core/log.h core/synchro.h +./core/postparser.o: core/filelog.h core/lock.h ./core/synchro.h +./core/postparser.o: ./core/plugin.h ./core/pluginmsg.h ./core/plugindata.h +./core/postparser.o: ./core/winixbase.h ./core/request.h +./core/postparser.o: ./core/requesttypes.h models/item.h models/winixmodel.h +./core/postparser.o: models/winixmodelconnector.h models/itemcontent.h +./core/postparser.o: templates/htmltextstream.h templates/misc.h +./core/postparser.o: templates/localefilter.h templates/locale.h +./core/postparser.o: ../../pikotools/src/convert/patternreplacer.h +./core/postparser.o: ../../pikotools/src/convert/strtoint.h +./core/postparser.o: ../../pikotools/src/convert/text.h +./core/postparser.o: ../../pikotools/src/convert/misc.h ../../ezc/src/ezc.h +./core/postparser.o: ../../ezc/src/generator.h ../../ezc/src/blocks.h +./core/postparser.o: ../../ezc/src/cache.h ../../ezc/src/functions.h +./core/postparser.o: ../../ezc/src/objects.h ../../ezc/src/pattern.h +./core/postparser.o: ../../ezc/src/outstreams.h +./core/postparser.o: ../../ezc/src/expressionparser.h ../../ezc/src/models.h +./core/postparser.o: ../../ezc/src/patternparser.h templates/htmltextstream.h +./core/postparser.o: ./core/error.h ./core/config.h ./core/textstream.h +./core/postparser.o: models/winixmodel.h ./core/header.h ./db/db.o: ./db/db.h db/dbbase.h db/dbconn.h db/dbtextstream.h ./db/db.o: core/textstream.h ../../pikotools/src/textstream/textstream.h ./db/db.o: ../../pikotools/src/textstream/stream.h diff --git a/winixd/core/postparser.cpp b/winixd/core/postparser.cpp new file mode 100644 index 0000000..06bc235 --- /dev/null +++ b/winixd/core/postparser.cpp @@ -0,0 +1,130 @@ +/* + * This file is a part of Winix + * and is distributed under the 2-Clause BSD licence. + * Author: Tomasz Sowa + */ + +/* + * Copyright (c) 2022, Tomasz Sowa + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include "postparser.h" +#include "httpsimpleparser.h" +#include "utf8/utf8.h" +#include "convert/text.h" + + +namespace Winix +{ + + +PostParser::PostParser() +{ + log_value_size = 0; + HttpSimpleParser::getchar_returns_utf8_chars = true; +} + + +void PostParser::LogValueSize(size_t s) +{ + log_value_size = s; +} + + +void PostParser::Parse(FCGX_Stream * in, Request & request) +{ + this->in = in; + this->request = &request; + var_index = 1; + raw_post.clear(); + + has_winix_post_params_msg = plugin->HasMessage(WINIX_POST_PARAMS); + has_winix_raw_post_msg = plugin->HasMessage(WINIX_RAW_POST_STRING); + + HttpSimpleParser::Parse(); + + if( has_winix_raw_post_msg ) + plugin->Call(0, WINIX_RAW_POST_STRING, &raw_post); + + raw_post.clear(); +} + + +int PostParser::GetChar() +{ + int c = FCGX_GetChar(in); + + if( c != -1 && has_winix_raw_post_msg ) + raw_post += c; + +return c; +} + + +void PostParser::CreateLog(bool param_added, const std::wstring & name, const std::wstring & value) +{ + log << log2 << "Method POST, name: \"" << name << "\""; + + if( log_value_size > 0 && !pt::is_substr_nc(L"pass", name.c_str()) ) + { + log << ", value: "; + + if( value.size() > log_value_size ) + log << "(first " << log_value_size << " characters) "; + + log << "\""; + log.put_string(value, log_value_size); + log << "\" (size: " << value.size() << ")"; + } + + if( param_added == false ) + log << log2 << " (skipped)"; + + log << log2 << logend; +} + + + +void PostParser::Parameter(std::wstring & name, std::wstring & value) +{ + if( has_winix_post_params_msg ) + plugin->Call(0, WINIX_POST_PARAMS, &name, &value); + + bool added = request->AddPostVar(name, value); + CreateLog(added, name, value); +} + + + + + + + +} // namespace Winix + diff --git a/winixd/core/postparser.h b/winixd/core/postparser.h index 6648c7d..92445c0 100644 --- a/winixd/core/postparser.h +++ b/winixd/core/postparser.h @@ -35,13 +35,9 @@ #ifndef headerfile_winix_core_postparser #define headerfile_winix_core_postparser -#include #include #include "httpsimpleparser.h" #include "request.h" -#include "misc.h" -#include "utf8/utf8.h" -#include "convert/text.h" namespace Winix @@ -51,6 +47,16 @@ namespace Winix class PostParser : public HttpSimpleParser { + +public: + + PostParser(); + void LogValueSize(size_t s); + void Parse(FCGX_Stream * in, Request & request); + + +protected: + FCGX_Stream * in; Request * request; size_t log_value_size; @@ -59,84 +65,9 @@ class PostParser : public HttpSimpleParser bool has_winix_raw_post_msg; std::string raw_post; -protected: - - - virtual int GetChar() - { - int c = FCGX_GetChar(in); - - if( c != -1 && has_winix_raw_post_msg ) - raw_post += c; - - return c; - } - - - void CreateLog(bool param_added, const std::wstring & name, const std::wstring & value) - { - log << log2 << "Method POST, name: \"" << name << "\""; - - if( log_value_size > 0 && !pt::is_substr_nc(L"pass", name.c_str()) ) - { - log << ", value: "; - - if( value.size() > log_value_size ) - log << "(first " << log_value_size << " characters) "; - - log << "\""; - log.put_string(value, log_value_size); - log << "\" (size: " << value.size() << ")"; - } - - if( param_added == false ) - log << log2 << " (skipped)"; - - log << log2 << logend; - } - - - - virtual void Parameter(std::wstring & name, std::wstring & value) - { - if( has_winix_post_params_msg ) - plugin->Call(0, WINIX_POST_PARAMS, &name, &value); - - bool added = request->AddPostVar(name, value); - CreateLog(added, name, value); - } - - -public: - - PostParser() - { - log_value_size = 0; - HttpSimpleParser::getchar_returns_utf8_chars = true; - } - - void LogValueSize(size_t s) - { - log_value_size = s; - } - - void Parse(FCGX_Stream * in, Request & request) - { - this->in = in; - this->request = &request; - var_index = 1; - raw_post.clear(); - - has_winix_post_params_msg = plugin->HasMessage(WINIX_POST_PARAMS); - has_winix_raw_post_msg = plugin->HasMessage(WINIX_RAW_POST_STRING); - - HttpSimpleParser::Parse(); - - if( has_winix_raw_post_msg ) - plugin->Call(0, WINIX_RAW_POST_STRING, &raw_post); - - raw_post.clear(); - } + virtual int GetChar(); + void CreateLog(bool param_added, const std::wstring & name, const std::wstring & value); + virtual void Parameter(std::wstring & name, std::wstring & value); };