2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * Author : Maxim Mamontov <faust@stargazer.dp.ua>
22 * Radius data access plugin for Stargazer
25 * $Date: 2009/12/13 14:17:13 $
41 #include "stg/os_int.h"
43 #include "stg/module_settings.h"
44 #include "stg/notifer.h"
45 #include "stg/user_ips.h"
47 #include "stg/users.h"
48 #include "stg/blowfish.h"
49 #include "stg/rad_packets.h"
50 #include "stg/logger.h"
52 extern "C" PLUGIN * GetPlugin();
57 //-----------------------------------------------------------------------------
61 : port(0), errorStr(), password(),
62 authServices(), acctServices()
64 virtual ~RAD_SETTINGS() {}
65 const string & GetStrError() const { return errorStr; }
66 int ParseSettings(const MODULE_SETTINGS & s);
67 uint16_t GetPort() const { return port; }
68 const std::string & GetPassword() const { return password; }
69 const std::list<string> & GetAuthServices() const { return authServices; }
70 const std::list<string> & GetAcctServices() const { return acctServices; }
73 int ParseServices(const std::vector<std::string> & str, std::list<std::string> * lst);
78 std::list<std::string> authServices;
79 std::list<std::string> acctServices;
81 //-----------------------------------------------------------------------------
83 RAD_SESSION() : userName(), serviceType() {}
85 std::string serviceType;
87 //-----------------------------------------------------------------------------
88 class RADIUS :public AUTH {
93 void SetUsers(USERS * u) { users = u; }
94 void SetStore(STORE * s) { store = s; }
95 void SetStgSettings(const SETTINGS *) {}
96 void SetSettings(const MODULE_SETTINGS & s) { settings = s; }
101 int Reload() { return 0; }
102 bool IsRunning() { return isRunning; }
104 const std::string & GetStrError() const { return errorStr; }
105 const std::string GetVersion() const { return "RADIUS data access plugin v 0.6"; }
106 uint16_t GetStartPosition() const { return 30; }
107 uint16_t GetStopPosition() const { return 30; }
109 int SendMessage(const STG_MSG &, uint32_t) const { return 0; }
112 RADIUS(const RADIUS & rvalue);
113 RADIUS & operator=(const RADIUS & rvalue);
115 static void * Run(void *);
119 int Send(const RAD_PACKET & packet, struct sockaddr_in * outerAddr);
120 int RecvData(RAD_PACKET * packet, struct sockaddr_in * outerAddr);
121 int ProcessData(RAD_PACKET * packet);
123 int ProcessAutzPacket(RAD_PACKET * packet);
124 int ProcessAuthPacket(RAD_PACKET * packet);
125 int ProcessPostAuthPacket(RAD_PACKET * packet);
126 int ProcessAcctStartPacket(RAD_PACKET * packet);
127 int ProcessAcctStopPacket(RAD_PACKET * packet);
128 int ProcessAcctUpdatePacket(RAD_PACKET * packet);
129 int ProcessAcctOtherPacket(RAD_PACKET * packet);
131 bool FindUser(USER_PTR * ui, const std::string & login) const;
132 bool CanAuthService(const std::string & svc) const;
133 bool CanAcctService(const std::string & svc) const;
134 bool IsAllowedService(const std::string & svc) const;
136 void PrintServices(const std::list<std::string> & svcs);
138 struct Printer : public unary_function<std::string, void>
140 void operator()(const std::string & line)
142 printfd("radius.cpp", "'%s'\n", line.c_str());
145 struct SPrinter : public unary_function<std::pair<std::string, RAD_SESSION>, void>
147 void operator()(const std::pair<std::string, RAD_SESSION> & it)
149 printfd("radius.cpp", "%s - ('%s', '%s')\n", it.first.c_str(), it.second.userName.c_str(), it.second.serviceType.c_str());
155 mutable std::string errorStr;
156 RAD_SETTINGS radSettings;
157 MODULE_SETTINGS settings;
158 std::list<std::string> authServices;
159 std::list<std::string> acctServices;
160 std::map<std::string, RAD_SESSION> sessions;
166 const SETTINGS * stgSettings;
170 pthread_mutex_t mutex;
176 PLUGIN_LOGGER logger;
178 //-----------------------------------------------------------------------------