]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/authorization/inetaccess/inetaccess.h
Allowed to bind for a particular address/hostname for sgauth.
[stg.git] / projects / stargazer / plugins / authorization / inetaccess / inetaccess.h
index 5b2808803596ce8239e718718a2e559f5643cd91..08fd65128d835839cffbae170144d99014a06529 100644 (file)
@@ -49,6 +49,7 @@
 #include "stg/blowfish.h"
 #include "stg/logger.h"
 #include "stg/utime.h"
 #include "stg/blowfish.h"
 #include "stg/logger.h"
 #include "stg/utime.h"
+#include "stg/logger.h"
 
 extern "C" PLUGIN * GetPlugin();
 
 
 extern "C" PLUGIN * GetPlugin();
 
@@ -120,21 +121,23 @@ struct IA_USER {
     IA_USER()
         : login(),
           user(NULL),
     IA_USER()
         : login(),
           user(NULL),
+          phase(),
           lastSendAlive(0),
           rnd(random()),
           port(0),
           lastSendAlive(0),
           rnd(random()),
           port(0),
+          ctx(),
+          messagesToSend(),
           protoVer(0),
           password("NO PASSWORD")
     {
           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)
     };
 
     IA_USER(const IA_USER & u)
@@ -144,16 +147,42 @@ struct IA_USER {
           lastSendAlive(u.lastSendAlive),
           rnd(u.rnd),
           port(u.port),
           lastSendAlive(u.lastSendAlive),
           rnd(u.rnd),
           port(u.port),
+          ctx(),
           messagesToSend(u.messagesToSend),
           protoVer(u.protoVer),
           password(u.password)
     {
           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(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
+    }
+
     std::string     login;
     CONST_USER_PTR  user;
     IA_PHASE        phase;
     std::string     login;
     CONST_USER_PTR  user;
     IA_PHASE        phase;
@@ -167,6 +196,9 @@ struct IA_USER {
     #ifdef IA_DEBUG
     bool            aliveSent;
     #endif
     #ifdef IA_DEBUG
     bool            aliveSent;
     #endif
+
+private:
+    IA_USER & operator=(const IA_USER & rvalue);
 };
 //-----------------------------------------------------------------------------
 class AUTH_IA_SETTINGS {
 };
 //-----------------------------------------------------------------------------
 class AUTH_IA_SETTINGS {
@@ -197,6 +229,9 @@ public:
 
     void Notify(const USER_PTR & user);
 private:
 
     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;
 };
 //-----------------------------------------------------------------------------
     AUTH_IA & auth;
 };
 //-----------------------------------------------------------------------------
@@ -218,12 +253,15 @@ public:
 
     const std::string & GetStrError() const { return errorStr; }
     const std::string   GetVersion() const { return "InetAccess authorization plugin v.1.4"; }
 
     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; }
+    uint16_t            GetStartPosition() const { return 30; }
+    uint16_t            GetStopPosition() const { return 30; }
 
     int                 SendMessage(const STG_MSG & msg, uint32_t ip) const;
 
 private:
 
     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();
     static void *       Run(void *);
     static void *       RunTimeouter(void * d);
     int                 PrepareNet();
@@ -321,23 +359,27 @@ private:
 
     std::map<std::string, int> packetTypes;
 
 
     std::map<std::string, int> packetTypes;
 
-    STG_LOGGER &        WriteServLog;
-
     uint32_t            enabledDirs;
 
     DEL_USER_NOTIFIER   onDelUserNotifier;
 
     uint32_t            enabledDirs;
 
     DEL_USER_NOTIFIER   onDelUserNotifier;
 
-    class UnauthorizeUser : std::unary_function<const std::pair<uint32_t, IA_USER> &, void> {
-        public:
-            UnauthorizeUser(AUTH_IA * a) : auth(a) {}
-            void operator()(const std::pair<uint32_t, IA_USER> & p)
-            {
-                auth->users->Unauthorize(p.second.user->GetLogin(), auth);
-            }
-        private:
-            AUTH_IA * auth;
-    };
+    PLUGIN_LOGGER       logger;
 
 
+    friend class UnauthorizeUser;
+};
+//-----------------------------------------------------------------------------
+class UnauthorizeUser : std::unary_function<const std::pair<uint32_t, IA_USER> &, void> {
+    public:
+        UnauthorizeUser(AUTH_IA * a) : auth(a) {}
+        UnauthorizeUser(const UnauthorizeUser & rvalue) : auth(rvalue.auth) {}
+        void operator()(const std::pair<uint32_t, IA_USER> & p)
+        {
+            auth->users->Unauthorize(p.second.user->GetLogin(), auth);
+        }
+    private:
+        UnauthorizeUser & operator=(const UnauthorizeUser & rvalue);
+
+        AUTH_IA * auth;
 };
 //-----------------------------------------------------------------------------
 inline
 };
 //-----------------------------------------------------------------------------
 inline