X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/4f1aca7dfb6adf867713ad48e14ad79080e13cfa..3f023a72d0eedd982ba16401fbdff63dc5dddd4d:/projects/stargazer/users_impl.cpp diff --git a/projects/stargazer/users_impl.cpp b/projects/stargazer/users_impl.cpp index dfdc8634..d66456af 100644 --- a/projects/stargazer/users_impl.cpp +++ b/projects/stargazer/users_impl.cpp @@ -88,23 +88,39 @@ pthread_mutex_destroy(&mutex); //----------------------------------------------------------------------------- int USERS_IMPL::FindByNameNonLock(const std::string & login, user_iter * user) { -std::map::iterator iter; -iter = loginIndex.find(login); -if (iter != loginIndex.end()) - { - if (user) - *user = iter->second; - return 0; - } -return -1; +const std::map::const_iterator iter(loginIndex.find(login)); +if (iter == loginIndex.end()) + return -1; +if (user) + *user = iter->second; +return 0; +} +//----------------------------------------------------------------------------- +int USERS_IMPL::FindByNameNonLock(const std::string & login, const_user_iter * user) const +{ +const std::map::const_iterator iter(loginIndex.find(login)); +if (iter == loginIndex.end()) + return -1; +if (user) + *user = iter->second; +return 0; } //----------------------------------------------------------------------------- int USERS_IMPL::FindByName(const std::string & login, USER_PTR * user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); user_iter u; -int res = FindByNameNonLock(login, &u); -if (res) +if (FindByNameNonLock(login, &u)) + return -1; +*user = &(*u); +return 0; +} +//----------------------------------------------------------------------------- +int USERS_IMPL::FindByName(const std::string & login, CONST_USER_PTR * user) const +{ +STG_LOCKER lock(&mutex); +const_user_iter u; +if (FindByNameNonLock(login, &u)) return -1; *user = &(*u); return 0; @@ -112,7 +128,7 @@ return 0; //----------------------------------------------------------------------------- bool USERS_IMPL::TariffInUse(const std::string & tariffName) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list::const_iterator iter; iter = users.begin(); while (iter != users.end()) @@ -126,7 +142,7 @@ return false; //----------------------------------------------------------------------------- int USERS_IMPL::Add(const std::string & login, const ADMIN * admin) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); const PRIV * priv = admin->GetPriv(); if (!priv->userAddDel) @@ -217,7 +233,7 @@ if (!priv->userAddDel) { - STG_LOCKER lock(&mutex, __FILE__, __LINE__); + STG_LOCKER lock(&mutex); if (FindByNameNonLock(login, &u)) { @@ -249,7 +265,7 @@ if (!priv->userAddDel) } { - STG_LOCKER lock(&mutex, __FILE__, __LINE__); + STG_LOCKER lock(&mutex); u->OnDelete(); @@ -270,7 +286,7 @@ bool USERS_IMPL::Authorize(const std::string & login, uint32_t ip, uint32_t enabledDirs, const AUTH * auth) { user_iter iter; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (FindByNameNonLock(login, &iter)) { WriteServLog("Attempt to authorize non-existant user '%s'", login.c_str()); @@ -298,10 +314,12 @@ AddToIPIdx(iter); return true; } //----------------------------------------------------------------------------- -bool USERS_IMPL::Unauthorize(const std::string & login, const AUTH * auth) +bool USERS_IMPL::Unauthorize(const std::string & login, + const AUTH * auth, + const std::string & reason) { user_iter iter; -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (FindByNameNonLock(login, &iter)) { WriteServLog("Attempt to unauthorize non-existant user '%s'", login.c_str()); @@ -310,7 +328,7 @@ if (FindByNameNonLock(login, &iter)) uint32_t ip = iter->GetCurrIP(); -iter->Unauthorize(auth); +iter->Unauthorize(auth, reason); if (!iter->GetAuthorized()) DelFromIPIdx(ip); @@ -495,6 +513,8 @@ else } } +std::for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessDailyFee)); + if (settings->GetDayFeeIsLastDay()) { printfd(__FILE__, "DayResetTraff - 2 -\n"); @@ -586,7 +606,7 @@ return 0; //----------------------------------------------------------------------------- void USERS_IMPL::RealDelUser() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); printfd(__FILE__, "RealDelUser() users to del: %d\n", usersToDelete.size()); @@ -621,7 +641,7 @@ uint32_t ip = user->GetCurrIP(); if (!ip) return; // User has disconnected -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); const std::map::iterator it( ipIndex.lower_bound(ip) @@ -637,7 +657,7 @@ void USERS_IMPL::DelFromIPIdx(uint32_t ip) printfd(__FILE__, "USERS: Del IP Idx\n"); assert(ip && "User has non-null ip"); -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); const std::map::iterator it( ipIndex.find(ip) @@ -660,7 +680,7 @@ return true; //----------------------------------------------------------------------------- int USERS_IMPL::FindByIPIdx(uint32_t ip, USER_PTR * usr) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); user_iter iter; if (FindByIPIdx(ip, iter)) @@ -674,7 +694,7 @@ return -1; //----------------------------------------------------------------------------- int USERS_IMPL::FindByIPIdx(uint32_t ip, USER_IMPL ** usr) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); user_iter iter; if (FindByIPIdx(ip, iter)) @@ -688,7 +708,7 @@ return -1; //----------------------------------------------------------------------------- bool USERS_IMPL::IsIPInIndex(uint32_t ip) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::map::const_iterator it(ipIndex.find(ip)); @@ -697,12 +717,14 @@ return it != ipIndex.end(); //----------------------------------------------------------------------------- bool USERS_IMPL::IsIPInUse(uint32_t ip, const std::string & login, CONST_USER_PTR * user) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list::const_iterator iter; iter = users.begin(); while (iter != users.end()) { - if (iter->GetLogin() != login && iter->GetProperty().ips.Get().IsIPInIPS(ip)) + if (iter->GetLogin() != login && + !iter->GetProperty().ips.Get().IsAnyIP() && + iter->GetProperty().ips.Get().IsIPInIPS(ip)) { if (user != NULL) *user = &(*iter); @@ -715,55 +737,55 @@ return false; //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiers.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiers.erase(n); } //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiers.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiers.erase(n); } //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiersImpl.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserAdd(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onAddNotifiersImpl.erase(n); } //----------------------------------------------------------------------------- void USERS_IMPL::AddNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiersImpl.insert(n); } //----------------------------------------------------------------------------- void USERS_IMPL::DelNotifierUserDel(NOTIFIER_BASE * n) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); onDelNotifiersImpl.erase(n); } //----------------------------------------------------------------------------- int USERS_IMPL::OpenSearch() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); handle++; searchDescriptors[handle] = users.begin(); return handle; @@ -780,7 +802,7 @@ int USERS_IMPL::SearchNext(int h, USER_PTR * user) //----------------------------------------------------------------------------- int USERS_IMPL::SearchNext(int h, USER_IMPL ** user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (searchDescriptors.find(h) == searchDescriptors.end()) { @@ -809,7 +831,7 @@ return 0; //----------------------------------------------------------------------------- int USERS_IMPL::CloseSearch(int h) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); if (searchDescriptors.find(h) != searchDescriptors.end()) { searchDescriptors.erase(searchDescriptors.find(h)); @@ -822,13 +844,13 @@ return -1; //----------------------------------------------------------------------------- void USERS_IMPL::AddUserIntoIndexes(user_iter user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); loginIndex.insert(make_pair(user->GetLogin(), user)); } //----------------------------------------------------------------------------- void USERS_IMPL::DelUserFromIndexes(user_iter user) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); loginIndex.erase(user->GetLogin()); } //-----------------------------------------------------------------------------