aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services
diff options
context:
space:
mode:
authorMelanie Thielker2010-05-05 23:06:36 +0200
committerMelanie2010-05-05 20:46:53 +0100
commitfe8399d1bf6ed84435c41d495b04feb25fb9a988 (patch)
treec1e9ceee956f445134d64fbf2a41061f5e892bdb /OpenSim/Services
parentRemoved a test for a "can't happen" case. ParentGroup is never null anymore. (diff)
downloadopensim-SC_OLD-fe8399d1bf6ed84435c41d495b04feb25fb9a988.zip
opensim-SC_OLD-fe8399d1bf6ed84435c41d495b04feb25fb9a988.tar.gz
opensim-SC_OLD-fe8399d1bf6ed84435c41d495b04feb25fb9a988.tar.bz2
opensim-SC_OLD-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')
-rw-r--r--OpenSim/Services/Interfaces/ILoginService.cs1
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs53
2 files changed, 54 insertions, 0 deletions
diff --git a/OpenSim/Services/Interfaces/ILoginService.cs b/OpenSim/Services/Interfaces/ILoginService.cs
index 49efbe2..513ab4a 100644
--- a/OpenSim/Services/Interfaces/ILoginService.cs
+++ b/OpenSim/Services/Interfaces/ILoginService.cs
@@ -48,6 +48,7 @@ namespace OpenSim.Services.Interfaces
48 public interface ILoginService 48 public interface ILoginService
49 { 49 {
50 LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP); 50 LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP);
51 Hashtable SetLevel(string firstName, string lastName, string passwd, int level, IPEndPoint clientIP);
51 } 52 }
52 53
53 54
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
28using System; 28using System;
29using System.Collections;
29using System.Collections.Generic; 30using System.Collections.Generic;
30using System.Net; 31using System.Net;
31using System.Reflection; 32using 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;