diff options
author | Melanie Thielker | 2010-05-05 23:06:36 +0200 |
---|---|---|
committer | Melanie | 2010-05-05 20:46:53 +0100 |
commit | fe8399d1bf6ed84435c41d495b04feb25fb9a988 (patch) | |
tree | c1e9ceee956f445134d64fbf2a41061f5e892bdb /OpenSim/Services/LLLoginService | |
parent | Removed a test for a "can't happen" case. ParentGroup is never null anymore. (diff) | |
download | opensim-SC-fe8399d1bf6ed84435c41d495b04feb25fb9a988.zip opensim-SC-fe8399d1bf6ed84435c41d495b04feb25fb9a988.tar.gz opensim-SC-fe8399d1bf6ed84435c41d495b04feb25fb9a988.tar.bz2 opensim-SC-fe8399d1bf6ed84435c41d495b04feb25fb9a988.tar.xz |
Add a XMLRPC method to remotely set the login level for the LLLoginService.
This requires a special XMLRPC call, which has to supply the credentials of
a god user (User level >= 200). Disabled by default. Also Adds a configuration
option to set the initial permitted login level.
Diffstat (limited to 'OpenSim/Services/LLLoginService')
-rw-r--r-- | OpenSim/Services/LLLoginService/LLLoginService.cs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 4d7dfd1..95127d2 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | ||
29 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
30 | using System.Net; | 31 | using System.Net; |
31 | using System.Reflection; | 32 | using System.Reflection; |
@@ -70,6 +71,7 @@ namespace OpenSim.Services.LLLoginService | |||
70 | private bool m_RequireInventory; | 71 | private bool m_RequireInventory; |
71 | protected int m_MinLoginLevel; | 72 | protected int m_MinLoginLevel; |
72 | private string m_GatekeeperURL; | 73 | private string m_GatekeeperURL; |
74 | private bool m_AllowRemoteSetLoginLevel; | ||
73 | 75 | ||
74 | IConfig m_LoginServerConfig; | 76 | IConfig m_LoginServerConfig; |
75 | 77 | ||
@@ -93,6 +95,8 @@ namespace OpenSim.Services.LLLoginService | |||
93 | m_DefaultRegionName = m_LoginServerConfig.GetString("DefaultRegion", String.Empty); | 95 | m_DefaultRegionName = m_LoginServerConfig.GetString("DefaultRegion", String.Empty); |
94 | m_WelcomeMessage = m_LoginServerConfig.GetString("WelcomeMessage", "Welcome to OpenSim!"); | 96 | m_WelcomeMessage = m_LoginServerConfig.GetString("WelcomeMessage", "Welcome to OpenSim!"); |
95 | m_RequireInventory = m_LoginServerConfig.GetBoolean("RequireInventory", true); | 97 | m_RequireInventory = m_LoginServerConfig.GetBoolean("RequireInventory", true); |
98 | m_AllowRemoteSetLoginLevel = m_LoginServerConfig.GetBoolean("AllowRemoteSetLoginLevel", false); | ||
99 | m_MinLoginLevel = m_LoginServerConfig.GetInt("MinLoginLevel", 0); | ||
96 | m_GatekeeperURL = m_LoginServerConfig.GetString("GatekeeperURI", string.Empty); | 100 | m_GatekeeperURL = m_LoginServerConfig.GetString("GatekeeperURI", string.Empty); |
97 | 101 | ||
98 | // These are required; the others aren't | 102 | // These are required; the others aren't |
@@ -147,6 +151,55 @@ namespace OpenSim.Services.LLLoginService | |||
147 | { | 151 | { |
148 | } | 152 | } |
149 | 153 | ||
154 | public Hashtable SetLevel(string firstName, string lastName, string passwd, int level, IPEndPoint clientIP) | ||
155 | { | ||
156 | Hashtable response = new Hashtable(); | ||
157 | response["success"] = "false"; | ||
158 | |||
159 | if (!m_AllowRemoteSetLoginLevel) | ||
160 | return response; | ||
161 | |||
162 | try | ||
163 | { | ||
164 | UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, firstName, lastName); | ||
165 | if (account == null) | ||
166 | { | ||
167 | m_log.InfoFormat("[LLOGIN SERVICE]: Set Level failed, user {0} {1} not found", firstName, lastName); | ||
168 | return response; | ||
169 | } | ||
170 | |||
171 | if (account.UserLevel < 200) | ||
172 | { | ||
173 | m_log.InfoFormat("[LLOGIN SERVICE]: Set Level failed, reason: user level too low"); | ||
174 | return response; | ||
175 | } | ||
176 | |||
177 | // | ||
178 | // Authenticate this user | ||
179 | // | ||
180 | // We don't support clear passwords here | ||
181 | // | ||
182 | string token = m_AuthenticationService.Authenticate(account.PrincipalID, passwd, 30); | ||
183 | UUID secureSession = UUID.Zero; | ||
184 | if ((token == string.Empty) || (token != string.Empty && !UUID.TryParse(token, out secureSession))) | ||
185 | { | ||
186 | m_log.InfoFormat("[LLOGIN SERVICE]: SetLevel failed, reason: authentication failed"); | ||
187 | return response; | ||
188 | } | ||
189 | } | ||
190 | catch (Exception e) | ||
191 | { | ||
192 | m_log.Error("[LLOGIN SERVICE]: SetLevel failed, exception " + e.ToString()); | ||
193 | return response; | ||
194 | } | ||
195 | |||
196 | m_MinLoginLevel = level; | ||
197 | m_log.InfoFormat("[LLOGIN SERVICE]: Login level set to {0} by {1} {2}", level, firstName, lastName); | ||
198 | |||
199 | response["success"] = true; | ||
200 | return response; | ||
201 | } | ||
202 | |||
150 | public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP) | 203 | public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP) |
151 | { | 204 | { |
152 | bool success = false; | 205 | bool success = false; |