X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/12aae76fbeaa3dc91ab5ecad5531a2c1925340d2..c913a42e2208692b293f03c75c501e1d3fc23903:/projects/stargazer/plugins/configuration/sgconfig/parser.cpp diff --git a/projects/stargazer/plugins/configuration/sgconfig/parser.cpp b/projects/stargazer/plugins/configuration/sgconfig/parser.cpp index 042df803..bfe2f7bc 100644 --- a/projects/stargazer/plugins/configuration/sgconfig/parser.cpp +++ b/projects/stargazer/plugins/configuration/sgconfig/parser.cpp @@ -9,11 +9,12 @@ #include #include +#include "stg/version.h" +#include "stg/tariffs.h" +#include "stg/user_property.h" +#include "stg/settings.h" +#include "stg/logger.h" #include "parser.h" -#include "version.h" -#include "tariffs.h" -#include "user_property.h" -#include "settings.h" #define UNAME_LEN (256) //----------------------------------------------------------------------------- @@ -63,13 +64,13 @@ answerList->push_back(""); sprintf(s, "", SERVER_VERSION); answerList->push_back(s); -sprintf(s, "", tariffs->GetTariffsNum()); +sprintf(s, "", (unsigned long long)tariffs->Count()); answerList->push_back(s); sprintf(s, "", 2); answerList->push_back(s); -sprintf(s, "", users->GetUserNum()); +sprintf(s, "", (unsigned long long)users->Count()); answerList->push_back(s); sprintf(s, "", un); @@ -94,11 +95,6 @@ answerList->push_back(""); //----------------------------------------------------------------------------- // GET USER //----------------------------------------------------------------------------- -PARSER_GET_USER::PARSER_GET_USER() -{ - -} -//----------------------------------------------------------------------------- int PARSER_GET_USER::ParseStart(void *, const char *el, const char **attr) { if (strcasecmp(el, "GetUser") == 0) @@ -296,12 +292,6 @@ answerList->push_back(s); //----------------------------------------------------------------------------- // GET USERS //----------------------------------------------------------------------------- -PARSER_GET_USERS::PARSER_GET_USERS() - : lastUserUpdateTime(0), - lastUpdateFound(false) -{ -} -//----------------------------------------------------------------------------- int PARSER_GET_USERS::ParseStart(void *, const char *el, const char ** attr) { /*if (attr && *attr && *(attr+1)) @@ -643,11 +633,6 @@ answerList->push_back(""); //----------------------------------------------------------------------------- // ADD USER //----------------------------------------------------------------------------- -PARSER_ADD_USER::PARSER_ADD_USER() -{ -depth = 0; -} -//----------------------------------------------------------------------------- int PARSER_ADD_USER::ParseStart(void *, const char *el, const char **attr) { depth++; @@ -720,10 +705,13 @@ return -1; // PARSER CHG USER //----------------------------------------------------------------------------- PARSER_CHG_USER::PARSER_CHG_USER() - : usr(NULL), + : BASE_PARSER(), + usr(NULL), ucr(NULL), upr(NULL), downr(NULL), + cashMsg(), + login(), cashMustBeAdded(false), res(0) { @@ -1009,6 +997,7 @@ switch (res) //----------------------------------------------------------------------------- int PARSER_CHG_USER::AplayChanges() { +printfd(__FILE__, "PARSER_CHG_USER::AplayChanges()\n"); USER_PTR u; res = 0; @@ -1018,12 +1007,29 @@ if (users->FindByName(login, &u)) return -1; } +bool check = false; +bool alwaysOnline = u->GetProperty().alwaysOnline; +if (!ucr->alwaysOnline.res_empty()) + { + check = true; + alwaysOnline = ucr->alwaysOnline.const_data(); + } +bool onlyOneIP = u->GetProperty().ips.ConstData().OnlyOneIP(); if (!ucr->ips.res_empty()) - if (!u->GetProperty().ips.Set(ucr->ips.const_data(), currAdmin, login, store)) - res = -1; + { + check = true; + onlyOneIP = ucr->ips.const_data().OnlyOneIP(); + } -if (!ucr->address.res_empty()) - if (!u->GetProperty().address.Set(ucr->address.const_data(), currAdmin, login, store)) +if (check && alwaysOnline && !onlyOneIP) + { + printfd(__FILE__, "Requested change leads to a forbidden state: AlwaysOnline with multiple IP's\n"); + GetStgLogger()("%s Requested change leads to a forbidden state: AlwaysOnline with multiple IP's", currAdmin->GetLogStr().c_str()); + return -1; + } + +if (!ucr->ips.res_empty()) + if (!u->GetProperty().ips.Set(ucr->ips.const_data(), currAdmin, login, store)) res = -1; if (!ucr->alwaysOnline.res_empty()) @@ -1031,6 +1037,10 @@ if (!ucr->alwaysOnline.res_empty()) currAdmin, login, store)) res = -1; +if (!ucr->address.res_empty()) + if (!u->GetProperty().address.Set(ucr->address.const_data(), currAdmin, login, store)) + res = -1; + if (!ucr->creditExpire.res_empty()) if (!u->GetProperty().creditExpire.Set(ucr->creditExpire.const_data(), currAdmin, login, store))