X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/d8a86d32255422e0d3181a228bbe750db3636626..a73c885317f58a03bc78ed6ceedd5067dd79a750:/projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp diff --git a/projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp b/projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp index f1f20dc3..9fc12ecc 100644 --- a/projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp +++ b/projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp @@ -599,13 +599,14 @@ uint32_t sip = outerAddr.sin_addr.s_addr; uint16_t sport = htons(outerAddr.sin_port); USER_PTR user; -if (users->FindByName(login, &user) == 0) +if (users->FindByName(login, &user)) { WriteServLog("User's connect failed: user '%s' not found. IP %s", login, inet_ntostring(sip).c_str()); - printfd(__FILE__, "User %s NOT found!\n", login); + printfd(__FILE__, "User '%s' NOT found!\n", login); SendError(sip, sport, protoVer, "îÅÐÒÁ×ÉÌØÎÙÊ ÌÏÇÉÎ!"); + return -1; } printfd(__FILE__, "User '%s' FOUND!\n", user->GetLogin().c_str()); @@ -775,22 +776,13 @@ if (it == ip2user.end()) printfd(__FILE__, "Add new user '%s' from ip %s\n", login.c_str(), inet_ntostring(sip).c_str()); - ip2user[sip].login = login; - ip2user[sip].user = user; - ip2user[sip].protoVer = protoVer; - ip2user[sip].port = sport; + std::pair::iterator, bool> res; + res = ip2user.insert(std::make_pair(sip, IA_USER(login, user, sport, protoVer))); + it = res.first; #ifdef IA_PHASE_DEBUG - ip2user[sip].phase.SetLogFileName(stgSettings->GetLogFileName()); - ip2user[sip].phase.SetUserLogin(login); + it->second.phase.SetLogFileName(stgSettings->GetLogFileName()); + it->second.phase.SetUserLogin(login); #endif - - - it = ip2user.find(sip); //TODO - if (it == ip2user.end()) - { - printfd(__FILE__, "+++ ERROR +++\n"); - return -1; - } } else if (user->GetID() != it->second.user->GetID()) { @@ -808,9 +800,6 @@ else if (user->GetID() != it->second.user->GetID()) IA_USER * iaUser = &(it->second); -if (iaUser->port != sport) - iaUser->port = sport; - if (iaUser->password != user->GetProperty().password.Get()) { InitEncrypt(&iaUser->ctx, user->GetProperty().password.Get()); @@ -1167,7 +1156,7 @@ SwapBytes(connAck->len); SwapBytes(connAck->rnd); #endif printfd( __FILE__, "CONN_ACK_6 %s\n", connAck->type); -// ÕÓÔÁÎÏ×ÉÔØ ÎÏ×ÕÀ ÆÁÚÕ É ×ÒÅÍÑ É ÒÁÚÒÅÛÉÔØ ÉÎÅÔ + if ((iaUser->phase.GetPhase() == 2) && (connAck->rnd == iaUser->rnd + 1)) { iaUser->phase.UpdateTime(); @@ -1644,9 +1633,12 @@ SwapBytes(fin6.len); Encrypt(&iaUser->ctx, (char*)&fin6, (char*)&fin6, Min8(sizeof(fin6))/8); users->Unauthorize(iaUser->login, this); + +int res = Send(sip, iaSettings.GetUserPort(), (char*)&fin6, Min8(sizeof(fin6))); + ip2user.erase(it); -return Send(sip, iaSettings.GetUserPort(), (char*)&fin6, Min8(sizeof(fin6))); +return res; } //----------------------------------------------------------------------------- int AUTH_IA::Send_FIN_7(IA_USER * iaUser, uint32_t sip, map::iterator it) @@ -1671,9 +1663,12 @@ SwapBytes(fin8.len); Encrypt(&iaUser->ctx, (char*)&fin8, (char*)&fin8, Min8(sizeof(fin8))/8); users->Unauthorize(iaUser->login, this); + +int res = Send(sip, iaUser->port, (char*)&fin8, Min8(sizeof(fin8))); + ip2user.erase(it); -return Send(sip, iaUser->port, (char*)&fin8, Min8(sizeof(fin8))); +return res; } //----------------------------------------------------------------------------- inline