X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/ede91934442fd804d7b818971a44e3ad795cb01f..67eb91cd2fafdf89ba670706e684ab0cd74ae513:/projects/stargazer/plugins/configuration/sgconfig/parser.cpp?ds=sidebyside diff --git a/projects/stargazer/plugins/configuration/sgconfig/parser.cpp b/projects/stargazer/plugins/configuration/sgconfig/parser.cpp index 05c16b10..1f7757d2 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 "../../../settings.h" -#include "../../../user_property.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, "", static_cast(tariffs->Count())); answerList->push_back(s); sprintf(s, "", 2); answerList->push_back(s); -sprintf(s, "", users->GetUserNum()); +sprintf(s, "", static_cast(users->Count())); answerList->push_back(s); sprintf(s, "", un); @@ -83,7 +84,7 @@ answerList->push_back(s); for (int i = 0; i< DIR_NUM; i++) { - string dn2e; + std::string dn2e; Encode12str(dn2e, settings->GetDirName(i)); sprintf(s, "", i, dn2e.c_str()); answerList->push_back(s); @@ -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) @@ -128,8 +124,8 @@ return -1; //----------------------------------------------------------------------------- void PARSER_GET_USER::CreateAnswer() { -string s; -string enc; +std::string s; +std::string enc; USER_PTR u; @@ -194,7 +190,7 @@ s = ""; answerList->push_back(s); -vector *> userdata; +std::vector *> userdata; userdata.push_back(u->GetProperty().userdata0.GetPointer()); userdata.push_back(u->GetProperty().userdata1.GetPointer()); userdata.push_back(u->GetProperty().userdata2.GetPointer()); @@ -206,7 +202,7 @@ userdata.push_back(u->GetProperty().userdata7.GetPointer()); userdata.push_back(u->GetProperty().userdata8.GetPointer()); userdata.push_back(u->GetProperty().userdata9.GetPointer()); -string tmpI; +std::string tmpI; for (unsigned i = 0; i < userdata.size(); i++) { Encode12str(enc, userdata[i]->Get()); @@ -234,7 +230,7 @@ answerList->push_back(s); strprintf(&s, "", u->GetPingTime()); answerList->push_back(s); -stringstream sstr; +std::ostringstream sstr; sstr << u->GetProperty().ips.Get(); strprintf(&s, "", sstr.str().c_str()); answerList->push_back(s); @@ -250,7 +246,7 @@ upload = u->GetProperty().up.Get(); for (int j = 0; j < DIR_NUM; j++) { - string s; + std::string s; x2str(upload[j], s); sprintf(st, " MU%d=\"%s\"", j, s.c_str()); strcat(ss, st); @@ -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)) @@ -352,16 +342,16 @@ void PARSER_GET_USERS::CreateAnswer() { answerList->erase(answerList->begin(), answerList->end()); -string s; -string userStart; -string traffStart; -string traffMiddle; -string traffFinish; -string middle; -string userFinish; +std::string s; +std::string userStart; +std::string traffStart; +std::string traffMiddle; +std::string traffFinish; +std::string middle; +std::string userFinish; -string enc; +std::string enc; USER_PTR u; @@ -372,7 +362,7 @@ if (!h) users->CloseSearch(h); return; } -string updateTime; +std::string updateTime; x2str(time(NULL), updateTime); if (lastUpdateFound) @@ -468,7 +458,7 @@ while (1) middle += s; } - vector *> userdata; + std::vector *> userdata; userdata.push_back(u->GetProperty().userdata0.GetPointer()); userdata.push_back(u->GetProperty().userdata1.GetPointer()); userdata.push_back(u->GetProperty().userdata2.GetPointer()); @@ -480,7 +470,7 @@ while (1) userdata.push_back(u->GetProperty().userdata8.GetPointer()); userdata.push_back(u->GetProperty().userdata9.GetPointer()); - string tmpI; + std::string tmpI; for (unsigned i = 0; i < userdata.size(); i++) { if (userdata[i]->ModificationTime() > lastUserUpdateTime) @@ -532,7 +522,7 @@ while (1) if (u->GetProperty().ips.ModificationTime() > lastUserUpdateTime) { - stringstream sstr; + std::ostringstream sstr; sstr << u->GetProperty().ips.Get(); strprintf(&s, "", sstr.str().c_str()); middle += s; @@ -550,7 +540,7 @@ while (1) { for (int j = 0; j < DIR_NUM; j++) { - string s; + std::string s; x2str(upload[j], s); sprintf(st, " MU%d=\"%s\" ", j, s.c_str()); traffMiddle += st; @@ -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++; @@ -712,7 +697,7 @@ int PARSER_ADD_USER::CheckUserData() USER_PTR u; if (users->FindByName(login, &u)) { - return users->Add(login, *currAdmin); + return users->Add(login, currAdmin); } return -1; } @@ -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) { @@ -754,11 +742,11 @@ ucr = new USER_CONF_RES; upr = new RESETABLE[DIR_NUM]; downr = new RESETABLE[DIR_NUM]; -}; +} //----------------------------------------------------------------------------- -string PARSER_CHG_USER::EncChar2String(const char * strEnc) +std::string PARSER_CHG_USER::EncChar2String(const char * strEnc) { -string str; +std::string str; Decode21str(str, strEnc); return str; } @@ -929,7 +917,7 @@ else int dir; DIR_TRAFF dtu; DIR_TRAFF dtd; - unsigned long long t = 0; + uint64_t t = 0; while (attr[j]) { dir = attr[j][2] - '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,53 +1007,74 @@ 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()) if (!u->GetProperty().alwaysOnline.Set(ucr->alwaysOnline.const_data(), - *currAdmin, login, store)) + 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)) + currAdmin, login, store)) res = -1; if (!ucr->credit.res_empty()) - if (!u->GetProperty().credit.Set(ucr->credit.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().credit.Set(ucr->credit.const_data(), currAdmin, login, store)) res = -1; if (!usr->freeMb.res_empty()) - if (!u->GetProperty().freeMb.Set(usr->freeMb.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().freeMb.Set(usr->freeMb.const_data(), currAdmin, login, store)) res = -1; if (!ucr->disabled.res_empty()) - if (!u->GetProperty().disabled.Set(ucr->disabled.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().disabled.Set(ucr->disabled.const_data(), currAdmin, login, store)) res = -1; if (!ucr->disabledDetailStat.res_empty()) - if (!u->GetProperty().disabledDetailStat.Set(ucr->disabledDetailStat.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().disabledDetailStat.Set(ucr->disabledDetailStat.const_data(), currAdmin, login, store)) res = -1; if (!ucr->email.res_empty()) - if (!u->GetProperty().email.Set(ucr->email.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().email.Set(ucr->email.const_data(), currAdmin, login, store)) res = -1; if (!ucr->group.res_empty()) - if (!u->GetProperty().group.Set(ucr->group.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().group.Set(ucr->group.const_data(), currAdmin, login, store)) res = -1; if (!ucr->note.res_empty()) - if (!u->GetProperty().note.Set(ucr->note.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().note.Set(ucr->note.const_data(), currAdmin, login, store)) res = -1; -vector *> userdata; +std::vector *> userdata; userdata.push_back(u->GetProperty().userdata0.GetPointer()); userdata.push_back(u->GetProperty().userdata1.GetPointer()); userdata.push_back(u->GetProperty().userdata2.GetPointer()); @@ -1080,25 +1090,25 @@ for (int i = 0; i < (int)userdata.size(); i++) { if (!ucr->userdata[i].res_empty()) { - if(!userdata[i]->Set(ucr->userdata[i].const_data(), *currAdmin, login, store)) + if(!userdata[i]->Set(ucr->userdata[i].const_data(), currAdmin, login, store)) res = -1; } } if (!ucr->passive.res_empty()) - if (!u->GetProperty().passive.Set(ucr->passive.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().passive.Set(ucr->passive.const_data(), currAdmin, login, store)) res = -1; if (!ucr->password.res_empty()) - if (!u->GetProperty().password.Set(ucr->password.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().password.Set(ucr->password.const_data(), currAdmin, login, store)) res = -1; if (!ucr->phone.res_empty()) - if (!u->GetProperty().phone.Set(ucr->phone.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().phone.Set(ucr->phone.const_data(), currAdmin, login, store)) res = -1; if (!ucr->realName.res_empty()) - if (!u->GetProperty().realName.Set(ucr->realName.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().realName.Set(ucr->realName.const_data(), currAdmin, login, store)) res = -1; @@ -1109,15 +1119,15 @@ if (!usr->cash.res_empty()) if (cashMustBeAdded) { if (!u->GetProperty().cash.Set(usr->cash.const_data() + u->GetProperty().cash, - *currAdmin, - login, - store, - cashMsg)) + currAdmin, + login, + store, + cashMsg)) res = -1; } else { - if (!u->GetProperty().cash.Set(usr->cash.const_data(), *currAdmin, login, store, cashMsg)) + if (!u->GetProperty().cash.Set(usr->cash.const_data(), currAdmin, login, store, cashMsg)) res = -1; } } @@ -1128,7 +1138,7 @@ if (!ucr->tariffName.res_empty()) { if (tariffs->FindByName(ucr->tariffName.const_data())) { - if (!u->GetProperty().tariffName.Set(ucr->tariffName.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().tariffName.Set(ucr->tariffName.const_data(), currAdmin, login, store)) res = -1; u->ResetNextTariff(); } @@ -1143,7 +1153,7 @@ if (!ucr->nextTariff.res_empty()) { if (tariffs->FindByName(ucr->nextTariff.const_data())) { - if (!u->GetProperty().nextTariff.Set(ucr->nextTariff.const_data(), *currAdmin, login, store)) + if (!u->GetProperty().nextTariff.Set(ucr->nextTariff.const_data(), currAdmin, login, store)) res = -1; } else @@ -1172,20 +1182,20 @@ for (int i = 0; i < DIR_NUM; i++) } if (upCount) - if (!u->GetProperty().up.Set(up, *currAdmin, login, store)) + if (!u->GetProperty().up.Set(up, currAdmin, login, store)) res = -1; if (downCount) - if (!u->GetProperty().down.Set(down, *currAdmin, login, store)) + if (!u->GetProperty().down.Set(down, currAdmin, login, store)) res = -1; /*if (!usr->down.res_empty()) { - u->GetProperty().down.Set(usr->down.const_data(), *currAdmin, login, store); + u->GetProperty().down.Set(usr->down.const_data(), currAdmin, login, store); } if (!usr->up.res_empty()) { - u->GetProperty().up.Set(usr->up.const_data(), *currAdmin, login, store); + u->GetProperty().up.Set(usr->up.const_data(), currAdmin, login, store); }*/ u->WriteConf(); @@ -1278,7 +1288,7 @@ if (strcasecmp(el, "Message") == 0) printfd(__FILE__, "User not found. %s\n", logins[i].c_str()); continue; } - msg.header.creationTime = stgTime; + msg.header.creationTime = static_cast(stgTime); u->AddMessage(&msg); result = res_ok; } @@ -1375,7 +1385,7 @@ int PARSER_DEL_USER::ParseEnd(void *, const char *el) if (strcasecmp(el, "DelUser") == 0) { if (!res) - users->Del(u->GetLogin(), *currAdmin); + users->Del(u->GetLogin(), currAdmin); return 0; }