diff options
Diffstat (limited to 'OpenSim/Services')
11 files changed, 346 insertions, 81 deletions
diff --git a/OpenSim/Services/AssetService/AssetServiceBase.cs b/OpenSim/Services/AssetService/AssetServiceBase.cs index 177c565..58ab052 100644 --- a/OpenSim/Services/AssetService/AssetServiceBase.cs +++ b/OpenSim/Services/AssetService/AssetServiceBase.cs | |||
@@ -84,7 +84,7 @@ namespace OpenSim.Services.AssetService | |||
84 | 84 | ||
85 | m_Database = LoadPlugin<IAssetDataPlugin>(dllName); | 85 | m_Database = LoadPlugin<IAssetDataPlugin>(dllName); |
86 | if (m_Database == null) | 86 | if (m_Database == null) |
87 | throw new Exception("Could not find a storage interface in the given module"); | 87 | throw new Exception(string.Format("Could not find a storage interface in the module {0}", dllName)); |
88 | 88 | ||
89 | m_Database.Initialise(connString); | 89 | m_Database.Initialise(connString); |
90 | 90 | ||
@@ -96,7 +96,7 @@ namespace OpenSim.Services.AssetService | |||
96 | m_AssetLoader = LoadPlugin<IAssetLoader>(loaderName); | 96 | m_AssetLoader = LoadPlugin<IAssetLoader>(loaderName); |
97 | 97 | ||
98 | if (m_AssetLoader == null) | 98 | if (m_AssetLoader == null) |
99 | throw new Exception("Asset loader could not be loaded"); | 99 | throw new Exception(string.Format("Asset loader could not be loaded from {0}", loaderName)); |
100 | } | 100 | } |
101 | } | 101 | } |
102 | } | 102 | } |
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs index 0e4d794..67a10b0 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs | |||
@@ -112,7 +112,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
112 | // m_log.Warn("Registering region " + regionInfo.RegionName + " (" + regionInfo.RegionID + ") that we are not tracking"); | 112 | // m_log.Warn("Registering region " + regionInfo.RegionName + " (" + regionInfo.RegionID + ") that we are not tracking"); |
113 | 113 | ||
114 | Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0); | 114 | Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0); |
115 | Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, 4096.0); | 115 | Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, Constants.RegionHeight); |
116 | 116 | ||
117 | OSDMap extraData = new OSDMap | 117 | OSDMap extraData = new OSDMap |
118 | { | 118 | { |
@@ -297,7 +297,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
297 | List<GridRegion> foundRegions = new List<GridRegion>(); | 297 | List<GridRegion> foundRegions = new List<GridRegion>(); |
298 | 298 | ||
299 | Vector3d minPosition = new Vector3d(xmin, ymin, 0.0); | 299 | Vector3d minPosition = new Vector3d(xmin, ymin, 0.0); |
300 | Vector3d maxPosition = new Vector3d(xmax, ymax, 4096.0); | 300 | Vector3d maxPosition = new Vector3d(xmax, ymax, Constants.RegionHeight); |
301 | 301 | ||
302 | NameValueCollection requestArgs = new NameValueCollection | 302 | NameValueCollection requestArgs = new NameValueCollection |
303 | { | 303 | { |
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index aab403a..5bdea06 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -137,9 +137,14 @@ namespace OpenSim.Services.GridService | |||
137 | if (regionInfos.RegionID == UUID.Zero) | 137 | if (regionInfos.RegionID == UUID.Zero) |
138 | return "Invalid RegionID - cannot be zero UUID"; | 138 | return "Invalid RegionID - cannot be zero UUID"; |
139 | 139 | ||
140 | // This needs better sanity testing. What if regionInfo is registering in | ||
141 | // overlapping coords? | ||
142 | RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | 140 | RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); |
141 | if ((region != null) && (region.RegionID != regionInfos.RegionID)) | ||
142 | { | ||
143 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.", | ||
144 | regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | ||
145 | return "Region overlaps another region"; | ||
146 | } | ||
147 | |||
143 | if (region != null) | 148 | if (region != null) |
144 | { | 149 | { |
145 | // There is a preexisting record | 150 | // There is a preexisting record |
@@ -176,19 +181,36 @@ namespace OpenSim.Services.GridService | |||
176 | } | 181 | } |
177 | } | 182 | } |
178 | 183 | ||
179 | if ((region != null) && (region.RegionID != regionInfos.RegionID)) | 184 | // If we get here, the destination is clear. Now for the real check. |
185 | |||
186 | if (!m_AllowDuplicateNames) | ||
180 | { | 187 | { |
181 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.", | 188 | List<RegionData> dupe = m_Database.Get(regionInfos.RegionName, scopeID); |
182 | regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | 189 | if (dupe != null && dupe.Count > 0) |
183 | return "Region overlaps another region"; | 190 | { |
191 | foreach (RegionData d in dupe) | ||
192 | { | ||
193 | if (d.RegionID != regionInfos.RegionID) | ||
194 | { | ||
195 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register duplicate name with ID {1}.", | ||
196 | regionInfos.RegionName, regionInfos.RegionID); | ||
197 | return "Duplicate region name"; | ||
198 | } | ||
199 | } | ||
200 | } | ||
184 | } | 201 | } |
185 | 202 | ||
203 | // If there is an old record for us, delete it if it is elsewhere. | ||
204 | region = m_Database.Get(regionInfos.RegionID, scopeID); | ||
186 | if ((region != null) && (region.RegionID == regionInfos.RegionID) && | 205 | if ((region != null) && (region.RegionID == regionInfos.RegionID) && |
187 | ((region.posX != regionInfos.RegionLocX) || (region.posY != regionInfos.RegionLocY))) | 206 | ((region.posX != regionInfos.RegionLocX) || (region.posY != regionInfos.RegionLocY))) |
188 | { | 207 | { |
189 | if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.NoMove) != 0) | 208 | if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.NoMove) != 0) |
190 | return "Can't move this region"; | 209 | return "Can't move this region"; |
191 | 210 | ||
211 | if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.LockedOut) != 0) | ||
212 | return "Region locked out"; | ||
213 | |||
192 | // Region reregistering in other coordinates. Delete the old entry | 214 | // Region reregistering in other coordinates. Delete the old entry |
193 | m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) was previously registered at {2}-{3}. Deleting old entry.", | 215 | m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) was previously registered at {2}-{3}. Deleting old entry.", |
194 | regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY); | 216 | regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY); |
@@ -203,23 +225,6 @@ namespace OpenSim.Services.GridService | |||
203 | } | 225 | } |
204 | } | 226 | } |
205 | 227 | ||
206 | if (!m_AllowDuplicateNames) | ||
207 | { | ||
208 | List<RegionData> dupe = m_Database.Get(regionInfos.RegionName, scopeID); | ||
209 | if (dupe != null && dupe.Count > 0) | ||
210 | { | ||
211 | foreach (RegionData d in dupe) | ||
212 | { | ||
213 | if (d.RegionID != regionInfos.RegionID) | ||
214 | { | ||
215 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register duplicate name with ID {1}.", | ||
216 | regionInfos.RegionName, regionInfos.RegionID); | ||
217 | return "Duplicate region name"; | ||
218 | } | ||
219 | } | ||
220 | } | ||
221 | } | ||
222 | |||
223 | // Everything is ok, let's register | 228 | // Everything is ok, let's register |
224 | RegionData rdata = RegionInfo2RegionData(regionInfos); | 229 | RegionData rdata = RegionInfo2RegionData(regionInfos); |
225 | rdata.ScopeID = scopeID; | 230 | rdata.ScopeID = scopeID; |
@@ -227,8 +232,6 @@ namespace OpenSim.Services.GridService | |||
227 | if (region != null) | 232 | if (region != null) |
228 | { | 233 | { |
229 | int oldFlags = Convert.ToInt32(region.Data["flags"]); | 234 | int oldFlags = Convert.ToInt32(region.Data["flags"]); |
230 | if ((oldFlags & (int)OpenSim.Data.RegionFlags.LockedOut) != 0) | ||
231 | return "Region locked out"; | ||
232 | 235 | ||
233 | oldFlags &= ~(int)OpenSim.Data.RegionFlags.Reservation; | 236 | oldFlags &= ~(int)OpenSim.Data.RegionFlags.Reservation; |
234 | 237 | ||
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index 47d22b9..004311f 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.cs | |||
@@ -57,10 +57,13 @@ namespace OpenSim.Services.HypergridService | |||
57 | private static IUserAccountService m_UserAccountService; | 57 | private static IUserAccountService m_UserAccountService; |
58 | private static IUserAgentService m_UserAgentService; | 58 | private static IUserAgentService m_UserAgentService; |
59 | private static ISimulationService m_SimulationService; | 59 | private static ISimulationService m_SimulationService; |
60 | private static IGridUserService m_GridUserService; | ||
60 | 61 | ||
61 | protected string m_AllowedClients = string.Empty; | 62 | private static string m_AllowedClients = string.Empty; |
62 | protected string m_DeniedClients = string.Empty; | 63 | private static string m_DeniedClients = string.Empty; |
63 | private static bool m_ForeignAgentsAllowed = true; | 64 | private static bool m_ForeignAgentsAllowed = true; |
65 | private static List<string> m_ForeignsAllowedExceptions = new List<string>(); | ||
66 | private static List<string> m_ForeignsDisallowedExceptions = new List<string>(); | ||
64 | 67 | ||
65 | private static UUID m_ScopeID; | 68 | private static UUID m_ScopeID; |
66 | private static bool m_AllowTeleportsToAnyRegion; | 69 | private static bool m_AllowTeleportsToAnyRegion; |
@@ -82,8 +85,9 @@ namespace OpenSim.Services.HypergridService | |||
82 | string gridService = serverConfig.GetString("GridService", String.Empty); | 85 | string gridService = serverConfig.GetString("GridService", String.Empty); |
83 | string presenceService = serverConfig.GetString("PresenceService", String.Empty); | 86 | string presenceService = serverConfig.GetString("PresenceService", String.Empty); |
84 | string simulationService = serverConfig.GetString("SimulationService", String.Empty); | 87 | string simulationService = serverConfig.GetString("SimulationService", String.Empty); |
88 | string gridUserService = serverConfig.GetString("GridUserService", String.Empty); | ||
85 | 89 | ||
86 | // These 3 are mandatory, the others aren't | 90 | // These are mandatory, the others aren't |
87 | if (gridService == string.Empty || presenceService == string.Empty) | 91 | if (gridService == string.Empty || presenceService == string.Empty) |
88 | throw new Exception("Incomplete specifications, Gatekeeper Service cannot function."); | 92 | throw new Exception("Incomplete specifications, Gatekeeper Service cannot function."); |
89 | 93 | ||
@@ -103,6 +107,8 @@ namespace OpenSim.Services.HypergridService | |||
103 | m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(accountService, args); | 107 | m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(accountService, args); |
104 | if (homeUsersService != string.Empty) | 108 | if (homeUsersService != string.Empty) |
105 | m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(homeUsersService, args); | 109 | m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(homeUsersService, args); |
110 | if (gridUserService != string.Empty) | ||
111 | m_GridUserService = ServerUtils.LoadPlugin<IGridUserService>(gridUserService, args); | ||
106 | 112 | ||
107 | if (simService != null) | 113 | if (simService != null) |
108 | m_SimulationService = simService; | 114 | m_SimulationService = simService; |
@@ -113,6 +119,9 @@ namespace OpenSim.Services.HypergridService | |||
113 | m_DeniedClients = serverConfig.GetString("DeniedClients", string.Empty); | 119 | m_DeniedClients = serverConfig.GetString("DeniedClients", string.Empty); |
114 | m_ForeignAgentsAllowed = serverConfig.GetBoolean("ForeignAgentsAllowed", true); | 120 | m_ForeignAgentsAllowed = serverConfig.GetBoolean("ForeignAgentsAllowed", true); |
115 | 121 | ||
122 | LoadDomainExceptionsFromConfig(serverConfig, "AllowExcept", m_ForeignsAllowedExceptions); | ||
123 | LoadDomainExceptionsFromConfig(serverConfig, "DisallowExcept", m_ForeignsDisallowedExceptions); | ||
124 | |||
116 | if (m_GridService == null || m_PresenceService == null || m_SimulationService == null) | 125 | if (m_GridService == null || m_PresenceService == null || m_SimulationService == null) |
117 | throw new Exception("Unable to load a required plugin, Gatekeeper Service cannot function."); | 126 | throw new Exception("Unable to load a required plugin, Gatekeeper Service cannot function."); |
118 | 127 | ||
@@ -125,6 +134,15 @@ namespace OpenSim.Services.HypergridService | |||
125 | { | 134 | { |
126 | } | 135 | } |
127 | 136 | ||
137 | protected void LoadDomainExceptionsFromConfig(IConfig config, string variable, List<string> exceptions) | ||
138 | { | ||
139 | string value = config.GetString(variable, string.Empty); | ||
140 | string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); | ||
141 | |||
142 | foreach (string s in parts) | ||
143 | exceptions.Add(s.Trim()); | ||
144 | } | ||
145 | |||
128 | public bool LinkRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason) | 146 | public bool LinkRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason) |
129 | { | 147 | { |
130 | regionID = UUID.Zero; | 148 | regionID = UUID.Zero; |
@@ -260,17 +278,26 @@ namespace OpenSim.Services.HypergridService | |||
260 | m_log.DebugFormat("[GATEKEEPER SERVICE]: User is ok"); | 278 | m_log.DebugFormat("[GATEKEEPER SERVICE]: User is ok"); |
261 | 279 | ||
262 | // | 280 | // |
263 | // Foreign agents allowed | 281 | // Foreign agents allowed? Exceptions? |
264 | // | 282 | // |
265 | if (account == null && !m_ForeignAgentsAllowed) | 283 | if (account == null) |
266 | { | 284 | { |
267 | reason = "Unauthorized"; | 285 | bool allowed = m_ForeignAgentsAllowed; |
268 | m_log.InfoFormat("[GATEKEEPER SERVICE]: Foreign agents are not permitted {0} {1}. Refusing service.", | 286 | |
269 | aCircuit.firstname, aCircuit.lastname); | 287 | if (m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsAllowedExceptions)) |
270 | return false; | 288 | allowed = false; |
271 | } | ||
272 | 289 | ||
273 | // May want to authorize | 290 | if (!m_ForeignAgentsAllowed && IsException(aCircuit, m_ForeignsDisallowedExceptions)) |
291 | allowed = true; | ||
292 | |||
293 | if (!allowed) | ||
294 | { | ||
295 | reason = "Destination does not allow visitors from your world"; | ||
296 | m_log.InfoFormat("[GATEKEEPER SERVICE]: Foreign agents are not permitted {0} {1} @ {2}. Refusing service.", | ||
297 | aCircuit.firstname, aCircuit.lastname, aCircuit.ServiceURLs["HomeURI"]); | ||
298 | return false; | ||
299 | } | ||
300 | } | ||
274 | 301 | ||
275 | bool isFirstLogin = false; | 302 | bool isFirstLogin = false; |
276 | // | 303 | // |
@@ -280,7 +307,8 @@ namespace OpenSim.Services.HypergridService | |||
280 | if (presence != null) // it has been placed there by the login service | 307 | if (presence != null) // it has been placed there by the login service |
281 | isFirstLogin = true; | 308 | isFirstLogin = true; |
282 | 309 | ||
283 | else | 310 | else |
311 | { | ||
284 | if (!m_PresenceService.LoginAgent(aCircuit.AgentID.ToString(), aCircuit.SessionID, aCircuit.SecureSessionID)) | 312 | if (!m_PresenceService.LoginAgent(aCircuit.AgentID.ToString(), aCircuit.SessionID, aCircuit.SecureSessionID)) |
285 | { | 313 | { |
286 | reason = "Unable to login presence"; | 314 | reason = "Unable to login presence"; |
@@ -290,6 +318,26 @@ namespace OpenSim.Services.HypergridService | |||
290 | } | 318 | } |
291 | m_log.DebugFormat("[GATEKEEPER SERVICE]: Login presence ok"); | 319 | m_log.DebugFormat("[GATEKEEPER SERVICE]: Login presence ok"); |
292 | 320 | ||
321 | // Also login foreigners with GridUser service | ||
322 | if (m_GridUserService != null && account == null) | ||
323 | { | ||
324 | string userId = aCircuit.AgentID.ToString(); | ||
325 | string first = aCircuit.firstname, last = aCircuit.lastname; | ||
326 | if (last.StartsWith("@")) | ||
327 | { | ||
328 | string[] parts = aCircuit.firstname.Split('.'); | ||
329 | if (parts.Length >= 2) | ||
330 | { | ||
331 | first = parts[0]; | ||
332 | last = parts[1]; | ||
333 | } | ||
334 | } | ||
335 | |||
336 | userId += ";" + aCircuit.ServiceURLs["HomeURI"] + ";" + first + " " + last; | ||
337 | m_GridUserService.LoggedIn(userId); | ||
338 | } | ||
339 | } | ||
340 | |||
293 | // | 341 | // |
294 | // Get the region | 342 | // Get the region |
295 | // | 343 | // |
@@ -393,6 +441,27 @@ namespace OpenSim.Services.HypergridService | |||
393 | 441 | ||
394 | #region Misc | 442 | #region Misc |
395 | 443 | ||
444 | private bool IsException(AgentCircuitData aCircuit, List<string> exceptions) | ||
445 | { | ||
446 | bool exception = false; | ||
447 | if (exceptions.Count > 0) // we have exceptions | ||
448 | { | ||
449 | // Retrieve the visitor's origin | ||
450 | string userURL = aCircuit.ServiceURLs["HomeURI"].ToString(); | ||
451 | if (!userURL.EndsWith("/")) | ||
452 | userURL += "/"; | ||
453 | |||
454 | if (exceptions.Find(delegate(string s) | ||
455 | { | ||
456 | if (!s.EndsWith("/")) | ||
457 | s += "/"; | ||
458 | return s == userURL; | ||
459 | }) != null) | ||
460 | exception = true; | ||
461 | } | ||
462 | |||
463 | return exception; | ||
464 | } | ||
396 | 465 | ||
397 | #endregion | 466 | #endregion |
398 | } | 467 | } |
diff --git a/OpenSim/Services/HypergridService/HGAssetService.cs b/OpenSim/Services/HypergridService/HGAssetService.cs index db98166..84dec8d 100644 --- a/OpenSim/Services/HypergridService/HGAssetService.cs +++ b/OpenSim/Services/HypergridService/HGAssetService.cs | |||
@@ -58,6 +58,8 @@ namespace OpenSim.Services.HypergridService | |||
58 | 58 | ||
59 | private UserAccountCache m_Cache; | 59 | private UserAccountCache m_Cache; |
60 | 60 | ||
61 | private AssetPermissions m_AssetPerms; | ||
62 | |||
61 | public HGAssetService(IConfigSource config, string configName) : base(config, configName) | 63 | public HGAssetService(IConfigSource config, string configName) : base(config, configName) |
62 | { | 64 | { |
63 | m_log.Debug("[HGAsset Service]: Starting"); | 65 | m_log.Debug("[HGAsset Service]: Starting"); |
@@ -80,6 +82,10 @@ namespace OpenSim.Services.HypergridService | |||
80 | m_HomeURL = assetConfig.GetString("HomeURI", m_HomeURL); | 82 | m_HomeURL = assetConfig.GetString("HomeURI", m_HomeURL); |
81 | 83 | ||
82 | m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); | 84 | m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); |
85 | |||
86 | // Permissions | ||
87 | m_AssetPerms = new AssetPermissions(assetConfig); | ||
88 | |||
83 | } | 89 | } |
84 | 90 | ||
85 | #region IAssetService overrides | 91 | #region IAssetService overrides |
@@ -90,6 +96,9 @@ namespace OpenSim.Services.HypergridService | |||
90 | if (asset == null) | 96 | if (asset == null) |
91 | return null; | 97 | return null; |
92 | 98 | ||
99 | if (!m_AssetPerms.AllowedExport(asset.Type)) | ||
100 | return null; | ||
101 | |||
93 | if (asset.Metadata.Type == (sbyte)AssetType.Object) | 102 | if (asset.Metadata.Type == (sbyte)AssetType.Object) |
94 | asset.Data = AdjustIdentifiers(asset.Data); ; | 103 | asset.Data = AdjustIdentifiers(asset.Data); ; |
95 | 104 | ||
@@ -112,16 +121,27 @@ namespace OpenSim.Services.HypergridService | |||
112 | 121 | ||
113 | public override byte[] GetData(string id) | 122 | public override byte[] GetData(string id) |
114 | { | 123 | { |
115 | byte[] data = base.GetData(id); | 124 | AssetBase asset = Get(id); |
125 | |||
126 | if (asset == null) | ||
127 | return null; | ||
116 | 128 | ||
117 | if (data == null) | 129 | if (!m_AssetPerms.AllowedExport(asset.Type)) |
118 | return null; | 130 | return null; |
119 | 131 | ||
120 | return AdjustIdentifiers(data); | 132 | return asset.Data; |
121 | } | 133 | } |
122 | 134 | ||
123 | //public virtual bool Get(string id, Object sender, AssetRetrieved handler) | 135 | //public virtual bool Get(string id, Object sender, AssetRetrieved handler) |
124 | 136 | ||
137 | public override string Store(AssetBase asset) | ||
138 | { | ||
139 | if (!m_AssetPerms.AllowedImport(asset.Type)) | ||
140 | return string.Empty; | ||
141 | |||
142 | return base.Store(asset); | ||
143 | } | ||
144 | |||
125 | public override bool Delete(string id) | 145 | public override bool Delete(string id) |
126 | { | 146 | { |
127 | // NOGO | 147 | // NOGO |
diff --git a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs index 6e4b68c..556a0da 100644 --- a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs | |||
@@ -56,10 +56,12 @@ namespace OpenSim.Services.HypergridService | |||
56 | 56 | ||
57 | private string m_HomeURL; | 57 | private string m_HomeURL; |
58 | private IUserAccountService m_UserAccountService; | 58 | private IUserAccountService m_UserAccountService; |
59 | private IAvatarService m_AvatarService; | ||
59 | 60 | ||
60 | // private UserAccountCache m_Cache; | 61 | // private UserAccountCache m_Cache; |
61 | 62 | ||
62 | private ExpiringCache<UUID, List<XInventoryFolder>> m_SuitcaseTrees = new ExpiringCache<UUID, List<XInventoryFolder>>(); | 63 | private ExpiringCache<UUID, List<XInventoryFolder>> m_SuitcaseTrees = new ExpiringCache<UUID, List<XInventoryFolder>>(); |
64 | private ExpiringCache<UUID, AvatarAppearance> m_Appearances = new ExpiringCache<UUID, AvatarAppearance>(); | ||
63 | 65 | ||
64 | public HGSuitcaseInventoryService(IConfigSource config, string configName) | 66 | public HGSuitcaseInventoryService(IConfigSource config, string configName) |
65 | : base(config, configName) | 67 | : base(config, configName) |
@@ -77,7 +79,6 @@ namespace OpenSim.Services.HypergridService | |||
77 | IConfig invConfig = config.Configs[m_ConfigName]; | 79 | IConfig invConfig = config.Configs[m_ConfigName]; |
78 | if (invConfig != null) | 80 | if (invConfig != null) |
79 | { | 81 | { |
80 | // realm = authConfig.GetString("Realm", realm); | ||
81 | string userAccountsDll = invConfig.GetString("UserAccountsService", string.Empty); | 82 | string userAccountsDll = invConfig.GetString("UserAccountsService", string.Empty); |
82 | if (userAccountsDll == string.Empty) | 83 | if (userAccountsDll == string.Empty) |
83 | throw new Exception("Please specify UserAccountsService in HGInventoryService configuration"); | 84 | throw new Exception("Please specify UserAccountsService in HGInventoryService configuration"); |
@@ -87,8 +88,14 @@ namespace OpenSim.Services.HypergridService | |||
87 | if (m_UserAccountService == null) | 88 | if (m_UserAccountService == null) |
88 | throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); | 89 | throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); |
89 | 90 | ||
90 | // legacy configuration [obsolete] | 91 | string avatarDll = invConfig.GetString("AvatarService", string.Empty); |
91 | m_HomeURL = invConfig.GetString("ProfileServerURI", string.Empty); | 92 | if (avatarDll == string.Empty) |
93 | throw new Exception("Please specify AvatarService in HGInventoryService configuration"); | ||
94 | |||
95 | m_AvatarService = ServerUtils.LoadPlugin<IAvatarService>(avatarDll, args); | ||
96 | if (m_AvatarService == null) | ||
97 | throw new Exception(String.Format("Unable to create m_AvatarService from {0}", avatarDll)); | ||
98 | |||
92 | // Preferred | 99 | // Preferred |
93 | m_HomeURL = invConfig.GetString("HomeURI", m_HomeURL); | 100 | m_HomeURL = invConfig.GetString("HomeURI", m_HomeURL); |
94 | 101 | ||
@@ -394,7 +401,7 @@ namespace OpenSim.Services.HypergridService | |||
394 | return null; | 401 | return null; |
395 | } | 402 | } |
396 | 403 | ||
397 | if (!IsWithinSuitcaseTree(it.Owner, it.Folder)) | 404 | if (!IsWithinSuitcaseTree(it.Owner, it.Folder) && !IsPartOfAppearance(it.Owner, it.ID)) |
398 | { | 405 | { |
399 | m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Item {0} (folder {1}) is not within Suitcase", | 406 | m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Item {0} (folder {1}) is not within Suitcase", |
400 | it.Name, it.Folder); | 407 | it.Name, it.Folder); |
@@ -549,6 +556,52 @@ namespace OpenSim.Services.HypergridService | |||
549 | else return true; | 556 | else return true; |
550 | } | 557 | } |
551 | #endregion | 558 | #endregion |
559 | |||
560 | #region Avatar Appearance | ||
561 | |||
562 | private AvatarAppearance GetAppearance(UUID principalID) | ||
563 | { | ||
564 | AvatarAppearance a = null; | ||
565 | if (m_Appearances.TryGetValue(principalID, out a)) | ||
566 | return a; | ||
567 | |||
568 | a = m_AvatarService.GetAppearance(principalID); | ||
569 | m_Appearances.AddOrUpdate(principalID, a, 5 * 60); // 5minutes | ||
570 | return a; | ||
571 | } | ||
572 | |||
573 | private bool IsPartOfAppearance(UUID principalID, UUID itemID) | ||
574 | { | ||
575 | AvatarAppearance a = GetAppearance(principalID); | ||
576 | |||
577 | if (a == null) | ||
578 | return false; | ||
579 | |||
580 | // Check wearables (body parts and clothes) | ||
581 | for (int i = 0; i < a.Wearables.Length; i++) | ||
582 | { | ||
583 | for (int j = 0; j < a.Wearables[i].Count; j++) | ||
584 | { | ||
585 | if (a.Wearables[i][j].ItemID == itemID) | ||
586 | { | ||
587 | m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: item {0} is a wearable", itemID); | ||
588 | return true; | ||
589 | } | ||
590 | } | ||
591 | } | ||
592 | |||
593 | // Check attachments | ||
594 | if (a.GetAttachmentForItem(itemID) != null) | ||
595 | { | ||
596 | m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: item {0} is an attachment", itemID); | ||
597 | return true; | ||
598 | } | ||
599 | |||
600 | return false; | ||
601 | } | ||
602 | |||
603 | #endregion | ||
604 | |||
552 | } | 605 | } |
553 | 606 | ||
554 | } | 607 | } |
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index a49993c..56aafe6 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs | |||
@@ -77,6 +77,10 @@ namespace OpenSim.Services.HypergridService | |||
77 | 77 | ||
78 | protected static bool m_BypassClientVerification; | 78 | protected static bool m_BypassClientVerification; |
79 | 79 | ||
80 | private static Dictionary<int, bool> m_ForeignTripsAllowed = new Dictionary<int, bool>(); | ||
81 | private static Dictionary<int, List<string>> m_TripsAllowedExceptions = new Dictionary<int, List<string>>(); | ||
82 | private static Dictionary<int, List<string>> m_TripsDisallowedExceptions = new Dictionary<int, List<string>>(); | ||
83 | |||
80 | public UserAgentService(IConfigSource config) : this(config, null) | 84 | public UserAgentService(IConfigSource config) : this(config, null) |
81 | { | 85 | { |
82 | } | 86 | } |
@@ -121,6 +125,12 @@ namespace OpenSim.Services.HypergridService | |||
121 | m_PresenceService = ServerUtils.LoadPlugin<IPresenceService>(presenceService, args); | 125 | m_PresenceService = ServerUtils.LoadPlugin<IPresenceService>(presenceService, args); |
122 | m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(userAccountService, args); | 126 | m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(userAccountService, args); |
123 | 127 | ||
128 | m_LevelOutsideContacts = serverConfig.GetInt("LevelOutsideContacts", 0); | ||
129 | |||
130 | LoadTripPermissionsFromConfig(serverConfig, "ForeignTripsAllowed"); | ||
131 | LoadDomainExceptionsFromConfig(serverConfig, "AllowExcept", m_TripsAllowedExceptions); | ||
132 | LoadDomainExceptionsFromConfig(serverConfig, "DisallowExcept", m_TripsDisallowedExceptions); | ||
133 | |||
124 | m_GridName = serverConfig.GetString("ExternalName", string.Empty); | 134 | m_GridName = serverConfig.GetString("ExternalName", string.Empty); |
125 | if (m_GridName == string.Empty) | 135 | if (m_GridName == string.Empty) |
126 | { | 136 | { |
@@ -130,10 +140,43 @@ namespace OpenSim.Services.HypergridService | |||
130 | if (!m_GridName.EndsWith("/")) | 140 | if (!m_GridName.EndsWith("/")) |
131 | m_GridName = m_GridName + "/"; | 141 | m_GridName = m_GridName + "/"; |
132 | 142 | ||
133 | m_LevelOutsideContacts = serverConfig.GetInt("LevelOutsideContacts", 0); | ||
134 | } | 143 | } |
135 | } | 144 | } |
136 | 145 | ||
146 | protected void LoadTripPermissionsFromConfig(IConfig config, string variable) | ||
147 | { | ||
148 | foreach (string keyName in config.GetKeys()) | ||
149 | { | ||
150 | if (keyName.StartsWith(variable + "_Level_")) | ||
151 | { | ||
152 | int level = 0; | ||
153 | if (Int32.TryParse(keyName.Replace(variable + "_Level_", ""), out level)) | ||
154 | m_ForeignTripsAllowed.Add(level, config.GetBoolean(keyName, true)); | ||
155 | } | ||
156 | } | ||
157 | } | ||
158 | |||
159 | protected void LoadDomainExceptionsFromConfig(IConfig config, string variable, Dictionary<int, List<string>> exceptions) | ||
160 | { | ||
161 | foreach (string keyName in config.GetKeys()) | ||
162 | { | ||
163 | if (keyName.StartsWith(variable + "_Level_")) | ||
164 | { | ||
165 | int level = 0; | ||
166 | if (Int32.TryParse(keyName.Replace(variable + "_Level_", ""), out level) && !exceptions.ContainsKey(level)) | ||
167 | { | ||
168 | exceptions.Add(level, new List<string>()); | ||
169 | string value = config.GetString(keyName, string.Empty); | ||
170 | string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); | ||
171 | |||
172 | foreach (string s in parts) | ||
173 | exceptions[level].Add(s.Trim()); | ||
174 | } | ||
175 | } | ||
176 | } | ||
177 | } | ||
178 | |||
179 | |||
137 | public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt) | 180 | public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt) |
138 | { | 181 | { |
139 | position = new Vector3(128, 128, 0); lookAt = Vector3.UnitY; | 182 | position = new Vector3(128, 128, 0); lookAt = Vector3.UnitY; |
@@ -166,13 +209,39 @@ namespace OpenSim.Services.HypergridService | |||
166 | m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", | 209 | m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", |
167 | agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "stored IP" : clientIP.Address.ToString()), gatekeeper.ServerURI); | 210 | agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "stored IP" : clientIP.Address.ToString()), gatekeeper.ServerURI); |
168 | 211 | ||
169 | if (m_UserAccountService.GetUserAccount(UUID.Zero, agentCircuit.AgentID) == null) | 212 | string gridName = gatekeeper.ServerURI; |
213 | |||
214 | UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, agentCircuit.AgentID); | ||
215 | if (account == null) | ||
170 | { | 216 | { |
171 | m_log.WarnFormat("[USER AGENT SERVICE]: Someone attempted to lauch a foreign user from here {0} {1}", agentCircuit.firstname, agentCircuit.lastname); | 217 | m_log.WarnFormat("[USER AGENT SERVICE]: Someone attempted to lauch a foreign user from here {0} {1}", agentCircuit.firstname, agentCircuit.lastname); |
172 | reason = "Forbidden to launch your agents from here"; | 218 | reason = "Forbidden to launch your agents from here"; |
173 | return false; | 219 | return false; |
174 | } | 220 | } |
175 | 221 | ||
222 | // Is this user allowed to go there? | ||
223 | if (m_GridName != gridName) | ||
224 | { | ||
225 | if (m_ForeignTripsAllowed.ContainsKey(account.UserLevel)) | ||
226 | { | ||
227 | bool allowed = m_ForeignTripsAllowed[account.UserLevel]; | ||
228 | |||
229 | if (m_ForeignTripsAllowed[account.UserLevel] && IsException(gridName, account.UserLevel, m_TripsAllowedExceptions)) | ||
230 | allowed = false; | ||
231 | |||
232 | if (!m_ForeignTripsAllowed[account.UserLevel] && IsException(gridName, account.UserLevel, m_TripsDisallowedExceptions)) | ||
233 | allowed = true; | ||
234 | |||
235 | if (!allowed) | ||
236 | { | ||
237 | reason = "Your world does not allow you to visit the destination"; | ||
238 | m_log.InfoFormat("[USER AGENT SERVICE]: Agents not permitted to visit {0}. Refusing service.", gridName); | ||
239 | return false; | ||
240 | } | ||
241 | } | ||
242 | } | ||
243 | |||
244 | |||
176 | // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination | 245 | // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination |
177 | GridRegion region = new GridRegion(gatekeeper); | 246 | GridRegion region = new GridRegion(gatekeeper); |
178 | region.ServerURI = gatekeeper.ServerURI; | 247 | region.ServerURI = gatekeeper.ServerURI; |
@@ -189,7 +258,6 @@ namespace OpenSim.Services.HypergridService | |||
189 | 258 | ||
190 | bool success = false; | 259 | bool success = false; |
191 | string myExternalIP = string.Empty; | 260 | string myExternalIP = string.Empty; |
192 | string gridName = gatekeeper.ServerURI; | ||
193 | 261 | ||
194 | m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}", m_GridName, gridName); | 262 | m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}", m_GridName, gridName); |
195 | 263 | ||
@@ -586,6 +654,35 @@ namespace OpenSim.Services.HypergridService | |||
586 | else | 654 | else |
587 | return UUID.Zero; | 655 | return UUID.Zero; |
588 | } | 656 | } |
657 | |||
658 | #region Misc | ||
659 | |||
660 | private bool IsException(string dest, int level, Dictionary<int, List<string>> exceptions) | ||
661 | { | ||
662 | if (!exceptions.ContainsKey(level)) | ||
663 | return false; | ||
664 | |||
665 | bool exception = false; | ||
666 | if (exceptions[level].Count > 0) // we have exceptions | ||
667 | { | ||
668 | string destination = dest; | ||
669 | if (!destination.EndsWith("/")) | ||
670 | destination += "/"; | ||
671 | |||
672 | if (exceptions[level].Find(delegate(string s) | ||
673 | { | ||
674 | if (!s.EndsWith("/")) | ||
675 | s += "/"; | ||
676 | return s == destination; | ||
677 | }) != null) | ||
678 | exception = true; | ||
679 | } | ||
680 | |||
681 | return exception; | ||
682 | } | ||
683 | |||
684 | #endregion | ||
685 | |||
589 | } | 686 | } |
590 | 687 | ||
591 | class TravelingAgentInfo | 688 | class TravelingAgentInfo |
diff --git a/OpenSim/Services/Interfaces/IGridUserService.cs b/OpenSim/Services/Interfaces/IGridUserService.cs index 0a52bfa..2e7237e 100644 --- a/OpenSim/Services/Interfaces/IGridUserService.cs +++ b/OpenSim/Services/Interfaces/IGridUserService.cs | |||
@@ -80,7 +80,7 @@ namespace OpenSim.Services.Interfaces | |||
80 | 80 | ||
81 | } | 81 | } |
82 | 82 | ||
83 | public Dictionary<string, object> ToKeyValuePairs() | 83 | public virtual Dictionary<string, object> ToKeyValuePairs() |
84 | { | 84 | { |
85 | Dictionary<string, object> result = new Dictionary<string, object>(); | 85 | Dictionary<string, object> result = new Dictionary<string, object>(); |
86 | result["UserID"] = UserID; | 86 | result["UserID"] = UserID; |
@@ -96,7 +96,6 @@ namespace OpenSim.Services.Interfaces | |||
96 | result["Online"] = Online.ToString(); | 96 | result["Online"] = Online.ToString(); |
97 | result["Login"] = Login.ToString(); | 97 | result["Login"] = Login.ToString(); |
98 | result["Logout"] = Logout.ToString(); | 98 | result["Logout"] = Logout.ToString(); |
99 | |||
100 | 99 | ||
101 | return result; | 100 | return result; |
102 | } | 101 | } |
diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index 7518b86..309dab4 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs | |||
@@ -94,6 +94,7 @@ namespace OpenSim.Services.InventoryService | |||
94 | 94 | ||
95 | m_Database = LoadPlugin<IXInventoryData>(dllName, | 95 | m_Database = LoadPlugin<IXInventoryData>(dllName, |
96 | new Object[] {connString, String.Empty}); | 96 | new Object[] {connString, String.Empty}); |
97 | |||
97 | if (m_Database == null) | 98 | if (m_Database == null) |
98 | throw new Exception("Could not find a storage interface in the given module"); | 99 | throw new Exception("Could not find a storage interface in the given module"); |
99 | } | 100 | } |
@@ -229,10 +230,28 @@ namespace OpenSim.Services.InventoryService | |||
229 | public virtual InventoryFolderBase GetFolderForType(UUID principalID, AssetType type) | 230 | public virtual InventoryFolderBase GetFolderForType(UUID principalID, AssetType type) |
230 | { | 231 | { |
231 | // m_log.DebugFormat("[XINVENTORY SERVICE]: Getting folder type {0} for user {1}", type, principalID); | 232 | // m_log.DebugFormat("[XINVENTORY SERVICE]: Getting folder type {0} for user {1}", type, principalID); |
233 | |||
234 | InventoryFolderBase rootFolder = GetRootFolder(principalID); | ||
235 | |||
236 | if (rootFolder == null) | ||
237 | { | ||
238 | m_log.WarnFormat( | ||
239 | "[XINVENTORY]: Found no root folder for {0} in GetFolderForType() when looking for {1}", | ||
240 | principalID, type); | ||
241 | |||
242 | return null; | ||
243 | } | ||
244 | |||
245 | return GetSystemFolderForType(rootFolder, type); | ||
246 | } | ||
247 | |||
248 | private InventoryFolderBase GetSystemFolderForType(InventoryFolderBase rootFolder, AssetType type) | ||
249 | { | ||
250 | // m_log.DebugFormat("[XINVENTORY SERVICE]: Getting folder type {0} for user {1}", type, principalID); | ||
232 | 251 | ||
233 | XInventoryFolder[] folders = m_Database.GetFolders( | 252 | XInventoryFolder[] folders = m_Database.GetFolders( |
234 | new string[] { "agentID", "type"}, | 253 | new string[] { "agentID", "parentFolderID", "type"}, |
235 | new string[] { principalID.ToString(), ((int)type).ToString() }); | 254 | new string[] { rootFolder.Owner.ToString(), rootFolder.ID.ToString(), ((int)type).ToString() }); |
236 | 255 | ||
237 | if (folders.Length == 0) | 256 | if (folders.Length == 0) |
238 | { | 257 | { |
@@ -308,22 +327,38 @@ namespace OpenSim.Services.InventoryService | |||
308 | if (check != null) | 327 | if (check != null) |
309 | return false; | 328 | return false; |
310 | 329 | ||
311 | if (folder.Type == (short)AssetType.Folder | 330 | if (folder.Type != (short)AssetType.Folder && folder.Type != (short)AssetType.Unknown) |
312 | || folder.Type == (short)AssetType.Unknown | ||
313 | || folder.Type == (short)AssetType.OutfitFolder | ||
314 | || GetFolderForType(folder.Owner, (AssetType)(folder.Type)) == null) | ||
315 | { | 331 | { |
316 | XInventoryFolder xFolder = ConvertFromOpenSim(folder); | 332 | InventoryFolderBase rootFolder = GetRootFolder(folder.Owner); |
317 | return m_Database.StoreFolder(xFolder); | 333 | |
318 | } | 334 | if (rootFolder == null) |
319 | else | 335 | { |
320 | { | 336 | m_log.WarnFormat( |
321 | m_log.WarnFormat( | 337 | "[XINVENTORY]: Found no root folder for {0} in AddFolder() when looking for {1}", |
322 | "[XINVENTORY]: Folder of type {0} already exists when tried to add {1} to {2} for {3}", | 338 | folder.Owner, folder.Type); |
323 | folder.Type, folder.Name, folder.ParentID, folder.Owner); | 339 | |
340 | return false; | ||
341 | } | ||
342 | |||
343 | // Check we're not trying to add this as a system folder. | ||
344 | if (folder.ParentID == rootFolder.ID) | ||
345 | { | ||
346 | InventoryFolderBase existingSystemFolder | ||
347 | = GetSystemFolderForType(rootFolder, (AssetType)folder.Type); | ||
348 | |||
349 | if (existingSystemFolder != null) | ||
350 | { | ||
351 | m_log.WarnFormat( | ||
352 | "[XINVENTORY]: System folder of type {0} already exists when tried to add {1} to {2} for {3}", | ||
353 | folder.Type, folder.Name, folder.ParentID, folder.Owner); | ||
354 | |||
355 | return false; | ||
356 | } | ||
357 | } | ||
324 | } | 358 | } |
325 | 359 | ||
326 | return false; | 360 | XInventoryFolder xFolder = ConvertFromOpenSim(folder); |
361 | return m_Database.StoreFolder(xFolder); | ||
327 | } | 362 | } |
328 | 363 | ||
329 | public virtual bool UpdateFolder(InventoryFolderBase folder) | 364 | public virtual bool UpdateFolder(InventoryFolderBase folder) |
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 988a9b9..cbb6e6c 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -300,7 +300,7 @@ namespace OpenSim.Services.LLLoginService | |||
300 | { | 300 | { |
301 | m_log.InfoFormat( | 301 | m_log.InfoFormat( |
302 | "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: user level is {2} but minimum login level is {3}", | 302 | "[LLOGIN SERVICE]: Login failed for {0} {1}, reason: user level is {2} but minimum login level is {3}", |
303 | firstName, lastName, m_MinLoginLevel, account.UserLevel); | 303 | firstName, lastName, account.UserLevel, m_MinLoginLevel); |
304 | return LLFailedLoginResponse.LoginBlockedProblem; | 304 | return LLFailedLoginResponse.LoginBlockedProblem; |
305 | } | 305 | } |
306 | 306 | ||
diff --git a/OpenSim/Services/UserAccountService/GridUserService.cs b/OpenSim/Services/UserAccountService/GridUserService.cs index ac3d8fd..43fa04b 100644 --- a/OpenSim/Services/UserAccountService/GridUserService.cs +++ b/OpenSim/Services/UserAccountService/GridUserService.cs | |||
@@ -49,7 +49,7 @@ namespace OpenSim.Services.UserAccountService | |||
49 | m_log.Debug("[USER GRID SERVICE]: Starting user grid service"); | 49 | m_log.Debug("[USER GRID SERVICE]: Starting user grid service"); |
50 | } | 50 | } |
51 | 51 | ||
52 | public GridUserInfo GetGridUserInfo(string userID) | 52 | public virtual GridUserInfo GetGridUserInfo(string userID) |
53 | { | 53 | { |
54 | GridUserData d = m_Database.Get(userID); | 54 | GridUserData d = m_Database.Get(userID); |
55 | 55 | ||
@@ -122,17 +122,6 @@ namespace OpenSim.Services.UserAccountService | |||
122 | return m_Database.Store(d); | 122 | return m_Database.Store(d); |
123 | } | 123 | } |
124 | 124 | ||
125 | protected bool StoreGridUserInfo(GridUserInfo info) | ||
126 | { | ||
127 | GridUserData d = new GridUserData(); | ||
128 | |||
129 | d.Data["HomeRegionID"] = info.HomeRegionID.ToString(); | ||
130 | d.Data["HomePosition"] = info.HomePosition.ToString(); | ||
131 | d.Data["HomeLookAt"] = info.HomeLookAt.ToString(); | ||
132 | |||
133 | return m_Database.Store(d); | ||
134 | } | ||
135 | |||
136 | public bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt) | 125 | public bool SetHome(string userID, UUID homeID, Vector3 homePosition, Vector3 homeLookAt) |
137 | { | 126 | { |
138 | GridUserData d = m_Database.Get(userID); | 127 | GridUserData d = m_Database.Get(userID); |