private void ChangeEstateAccess(LLAgent agent, Estate estate, string[] parameters, UUID invoiceID) { uint flagsValue; UUID agentOrGroupID; if (parameters.Length == 3 && UInt32.TryParse(parameters[1], out flagsValue) && UUID.TryParse(parameters[2], out agentOrGroupID)) { EstateAccessDeltaFlags flags = (EstateAccessDeltaFlags)flagsValue; // Non-owners can only modify the ban list if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentAdd) || flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentRemove) || flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupAdd) || flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupRemove) || flags.HasFlag(EstateAccessDeltaFlags.ManagerAdd) || flags.HasFlag(EstateAccessDeltaFlags.ManagerRemove)) { if (agent.ID != estate.OwnerID && !m_permissions.IsGridAdmin(agent)) { m_log.Warn("Non-manager " + agent.Name + " attempted to make " + flags + " changes to the estate access list"); return; } } // Ignore any attempted changes to the estate owner's access level if (agentOrGroupID == estate.OwnerID) { m_log.Warn("Ignoring " + flags + " estate access change for estate owner " + estate.OwnerID); return; } if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentAdd)) estate.AddUser(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentRemove)) estate.RemoveUser(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupAdd)) estate.AddGroup(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupRemove)) estate.RemoveGroup(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.BannedAgentAdd)) estate.AddBannedUser(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.BannedAgentRemove)) estate.RemoveBannedUser(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.ManagerAdd)) estate.AddManager(agentOrGroupID); if (flags.HasFlag(EstateAccessDeltaFlags.ManagerRemove)) estate.RemoveManager(agentOrGroupID); // TODO: Handle EstateAccessDeltaFlags.ApplyToAllEstates and EstateAccessDeltaFlags.ApplyToManagedEstates if (!flags.HasFlag(EstateAccessDeltaFlags.NoReply)) { // Send a response SendEstateAccessList(agent, estate, EstateAccessFlags.AllowedAgents | EstateAccessFlags.AllowedGroups | EstateAccessFlags.BannedAgents | EstateAccessFlags.Managers, invoiceID); } } else { m_log.Warn(agent.Name + " sent an estateaccessdelta call with unrecognized parameters"); } }
private void ChangeEstateAccess(LLAgent agent, Estate estate, string[] parameters, UUID invoiceID) { uint flagsValue; UUID agentOrGroupID; if (parameters.Length == 3 && UInt32.TryParse(parameters[1], out flagsValue) && UUID.TryParse(parameters[2], out agentOrGroupID)) { EstateAccessDeltaFlags flags = (EstateAccessDeltaFlags)flagsValue; // Non-owners can only modify the ban list if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentAdd) || flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentRemove) || flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupAdd) || flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupRemove) || flags.HasFlag(EstateAccessDeltaFlags.ManagerAdd) || flags.HasFlag(EstateAccessDeltaFlags.ManagerRemove)) { if (agent.ID != estate.OwnerID && !m_permissions.IsGridAdmin(agent)) { m_log.Warn("Non-manager " + agent.Name + " attempted to make " + flags + " changes to the estate access list"); return; } } // Ignore any attempted changes to the estate owner's access level if (agentOrGroupID == estate.OwnerID) { m_log.Warn("Ignoring " + flags + " estate access change for estate owner " + estate.OwnerID); return; } if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentAdd)) { estate.AddUser(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.AllowedAgentRemove)) { estate.RemoveUser(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupAdd)) { estate.AddGroup(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.AllowedGroupRemove)) { estate.RemoveGroup(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.BannedAgentAdd)) { estate.AddBannedUser(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.BannedAgentRemove)) { estate.RemoveBannedUser(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.ManagerAdd)) { estate.AddManager(agentOrGroupID); } if (flags.HasFlag(EstateAccessDeltaFlags.ManagerRemove)) { estate.RemoveManager(agentOrGroupID); } // TODO: Handle EstateAccessDeltaFlags.ApplyToAllEstates and EstateAccessDeltaFlags.ApplyToManagedEstates if (!flags.HasFlag(EstateAccessDeltaFlags.NoReply)) { // Send a response SendEstateAccessList(agent, estate, EstateAccessFlags.AllowedAgents | EstateAccessFlags.AllowedGroups | EstateAccessFlags.BannedAgents | EstateAccessFlags.Managers, invoiceID); } } else { m_log.Warn(agent.Name + " sent an estateaccessdelta call with unrecognized parameters"); } }