X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/stargazer/plugins/other/radius/radius.h diff --git a/stargazer/plugins/other/radius/radius.h b/stargazer/plugins/other/radius/radius.h new file mode 100644 index 00000000..6670b907 --- /dev/null +++ b/stargazer/plugins/other/radius/radius.h @@ -0,0 +1,110 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#ifndef __STG_RADIUS_H__ +#define __STG_RADIUS_H__ + +#include "stg/auth.h" +#include "stg/module_settings.h" +#include "stg/logger.h" + +#include "config.h" +#include "conn.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +extern "C" PLUGIN * GetPlugin(); + +class STORE; +class USERS; + +class RADIUS : public AUTH { +public: + RADIUS(); + virtual ~RADIUS() {} + + void SetUsers(USERS* u) { m_users = u; } + void SetStore(STORE* s) { m_store = s; } + void SetStgSettings(const SETTINGS*) {} + void SetSettings(const MODULE_SETTINGS& s) { m_settings = s; } + int ParseSettings(); + + int Start(); + int Stop(); + int Reload(const MODULE_SETTINGS & /*ms*/) { return 0; } + bool IsRunning() { return m_running; } + + const std::string& GetStrError() const { return m_error; } + std::string GetVersion() const { return "RADIUS data access plugin v. 2.0"; } + uint16_t GetStartPosition() const { return 30; } + uint16_t GetStopPosition() const { return 30; } + + int SendMessage(const STG_MSG&, uint32_t) const { return 0; } + + void authorize(const USER& user); + void unauthorize(const std::string& login, const std::string& reason); + +private: + RADIUS(const RADIUS & rvalue); + RADIUS & operator=(const RADIUS & rvalue); + + static void* run(void*); + + bool reconnect(); + int createUNIX() const; + int createTCP() const; + void runImpl(); + int maxFD() const; + void buildFDSet(fd_set & fds) const; + void cleanupConns(); + void handleEvents(const fd_set & fds); + void acceptConnection(); + void acceptUNIX(); + void acceptTCP(); + + mutable std::string m_error; + STG::Config m_config; + + MODULE_SETTINGS m_settings; + + bool m_running; + bool m_stopped; + + USERS* m_users; + const STORE* m_store; + + int m_listenSocket; + std::deque m_conns; + std::set m_logins; + + pthread_t m_thread; + + PLUGIN_LOGGER m_logger; +}; + +#endif