mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 08:55:56 +08:00
*Complete redo of the permissions module
*Removed hardcoded permissions checks *Added permissions checks where needed
This commit is contained in:
@@ -217,6 +217,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
private ParcelPropertiesUpdateRequest handlerParcelPropertiesUpdateRequest = null; //OnParcelPropertiesUpdateRequest;
|
||||
private ParcelSelectObjects handlerParcelSelectObjects = null; //OnParcelSelectObjects;
|
||||
private ParcelObjectOwnerRequest handlerParcelObjectOwnerRequest = null; //OnParcelObjectOwnerRequest;
|
||||
private ParcelAbandonRequest handlerParcelAbandonRequest = null;
|
||||
private RegionInfoRequest handlerRegionInfoRequest = null; //OnRegionInfoRequest;
|
||||
private EstateCovenantRequest handlerEstateCovenantRequest = null; //OnEstateCovenantRequest;
|
||||
private RequestGodlikePowers handlerReqGodlikePowers = null; //OnRequestGodlikePowers;
|
||||
@@ -790,7 +791,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
public event ParcelJoinRequest OnParcelJoinRequest;
|
||||
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
||||
public event ParcelSelectObjects OnParcelSelectObjects;
|
||||
public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
||||
public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
||||
public event ParcelAbandonRequest OnParcelAbandonRequest;
|
||||
public event RegionInfoRequest OnRegionInfoRequest;
|
||||
public event EstateCovenantRequest OnEstateCovenantRequest;
|
||||
|
||||
@@ -945,25 +947,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
LLUUID imSessionID, string fromName, byte dialog, uint timeStamp,
|
||||
byte[] binaryBucket)
|
||||
{
|
||||
ImprovedInstantMessagePacket msg
|
||||
= (ImprovedInstantMessagePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedInstantMessage);
|
||||
|
||||
msg.AgentData.AgentID = fromAgent;
|
||||
msg.AgentData.SessionID = fromAgentSession;
|
||||
msg.MessageBlock.FromAgentName = Helpers.StringToField(fromName);
|
||||
msg.MessageBlock.Dialog = dialog;
|
||||
msg.MessageBlock.FromGroup = false;
|
||||
msg.MessageBlock.ID = imSessionID;
|
||||
msg.MessageBlock.Offline = 0;
|
||||
msg.MessageBlock.ParentEstateID = 0;
|
||||
msg.MessageBlock.Position = new LLVector3();
|
||||
msg.MessageBlock.RegionID = LLUUID.Random();
|
||||
msg.MessageBlock.Timestamp = timeStamp;
|
||||
msg.MessageBlock.ToAgentID = toAgent;
|
||||
msg.MessageBlock.Message = Helpers.StringToField(message);
|
||||
msg.MessageBlock.BinaryBucket = binaryBucket;
|
||||
if (((Scene)(this.m_scene)).ExternalChecks.ExternalChecksCanInstantMessage(fromAgent, toAgent))
|
||||
{
|
||||
ImprovedInstantMessagePacket msg
|
||||
= (ImprovedInstantMessagePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedInstantMessage);
|
||||
|
||||
OutPacket(msg, ThrottleOutPacketType.Task);
|
||||
msg.AgentData.AgentID = fromAgent;
|
||||
msg.AgentData.SessionID = fromAgentSession;
|
||||
msg.MessageBlock.FromAgentName = Helpers.StringToField(fromName);
|
||||
msg.MessageBlock.Dialog = dialog;
|
||||
msg.MessageBlock.FromGroup = false;
|
||||
msg.MessageBlock.ID = imSessionID;
|
||||
msg.MessageBlock.Offline = 0;
|
||||
msg.MessageBlock.ParentEstateID = 0;
|
||||
msg.MessageBlock.Position = new LLVector3();
|
||||
msg.MessageBlock.RegionID = LLUUID.Random();
|
||||
msg.MessageBlock.Timestamp = timeStamp;
|
||||
msg.MessageBlock.ToAgentID = toAgent;
|
||||
msg.MessageBlock.Message = Helpers.StringToField(message);
|
||||
msg.MessageBlock.BinaryBucket = binaryBucket;
|
||||
|
||||
OutPacket(msg, ThrottleOutPacketType.Task);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -5254,7 +5259,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
handlerParcelObjectOwnerRequest(reqPacket.ParcelData.LocalID, this);
|
||||
}
|
||||
break;
|
||||
|
||||
case PacketType.ParcelRelease:
|
||||
ParcelReleasePacket releasePacket = (ParcelReleasePacket)Pack;
|
||||
|
||||
handlerParcelAbandonRequest = OnParcelAbandonRequest;
|
||||
if (handlerParcelAbandonRequest != null)
|
||||
{
|
||||
handlerParcelAbandonRequest(releasePacket.Data.LocalID, this);
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
|
||||
#region Estate Packets
|
||||
@@ -5267,13 +5280,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
{
|
||||
case "getinfo":
|
||||
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
OnDetailedEstateDataRequest(this, messagePacket.MethodData.Invoice);
|
||||
}
|
||||
break;
|
||||
case "setregioninfo":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
OnSetEstateFlagsRequest(convertParamStringToBool(messagePacket.ParamList[0].Parameter),convertParamStringToBool(messagePacket.ParamList[1].Parameter),
|
||||
convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter),
|
||||
@@ -5286,7 +5299,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
|
||||
break;
|
||||
case "texturebase":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||
{
|
||||
@@ -5301,7 +5314,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "texturedetail":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||
{
|
||||
@@ -5319,7 +5332,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
|
||||
break;
|
||||
case "textureheights":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||
{
|
||||
@@ -5340,7 +5353,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
OnCommitEstateTerrainTextureRequest(this);
|
||||
break;
|
||||
case "setregionterrain":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
if (messagePacket.ParamList.Length != 9)
|
||||
{
|
||||
@@ -5375,7 +5388,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
|
||||
break;
|
||||
case "restart":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanRestartSim(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
// There's only 1 block in the estateResetSim.. and that's the number of seconds till restart.
|
||||
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||
@@ -5389,7 +5402,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "estatechangecovenantid":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||
{
|
||||
@@ -5399,7 +5412,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "estateaccessdelta": // Estate access delta manages the banlist and allow list too.
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
int estateAccessType = Convert.ToInt16(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter));
|
||||
OnUpdateEstateAccessDeltaRequest(this, messagePacket.MethodData.Invoice,estateAccessType,new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)));
|
||||
@@ -5407,7 +5420,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "simulatormessage":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
|
||||
@@ -5418,7 +5431,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "instantmessage":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
|
||||
@@ -5429,7 +5442,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "setregiondebug":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||
LLUUID SenderID = messagePacket.AgentData.AgentID;
|
||||
@@ -5441,7 +5454,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
}
|
||||
break;
|
||||
case "teleporthomeuser":
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||
{
|
||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||
LLUUID SenderID = messagePacket.AgentData.AgentID;
|
||||
|
||||
Reference in New Issue
Block a user