-#include "stg/module_settings.h"
-#include "stg/notifer.h"
-#include "stg/user_ips.h"
-#include "stg/user.h"
-#include "stg/users.h"
-#include "stg/blowfish.h"
-#include "stg/rad_packets.h"
-#include "stg/logger.h"
-
-extern "C" PLUGIN * GetPlugin();
-
-#define RAD_DEBUG (1)
-
-class RADIUS;
-//-----------------------------------------------------------------------------
-class RAD_SETTINGS {
-public:
- RAD_SETTINGS()
- : port(0), errorStr(), password(),
- authServices(), acctServices()
- {}
- virtual ~RAD_SETTINGS() {}
- const std::string & GetStrError() const { return errorStr; }
- int ParseSettings(const MODULE_SETTINGS & s);
- uint16_t GetPort() const { return port; }
- const std::string & GetPassword() const { return password; }
- const std::list<std::string> & GetAuthServices() const { return authServices; }
- const std::list<std::string> & GetAcctServices() const { return acctServices; }
-
-private:
- int ParseServices(const std::vector<std::string> & str, std::list<std::string> * lst);
-
- uint16_t port;
- std::string errorStr;
- std::string password;
- std::list<std::string> authServices;
- std::list<std::string> acctServices;
-};
-//-----------------------------------------------------------------------------
-struct RAD_SESSION {
- RAD_SESSION() : userName(), serviceType() {}
- std::string userName;
- std::string serviceType;
-};
-//-----------------------------------------------------------------------------
-class RADIUS :public AUTH {
-public:
- RADIUS();
- virtual ~RADIUS() {}
-
- void SetUsers(USERS * u) { users = u; }
- void SetStore(STORE * s) { store = s; }
- void SetStgSettings(const SETTINGS *) {}
- void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
- int ParseSettings();
-
- int Start();
- int Stop();
- int Reload(const MODULE_SETTINGS & ms) { return 0; }
- bool IsRunning() { return isRunning; }
-
- const std::string & GetStrError() const { return errorStr; }
- std::string GetVersion() const { return "RADIUS data access plugin v 0.6"; }
- uint16_t GetStartPosition() const { return 30; }
- uint16_t GetStopPosition() const { return 30; }
-
- int SendMessage(const STG_MSG &, uint32_t) const { return 0; }
-
-private:
- RADIUS(const RADIUS & rvalue);
- RADIUS & operator=(const RADIUS & rvalue);
-
- static void * Run(void *);
- int PrepareNet();
- int FinalizeNet();
-
- ssize_t Send(const RAD_PACKET & packet, struct sockaddr_in * outerAddr);
- int RecvData(RAD_PACKET * packet, struct sockaddr_in * outerAddr);
- int ProcessData(RAD_PACKET * packet);
-
- int ProcessAutzPacket(RAD_PACKET * packet);
- int ProcessAuthPacket(RAD_PACKET * packet);
- int ProcessPostAuthPacket(RAD_PACKET * packet);
- int ProcessAcctStartPacket(RAD_PACKET * packet);
- int ProcessAcctStopPacket(RAD_PACKET * packet);
- int ProcessAcctUpdatePacket(RAD_PACKET * packet);
- int ProcessAcctOtherPacket(RAD_PACKET * packet);
-
- bool FindUser(USER_PTR * ui, const std::string & login) const;
- bool CanAuthService(const std::string & svc) const;
- bool CanAcctService(const std::string & svc) const;
- bool IsAllowedService(const std::string & svc) const;