X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/cb15e9caaef278f6191220ffa4e7f4302b09033f..0c80dbc4ce66a278eb5235420d34a469323efc6b:/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h diff --git a/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h b/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h index 68c9e87a..87350556 100644 --- a/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h +++ b/projects/stargazer/plugins/authorization/inetaccess/inetaccess.h @@ -38,19 +38,18 @@ #include #include -#include "os_int.h" -#include "auth.h" -#include "store.h" -#include "notifer.h" -#include "user_ips.h" -#include "user.h" -#include "users.h" -#include "ia_packets.h" -#include "blowfish.h" -#include "stg_logger.h" -#include "utime.h" - -extern "C" PLUGIN * GetPlugin(); +#include "stg/os_int.h" +#include "stg/auth.h" +#include "stg/store.h" +#include "stg/notifer.h" +#include "stg/user_ips.h" +#include "stg/user.h" +#include "stg/users.h" +#include "stg/ia_packets.h" +#include "stg/blowfish.h" +#include "stg/logger.h" +#include "stg/utime.h" +#include "stg/logger.h" #define IA_PROTO_VER (6) @@ -118,40 +117,72 @@ private: //----------------------------------------------------------------------------- struct IA_USER { IA_USER() - : lastSendAlive(0), - rnd(random()), + : login(), + user(NULL), + phase(), + lastSendAlive(0), + rnd(static_cast(random())), port(0), + ctx(), + messagesToSend(), protoVer(0), password("NO PASSWORD") { - // +++ Preparing CTX +++ - unsigned char keyL[PASSWD_LEN]; - memset(keyL, 0, PASSWD_LEN); - strncpy((char *)keyL, password.c_str(), PASSWD_LEN); - Blowfish_Init(&ctx, keyL, PASSWD_LEN); - // --- Preparing CTX --- - #ifdef IA_DEBUG - aliveSent = false; - #endif - }; + unsigned char keyL[PASSWD_LEN]; + memset(keyL, 0, PASSWD_LEN); + strncpy((char *)keyL, password.c_str(), PASSWD_LEN); + Blowfish_Init(&ctx, keyL, PASSWD_LEN); + + #ifdef IA_DEBUG + aliveSent = false; + #endif + } IA_USER(const IA_USER & u) - : user(u.user), + : login(u.login), + user(u.user), phase(u.phase), lastSendAlive(u.lastSendAlive), rnd(u.rnd), port(u.port), + ctx(), messagesToSend(u.messagesToSend), protoVer(u.protoVer), password(u.password) { - #ifdef IA_DEBUG - aliveSent = u.aliveSent; - #endif - memcpy(&ctx, &u.ctx, sizeof(BLOWFISH_CTX)); - }; + #ifdef IA_DEBUG + aliveSent = u.aliveSent; + #endif + memcpy(&ctx, &u.ctx, sizeof(BLOWFISH_CTX)); + } + + IA_USER(const std::string & l, + CONST_USER_PTR u, + uint16_t p, + int ver) + : login(l), + user(u), + phase(), + lastSendAlive(0), + rnd(static_cast(random())), + port(p), + ctx(), + messagesToSend(), + protoVer(ver), + password(user->GetProperty().password.Get()) + { + unsigned char keyL[PASSWD_LEN]; + memset(keyL, 0, PASSWD_LEN); + strncpy((char *)keyL, password.c_str(), PASSWD_LEN); + Blowfish_Init(&ctx, keyL, PASSWD_LEN); + + #ifdef IA_DEBUG + aliveSent = false; + #endif + } - USER_PTR user; + std::string login; + CONST_USER_PTR user; IA_PHASE phase; UTIME lastSendAlive; uint32_t rnd; @@ -163,26 +194,45 @@ struct IA_USER { #ifdef IA_DEBUG bool aliveSent; #endif + +private: + IA_USER & operator=(const IA_USER & rvalue); }; //----------------------------------------------------------------------------- class AUTH_IA_SETTINGS { public: AUTH_IA_SETTINGS(); - virtual ~AUTH_IA_SETTINGS() {}; - const std::string & GetStrError() const { return errorStr; }; + virtual ~AUTH_IA_SETTINGS() {} + const std::string & GetStrError() const { return errorStr; } int ParseSettings(const MODULE_SETTINGS & s); - int GetUserDelay() const { return userDelay; }; - int GetUserTimeout() const { return userTimeout; }; - int GetUserPort() const { return port; }; - FREEMB GetFreeMbShowType() const { return freeMbShowType; }; + int GetUserDelay() const { return userDelay; } + int GetUserTimeout() const { return userTimeout; } + uint16_t GetUserPort() const { return port; } + FREEMB GetFreeMbShowType() const { return freeMbShowType; } + bool LogProtocolErrors() const { return logProtocolErrors; } private: - int ParseIntInRange(const std::string & str, int min, int max, int * val); int userDelay; int userTimeout; uint16_t port; std::string errorStr; FREEMB freeMbShowType; + bool logProtocolErrors; +}; +//----------------------------------------------------------------------------- +class AUTH_IA; +//----------------------------------------------------------------------------- +class DEL_USER_NOTIFIER: public NOTIFIER_BASE { +public: + DEL_USER_NOTIFIER(AUTH_IA & a) : auth(a) {} + virtual ~DEL_USER_NOTIFIER() {} + + void Notify(const USER_PTR & user); +private: + DEL_USER_NOTIFIER(const DEL_USER_NOTIFIER & rvalue); + DEL_USER_NOTIFIER & operator=(const DEL_USER_NOTIFIER & rvalue); + + AUTH_IA & auth; }; //----------------------------------------------------------------------------- class AUTH_IA :public AUTH { @@ -192,10 +242,6 @@ public: virtual ~AUTH_IA(); void SetUsers(USERS * u) { users = u; } - void SetTariffs(TARIFFS *) {} - void SetAdmins(ADMINS *) {} - void SetTraffcounter(TRAFFCOUNTER *) {} - void SetStore(STORE *) {} void SetStgSettings(const SETTINGS * s) { stgSettings = s; } void SetSettings(const MODULE_SETTINGS & s) { settings = s; } int ParseSettings(); @@ -206,21 +252,24 @@ public: bool IsRunning() { return isRunningRunTimeouter || isRunningRun; } const std::string & GetStrError() const { return errorStr; } - const std::string GetVersion() const { return "InetAccess authorization plugin v.1.4"; } - uint16_t GetStartPosition() const { return 50; } - uint16_t GetStopPosition() const { return 50; } + std::string GetVersion() const { return "InetAccess authorization plugin v.1.4"; } + uint16_t GetStartPosition() const { return 30; } + uint16_t GetStopPosition() const { return 30; } int SendMessage(const STG_MSG & msg, uint32_t ip) const; private: + AUTH_IA(const AUTH_IA & rvalue); + AUTH_IA & operator=(const AUTH_IA & rvalue); + static void * Run(void *); static void * RunTimeouter(void * d); int PrepareNet(); int FinalizeNet(); void DelUser(USER_PTR u); int RecvData(char * buffer, int bufferSize); - int CheckHeader(const char * buffer, int * protoVer); - int PacketProcessor(char * buff, int dataLen, uint32_t sip, uint16_t sport, int protoVer, USER_PTR * user); + int CheckHeader(const char * buffer, uint32_t sip, int * protoVer); + int PacketProcessor(void * buff, size_t dataLen, uint32_t sip, uint16_t sport, int protoVer, USER_PTR user); int Process_CONN_SYN_6(CONN_SYN_6 * connSyn, IA_USER * iaUser, uint32_t sip); int Process_CONN_SYN_7(CONN_SYN_7 * connSyn, IA_USER * iaUser, uint32_t sip); @@ -241,15 +290,15 @@ private: int Process_DISCONN_ACK_6(DISCONN_ACK_6 * disconnSyn, IA_USER * iaUser, uint32_t sip, - map::iterator it); + std::map::iterator it); int Process_DISCONN_ACK_7(DISCONN_ACK_7 * disconnSyn, IA_USER * iaUser, uint32_t sip, - map::iterator it); + std::map::iterator it); int Process_DISCONN_ACK_8(DISCONN_ACK_8 * disconnSyn, IA_USER * iaUser, uint32_t sip, - map::iterator it); + std::map::iterator it); int Send_CONN_SYN_ACK_6(IA_USER * iaUser, uint32_t sip); int Send_CONN_SYN_ACK_7(IA_USER * iaUser, uint32_t sip); @@ -263,20 +312,18 @@ private: int Send_DISCONN_SYN_ACK_7(IA_USER * iaUser, uint32_t sip); int Send_DISCONN_SYN_ACK_8(IA_USER * iaUser, uint32_t sip); - int Send_FIN_6(IA_USER * iaUser, uint32_t sip, map::iterator it); - int Send_FIN_7(IA_USER * iaUser, uint32_t sip, map::iterator it); - int Send_FIN_8(IA_USER * iaUser, uint32_t sip, map::iterator it); + int Send_FIN_6(IA_USER * iaUser, uint32_t sip, std::map::iterator it); + int Send_FIN_7(IA_USER * iaUser, uint32_t sip, std::map::iterator it); + int Send_FIN_8(IA_USER * iaUser, uint32_t sip, std::map::iterator it); int Timeouter(); int SendError(uint32_t ip, uint16_t port, int protoVer, const std::string & text); - int Send(uint32_t ip, uint16_t port, const char * buffer, int len); + int Send(uint32_t ip, uint16_t port, const char * buffer, size_t len); int RealSendMessage6(const STG_MSG & msg, uint32_t ip, IA_USER & user); int RealSendMessage7(const STG_MSG & msg, uint32_t ip, IA_USER & user); int RealSendMessage8(const STG_MSG & msg, uint32_t ip, IA_USER & user); - bool WaitPackets(int sd) const; - BLOWFISH_CTX ctxS; //for loginS mutable std::string errorStr; @@ -312,36 +359,33 @@ private: std::map packetTypes; - STG_LOGGER & WriteServLog; - uint32_t enabledDirs; - class DEL_USER_NOTIFIER: public NOTIFIER_BASE { - public: - DEL_USER_NOTIFIER(AUTH_IA & a) : auth(a) {} - virtual ~DEL_USER_NOTIFIER() {} + DEL_USER_NOTIFIER onDelUserNotifier; - void Notify(const USER_PTR & user) - { - auth.DelUser(user); - } + PLUGIN_LOGGER logger; + friend class UnauthorizeUser; +}; +//----------------------------------------------------------------------------- +class UnauthorizeUser : std::unary_function &, void> { + public: + UnauthorizeUser(AUTH_IA * a) : auth(a) {} + UnauthorizeUser(const UnauthorizeUser & rvalue) : auth(rvalue.auth) {} + void operator()(const std::pair & p) + { + auth->users->Unauthorize(p.second.user->GetLogin(), auth); + } private: - AUTH_IA & auth; - } onDelUserNotifier; - - class UnauthorizeUser : std::unary_function &, void> { - public: - UnauthorizeUser(AUTH_IA * a) : auth(a) {} - void operator()(const std::pair & p) - { - p.second.user->Unauthorize(auth); - } - private: - AUTH_IA * auth; - }; + UnauthorizeUser & operator=(const UnauthorizeUser & rvalue); + AUTH_IA * auth; }; //----------------------------------------------------------------------------- +inline +void DEL_USER_NOTIFIER::Notify(const USER_PTR & user) +{ + auth.DelUser(user); +} #endif