diff options
author | Diva Canto | 2014-09-21 09:22:32 -0700 |
---|---|---|
committer | Diva Canto | 2014-09-21 09:22:32 -0700 |
commit | 94619cba58a6783efd61acae56599332d7c111ba (patch) | |
tree | 9d2a0cc3aaee432853455dc814e5063bd71704ef | |
parent | This fixes the Scene thread renaming issue (diff) | |
download | opensim-SC-94619cba58a6783efd61acae56599332d7c111ba.zip opensim-SC-94619cba58a6783efd61acae56599332d7c111ba.tar.gz opensim-SC-94619cba58a6783efd61acae56599332d7c111ba.tar.bz2 opensim-SC-94619cba58a6783efd61acae56599332d7c111ba.tar.xz |
Fixed a hard-to-run-into bug in groups: at the time of creation of a group, the OwnerRoleID in the groups table was inconsistent with the roleID in the roles table. OpenSim core was not running into this bug, but 3rd party modules (like Wifi) were.
-rw-r--r-- | OpenSim/Addons/Groups/Service/GroupsService.cs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/OpenSim/Addons/Groups/Service/GroupsService.cs b/OpenSim/Addons/Groups/Service/GroupsService.cs index f44c094..7cbc796 100644 --- a/OpenSim/Addons/Groups/Service/GroupsService.cs +++ b/OpenSim/Addons/Groups/Service/GroupsService.cs | |||
@@ -150,7 +150,8 @@ namespace OpenSim.Groups | |||
150 | data.Data["ShowInList"] = showInList ? "1" : "0"; | 150 | data.Data["ShowInList"] = showInList ? "1" : "0"; |
151 | data.Data["AllowPublish"] = allowPublish ? "1" : "0"; | 151 | data.Data["AllowPublish"] = allowPublish ? "1" : "0"; |
152 | data.Data["MaturePublish"] = maturePublish ? "1" : "0"; | 152 | data.Data["MaturePublish"] = maturePublish ? "1" : "0"; |
153 | data.Data["OwnerRoleID"] = UUID.Random().ToString(); | 153 | UUID roleID = UUID.Random(); |
154 | data.Data["OwnerRoleID"] = roleID.ToString(); | ||
154 | 155 | ||
155 | if (!m_Database.StoreGroup(data)) | 156 | if (!m_Database.StoreGroup(data)) |
156 | return UUID.Zero; | 157 | return UUID.Zero; |
@@ -159,7 +160,6 @@ namespace OpenSim.Groups | |||
159 | _AddOrUpdateGroupRole(RequestingAgentID, data.GroupID, UUID.Zero, "Everyone", "Everyone in the group", "Member of " + name, (ulong)DefaultEveryonePowers, true); | 160 | _AddOrUpdateGroupRole(RequestingAgentID, data.GroupID, UUID.Zero, "Everyone", "Everyone in the group", "Member of " + name, (ulong)DefaultEveryonePowers, true); |
160 | 161 | ||
161 | // Create Owner role | 162 | // Create Owner role |
162 | UUID roleID = UUID.Random(); | ||
163 | _AddOrUpdateGroupRole(RequestingAgentID, data.GroupID, roleID, "Owners", "Owners of the group", "Owner of " + name, (ulong)OwnerPowers, true); | 163 | _AddOrUpdateGroupRole(RequestingAgentID, data.GroupID, roleID, "Owners", "Owners of the group", "Owner of " + name, (ulong)OwnerPowers, true); |
164 | 164 | ||
165 | // Add founder to group | 165 | // Add founder to group |
@@ -247,6 +247,9 @@ namespace OpenSim.Groups | |||
247 | if (group == null) | 247 | if (group == null) |
248 | return members; | 248 | return members; |
249 | 249 | ||
250 | // Unfortunately this doesn't quite work on legacy group data because of a bug | ||
251 | // that's also being fixed here on CreateGroup. The OwnerRoleID sent to the DB was wrong. | ||
252 | // See how to find the ownerRoleID a few lines below. | ||
250 | UUID ownerRoleID = new UUID(group.Data["OwnerRoleID"]); | 253 | UUID ownerRoleID = new UUID(group.Data["OwnerRoleID"]); |
251 | 254 | ||
252 | RoleData[] roles = m_Database.RetrieveRoles(GroupID); | 255 | RoleData[] roles = m_Database.RetrieveRoles(GroupID); |
@@ -255,6 +258,11 @@ namespace OpenSim.Groups | |||
255 | return members; | 258 | return members; |
256 | List<RoleData> rolesList = new List<RoleData>(roles); | 259 | List<RoleData> rolesList = new List<RoleData>(roles); |
257 | 260 | ||
261 | // Let's find the "real" ownerRoleID | ||
262 | RoleData ownerRole = rolesList.Find(r => r.Data["Powers"] == ((long)OwnerPowers).ToString()); | ||
263 | if (ownerRole != null) | ||
264 | ownerRoleID = ownerRole.RoleID; | ||
265 | |||
258 | // Check visibility? | 266 | // Check visibility? |
259 | // When we don't want to check visibility, we pass it "all" as the requestingAgentID | 267 | // When we don't want to check visibility, we pass it "all" as the requestingAgentID |
260 | bool checkVisibility = !RequestingAgentID.Equals(UUID.Zero.ToString()); | 268 | bool checkVisibility = !RequestingAgentID.Equals(UUID.Zero.ToString()); |
@@ -291,17 +299,17 @@ namespace OpenSim.Groups | |||
291 | { | 299 | { |
292 | m.Title = selected.Data["Title"]; | 300 | m.Title = selected.Data["Title"]; |
293 | m.AgentPowers = UInt64.Parse(selected.Data["Powers"]); | 301 | m.AgentPowers = UInt64.Parse(selected.Data["Powers"]); |
302 | } | ||
294 | 303 | ||
295 | m.AgentID = d.PrincipalID; | 304 | m.AgentID = d.PrincipalID; |
296 | m.AcceptNotices = d.Data["AcceptNotices"] == "1" ? true : false; | 305 | m.AcceptNotices = d.Data["AcceptNotices"] == "1" ? true : false; |
297 | m.Contribution = Int32.Parse(d.Data["Contribution"]); | 306 | m.Contribution = Int32.Parse(d.Data["Contribution"]); |
298 | m.ListInProfile = d.Data["ListInProfile"] == "1" ? true : false; | 307 | m.ListInProfile = d.Data["ListInProfile"] == "1" ? true : false; |
299 | 308 | ||
300 | // Is this person an owner of the group? | 309 | // Is this person an owner of the group? |
301 | m.IsOwner = (rolemembershipsList.Find(r => r.RoleID == ownerRoleID) != null) ? true : false; | 310 | m.IsOwner = (rolemembershipsList.Find(r => r.RoleID == ownerRoleID) != null) ? true : false; |
302 | 311 | ||
303 | members.Add(m); | 312 | members.Add(m); |
304 | } | ||
305 | } | 313 | } |
306 | 314 | ||
307 | return members; | 315 | return members; |