*Complete redo of the permissions module
*Removed hardcoded permissions checks *Added permissions checks where needed0.6.0-stable
parent
8293be6811
commit
32785921d0
|
@ -500,6 +500,8 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public delegate void ParcelObjectOwnerRequest(int local_id, IClientAPI remote_client);
|
public delegate void ParcelObjectOwnerRequest(int local_id, IClientAPI remote_client);
|
||||||
|
|
||||||
|
public delegate void ParcelAbandonRequest(int local_id, IClientAPI remote_client);
|
||||||
|
|
||||||
public delegate void EstateOwnerMessageRequest(LLUUID AgentID, LLUUID SessionID, LLUUID TransactionID, LLUUID Invoice, byte[] Method, byte[][] Parameters, IClientAPI remote_client);
|
public delegate void EstateOwnerMessageRequest(LLUUID AgentID, LLUUID SessionID, LLUUID TransactionID, LLUUID Invoice, byte[] Method, byte[][] Parameters, IClientAPI remote_client);
|
||||||
|
|
||||||
public delegate void RegionInfoRequest(IClientAPI remote_client);
|
public delegate void RegionInfoRequest(IClientAPI remote_client);
|
||||||
|
@ -762,6 +764,7 @@ namespace OpenSim.Framework
|
||||||
event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
||||||
event ParcelSelectObjects OnParcelSelectObjects;
|
event ParcelSelectObjects OnParcelSelectObjects;
|
||||||
event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
||||||
|
event ParcelAbandonRequest OnParcelAbandonRequest;
|
||||||
event RegionInfoRequest OnRegionInfoRequest;
|
event RegionInfoRequest OnRegionInfoRequest;
|
||||||
event EstateCovenantRequest OnEstateCovenantRequest;
|
event EstateCovenantRequest OnEstateCovenantRequest;
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,6 @@ namespace OpenSim
|
||||||
m_console.Notice("force-update - force an update of prims in the scene");
|
m_console.Notice("force-update - force an update of prims in the scene");
|
||||||
m_console.Notice("load-xml [filename] - load prims from XML");
|
m_console.Notice("load-xml [filename] - load prims from XML");
|
||||||
m_console.Notice("load-xml2 [filename] - load prims from XML using version 2 format");
|
m_console.Notice("load-xml2 [filename] - load prims from XML using version 2 format");
|
||||||
m_console.Notice("permissions [true/false] - turn on/off permissions on the scene");
|
|
||||||
m_console.Notice("restart - disconnects all clients and restarts the sims in the instance.");
|
m_console.Notice("restart - disconnects all clients and restarts the sims in the instance.");
|
||||||
m_console.Notice("remove-region [name] - remove a region");
|
m_console.Notice("remove-region [name] - remove a region");
|
||||||
m_console.Notice("save-xml [filename] - save prims to XML");
|
m_console.Notice("save-xml [filename] - save prims to XML");
|
||||||
|
@ -368,12 +367,6 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "permissions":
|
|
||||||
// Treats each user as a super-admin when disabled
|
|
||||||
bool permissions = Convert.ToBoolean(cmdparams[0]);
|
|
||||||
m_sceneManager.SetBypassPermissionsOnCurrentScene(!permissions);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "backup":
|
case "backup":
|
||||||
m_sceneManager.BackupCurrentScene();
|
m_sceneManager.BackupCurrentScene();
|
||||||
break;
|
break;
|
||||||
|
@ -538,7 +531,6 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
string[] tmpPluginArgs = new string[cmdparams.Length + 1];
|
string[] tmpPluginArgs = new string[cmdparams.Length + 1];
|
||||||
cmdparams.CopyTo(tmpPluginArgs, 1);
|
cmdparams.CopyTo(tmpPluginArgs, 1);
|
||||||
|
|
|
@ -217,6 +217,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
private ParcelPropertiesUpdateRequest handlerParcelPropertiesUpdateRequest = null; //OnParcelPropertiesUpdateRequest;
|
private ParcelPropertiesUpdateRequest handlerParcelPropertiesUpdateRequest = null; //OnParcelPropertiesUpdateRequest;
|
||||||
private ParcelSelectObjects handlerParcelSelectObjects = null; //OnParcelSelectObjects;
|
private ParcelSelectObjects handlerParcelSelectObjects = null; //OnParcelSelectObjects;
|
||||||
private ParcelObjectOwnerRequest handlerParcelObjectOwnerRequest = null; //OnParcelObjectOwnerRequest;
|
private ParcelObjectOwnerRequest handlerParcelObjectOwnerRequest = null; //OnParcelObjectOwnerRequest;
|
||||||
|
private ParcelAbandonRequest handlerParcelAbandonRequest = null;
|
||||||
private RegionInfoRequest handlerRegionInfoRequest = null; //OnRegionInfoRequest;
|
private RegionInfoRequest handlerRegionInfoRequest = null; //OnRegionInfoRequest;
|
||||||
private EstateCovenantRequest handlerEstateCovenantRequest = null; //OnEstateCovenantRequest;
|
private EstateCovenantRequest handlerEstateCovenantRequest = null; //OnEstateCovenantRequest;
|
||||||
private RequestGodlikePowers handlerReqGodlikePowers = null; //OnRequestGodlikePowers;
|
private RequestGodlikePowers handlerReqGodlikePowers = null; //OnRequestGodlikePowers;
|
||||||
|
@ -790,7 +791,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public event ParcelJoinRequest OnParcelJoinRequest;
|
public event ParcelJoinRequest OnParcelJoinRequest;
|
||||||
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
||||||
public event ParcelSelectObjects OnParcelSelectObjects;
|
public event ParcelSelectObjects OnParcelSelectObjects;
|
||||||
public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
||||||
|
public event ParcelAbandonRequest OnParcelAbandonRequest;
|
||||||
public event RegionInfoRequest OnRegionInfoRequest;
|
public event RegionInfoRequest OnRegionInfoRequest;
|
||||||
public event EstateCovenantRequest OnEstateCovenantRequest;
|
public event EstateCovenantRequest OnEstateCovenantRequest;
|
||||||
|
|
||||||
|
@ -945,25 +947,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
LLUUID imSessionID, string fromName, byte dialog, uint timeStamp,
|
LLUUID imSessionID, string fromName, byte dialog, uint timeStamp,
|
||||||
byte[] binaryBucket)
|
byte[] binaryBucket)
|
||||||
{
|
{
|
||||||
ImprovedInstantMessagePacket msg
|
if (((Scene)(this.m_scene)).ExternalChecks.ExternalChecksCanInstantMessage(fromAgent, toAgent))
|
||||||
= (ImprovedInstantMessagePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedInstantMessage);
|
{
|
||||||
|
ImprovedInstantMessagePacket msg
|
||||||
msg.AgentData.AgentID = fromAgent;
|
= (ImprovedInstantMessagePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedInstantMessage);
|
||||||
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);
|
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>
|
/// <summary>
|
||||||
|
@ -5254,7 +5259,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
handlerParcelObjectOwnerRequest(reqPacket.ParcelData.LocalID, this);
|
handlerParcelObjectOwnerRequest(reqPacket.ParcelData.LocalID, this);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PacketType.ParcelRelease:
|
||||||
|
ParcelReleasePacket releasePacket = (ParcelReleasePacket)Pack;
|
||||||
|
|
||||||
|
handlerParcelAbandonRequest = OnParcelAbandonRequest;
|
||||||
|
if (handlerParcelAbandonRequest != null)
|
||||||
|
{
|
||||||
|
handlerParcelAbandonRequest(releasePacket.Data.LocalID, this);
|
||||||
|
}
|
||||||
|
break;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Estate Packets
|
#region Estate Packets
|
||||||
|
@ -5267,13 +5280,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
case "getinfo":
|
case "getinfo":
|
||||||
|
|
||||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||||
{
|
{
|
||||||
OnDetailedEstateDataRequest(this, messagePacket.MethodData.Invoice);
|
OnDetailedEstateDataRequest(this, messagePacket.MethodData.Invoice);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "setregioninfo":
|
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),
|
OnSetEstateFlagsRequest(convertParamStringToBool(messagePacket.ParamList[0].Parameter),convertParamStringToBool(messagePacket.ParamList[1].Parameter),
|
||||||
convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter),
|
convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter),
|
||||||
|
@ -5286,7 +5299,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "texturebase":
|
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)
|
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||||
{
|
{
|
||||||
|
@ -5301,7 +5314,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "texturedetail":
|
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)
|
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||||
{
|
{
|
||||||
|
@ -5319,7 +5332,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "textureheights":
|
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)
|
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||||
{
|
{
|
||||||
|
@ -5340,7 +5353,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
OnCommitEstateTerrainTextureRequest(this);
|
OnCommitEstateTerrainTextureRequest(this);
|
||||||
break;
|
break;
|
||||||
case "setregionterrain":
|
case "setregionterrain":
|
||||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanEditEstateTerrain(this.AgentId))
|
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||||
{
|
{
|
||||||
if (messagePacket.ParamList.Length != 9)
|
if (messagePacket.ParamList.Length != 9)
|
||||||
{
|
{
|
||||||
|
@ -5375,7 +5388,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "restart":
|
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.
|
// There's only 1 block in the estateResetSim.. and that's the number of seconds till restart.
|
||||||
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||||
|
@ -5389,7 +5402,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "estatechangecovenantid":
|
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)
|
foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList)
|
||||||
{
|
{
|
||||||
|
@ -5399,7 +5412,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "estateaccessdelta": // Estate access delta manages the banlist and allow list too.
|
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));
|
int estateAccessType = Convert.ToInt16(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter));
|
||||||
OnUpdateEstateAccessDeltaRequest(this, messagePacket.MethodData.Invoice,estateAccessType,new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].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;
|
break;
|
||||||
case "simulatormessage":
|
case "simulatormessage":
|
||||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||||
{
|
{
|
||||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||||
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
|
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
|
||||||
|
@ -5418,7 +5431,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "instantmessage":
|
case "instantmessage":
|
||||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||||
{
|
{
|
||||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||||
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
|
LLUUID SenderID = new LLUUID(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter));
|
||||||
|
@ -5429,7 +5442,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "setregiondebug":
|
case "setregiondebug":
|
||||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||||
{
|
{
|
||||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||||
LLUUID SenderID = messagePacket.AgentData.AgentID;
|
LLUUID SenderID = messagePacket.AgentData.AgentID;
|
||||||
|
@ -5441,7 +5454,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "teleporthomeuser":
|
case "teleporthomeuser":
|
||||||
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanBeGodLike(this.AgentId))
|
if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId))
|
||||||
{
|
{
|
||||||
LLUUID invoice = messagePacket.MethodData.Invoice;
|
LLUUID invoice = messagePacket.MethodData.Invoice;
|
||||||
LLUUID SenderID = messagePacket.AgentData.AgentID;
|
LLUUID SenderID = messagePacket.AgentData.AgentID;
|
||||||
|
|
|
@ -32,6 +32,7 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
public interface IScenePermissions
|
public interface IScenePermissions
|
||||||
{
|
{
|
||||||
bool BypassPermissions { get; set; }
|
bool BypassPermissions { get; set; }
|
||||||
|
bool BypassPermissionsValue { get; set; }
|
||||||
uint GenerateClientFlags(LLUUID user, LLUUID objID);
|
uint GenerateClientFlags(LLUUID user, LLUUID objID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,7 +400,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
|
|
||||||
//If we are still here, then they are subdividing within one piece of land
|
//If we are still here, then they are subdividing within one piece of land
|
||||||
//Check owner
|
//Check owner
|
||||||
if (startLandObject.landData.ownerID != attempting_user_id)
|
if (!m_scene.ExternalChecks.ExternalChecksCanEditParcel(attempting_user_id,startLandObject))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -469,7 +469,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (masterLandObject.landData.ownerID != attempting_user_id)
|
if (!m_scene.ExternalChecks.ExternalChecksCanEditParcel(attempting_user_id, masterLandObject))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -655,6 +655,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
|
|
||||||
public void handleParcelSelectObjectsRequest(int local_id, int request_type, IClientAPI remote_client)
|
public void handleParcelSelectObjectsRequest(int local_id, int request_type, IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
|
|
||||||
landList[local_id].sendForceObjectSelect(local_id, request_type, remote_client);
|
landList[local_id].sendForceObjectSelect(local_id, request_type, remote_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,6 +664,18 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
landList[local_id].sendLandObjectOwners(remote_client);
|
landList[local_id].sendLandObjectOwners(remote_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handleParcelAbandonRequest(int local_id, IClientAPI remote_client)
|
||||||
|
{
|
||||||
|
if (landList.ContainsKey(local_id))
|
||||||
|
{
|
||||||
|
if (m_scene.ExternalChecks.ExternalChecksCanAbandonParcel(remote_client.AgentId, landList[local_id]))
|
||||||
|
{
|
||||||
|
landList[local_id].landData.ownerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
|
||||||
|
m_scene.Broadcast(SendParcelOverlay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ILandChannel Members
|
#region ILandChannel Members
|
||||||
|
|
|
@ -52,7 +52,6 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest;
|
m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest;
|
||||||
m_scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient);
|
m_scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient);
|
||||||
m_scene.EventManager.OnSignificantClientMovement += landChannel.handleSignificantClientMovement;
|
m_scene.EventManager.OnSignificantClientMovement += landChannel.handleSignificantClientMovement;
|
||||||
|
|
||||||
lock (m_scene)
|
lock (m_scene)
|
||||||
{
|
{
|
||||||
m_scene.LandChannel = (ILandChannel) landChannel;
|
m_scene.LandChannel = (ILandChannel) landChannel;
|
||||||
|
@ -70,8 +69,11 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
client.OnParcelObjectOwnerRequest += new ParcelObjectOwnerRequest(landChannel.handleParcelObjectOwnersRequest);
|
client.OnParcelObjectOwnerRequest += new ParcelObjectOwnerRequest(landChannel.handleParcelObjectOwnersRequest);
|
||||||
client.OnParcelAccessListRequest += new ParcelAccessListRequest(landChannel.handleParcelAccessRequest);
|
client.OnParcelAccessListRequest += new ParcelAccessListRequest(landChannel.handleParcelAccessRequest);
|
||||||
client.OnParcelAccessListUpdateRequest += new ParcelAccessListUpdateRequest(landChannel.handleParcelAccessUpdateRequest);
|
client.OnParcelAccessListUpdateRequest += new ParcelAccessListUpdateRequest(landChannel.handleParcelAccessUpdateRequest);
|
||||||
|
client.OnParcelAbandonRequest += new ParcelAbandonRequest(landChannel.handleParcelAbandonRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,12 +127,19 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
|
|
||||||
public void updateLandProperties(LandUpdateArgs args, IClientAPI remote_client)
|
public void updateLandProperties(LandUpdateArgs args, IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
if (remote_client.AgentId == landData.ownerID)
|
if (m_scene.ExternalChecks.ExternalChecksCanEditParcel(remote_client.AgentId,this))
|
||||||
{
|
{
|
||||||
//Needs later group support
|
//Needs later group support
|
||||||
LandData newData = landData.Copy();
|
LandData newData = landData.Copy();
|
||||||
|
|
||||||
newData.authBuyerID = args.AuthBuyerID;
|
if (args.AuthBuyerID != newData.authBuyerID || args.SalePrice != newData.salePrice)
|
||||||
|
{
|
||||||
|
if (m_scene.ExternalChecks.ExternalChecksCanSellParcel(remote_client.AgentId, this))
|
||||||
|
{
|
||||||
|
newData.authBuyerID = args.AuthBuyerID;
|
||||||
|
newData.salePrice = args.SalePrice;
|
||||||
|
}
|
||||||
|
}
|
||||||
newData.category = args.Category;
|
newData.category = args.Category;
|
||||||
newData.landDesc = args.Desc;
|
newData.landDesc = args.Desc;
|
||||||
newData.groupID = args.GroupID;
|
newData.groupID = args.GroupID;
|
||||||
|
@ -145,7 +152,6 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
newData.landFlags = args.ParcelFlags;
|
newData.landFlags = args.ParcelFlags;
|
||||||
newData.passHours = args.PassHours;
|
newData.passHours = args.PassHours;
|
||||||
newData.passPrice = args.PassPrice;
|
newData.passPrice = args.PassPrice;
|
||||||
newData.salePrice = args.SalePrice;
|
|
||||||
newData.snapshotID = args.SnapshotID;
|
newData.snapshotID = args.SnapshotID;
|
||||||
newData.userLocation = args.UserLocation;
|
newData.userLocation = args.UserLocation;
|
||||||
newData.userLookAt = args.UserLookAt;
|
newData.userLookAt = args.UserLookAt;
|
||||||
|
@ -587,27 +593,30 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
|
|
||||||
public void sendForceObjectSelect(int local_id, int request_type, IClientAPI remote_client)
|
public void sendForceObjectSelect(int local_id, int request_type, IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
List<uint> resultLocalIDs = new List<uint>();
|
if (m_scene.ExternalChecks.ExternalChecksCanEditParcel(remote_client.AgentId, this))
|
||||||
foreach (SceneObjectGroup obj in primsOverMe)
|
|
||||||
{
|
{
|
||||||
if (obj.LocalId > 0)
|
List<uint> resultLocalIDs = new List<uint>();
|
||||||
|
foreach (SceneObjectGroup obj in primsOverMe)
|
||||||
{
|
{
|
||||||
if (request_type == LandChannel.LAND_SELECT_OBJECTS_OWNER && obj.OwnerID == landData.ownerID)
|
if (obj.LocalId > 0)
|
||||||
{
|
{
|
||||||
resultLocalIDs.Add(obj.LocalId);
|
if (request_type == LandChannel.LAND_SELECT_OBJECTS_OWNER && obj.OwnerID == landData.ownerID)
|
||||||
}
|
{
|
||||||
|
resultLocalIDs.Add(obj.LocalId);
|
||||||
|
}
|
||||||
// else if (request_type == LandManager.LAND_SELECT_OBJECTS_GROUP && ...) // TODO: group support
|
// else if (request_type == LandManager.LAND_SELECT_OBJECTS_GROUP && ...) // TODO: group support
|
||||||
// {
|
// {
|
||||||
// }
|
// }
|
||||||
else if (request_type == LandChannel.LAND_SELECT_OBJECTS_OTHER &&
|
else if (request_type == LandChannel.LAND_SELECT_OBJECTS_OTHER &&
|
||||||
obj.OwnerID != remote_client.AgentId)
|
obj.OwnerID != remote_client.AgentId)
|
||||||
{
|
{
|
||||||
resultLocalIDs.Add(obj.LocalId);
|
resultLocalIDs.Add(obj.LocalId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
remote_client.sendForceClientSelectObjects(resultLocalIDs);
|
remote_client.sendForceClientSelectObjects(resultLocalIDs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -620,32 +629,35 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
/// </param>
|
/// </param>
|
||||||
public void sendLandObjectOwners(IClientAPI remote_client)
|
public void sendLandObjectOwners(IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
Dictionary<LLUUID, int> primCount = new Dictionary<LLUUID, int>();
|
if (m_scene.ExternalChecks.ExternalChecksCanEditParcel(remote_client.AgentId, this))
|
||||||
|
|
||||||
foreach (SceneObjectGroup obj in primsOverMe)
|
|
||||||
{
|
{
|
||||||
try
|
Dictionary<LLUUID, int> primCount = new Dictionary<LLUUID, int>();
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup obj in primsOverMe)
|
||||||
{
|
{
|
||||||
if (!primCount.ContainsKey(obj.OwnerID))
|
try
|
||||||
{
|
{
|
||||||
primCount.Add(obj.OwnerID, 0);
|
if (!primCount.ContainsKey(obj.OwnerID))
|
||||||
|
{
|
||||||
|
primCount.Add(obj.OwnerID, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (NullReferenceException)
|
||||||
|
{
|
||||||
|
m_log.Info("[LAND]: " + "Got Null Reference when searching land owners from the parcel panel");
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
primCount[obj.OwnerID] += obj.PrimCount;
|
||||||
|
}
|
||||||
|
catch (KeyNotFoundException)
|
||||||
|
{
|
||||||
|
m_log.Error("[LAND]: Unable to match a prim with it's owner.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (NullReferenceException)
|
|
||||||
{
|
|
||||||
m_log.Info("[LAND]: " + "Got Null Reference when searching land owners from the parcel panel");
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
primCount[obj.OwnerID] += obj.PrimCount;
|
|
||||||
}
|
|
||||||
catch (KeyNotFoundException)
|
|
||||||
{
|
|
||||||
m_log.Error("[LAND]: Unable to match a prim with it's owner.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
remote_client.sendLandObjectOwners(primCount);
|
remote_client.sendLandObjectOwners(primCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<LLUUID, int> getLandObjectOwners()
|
public Dictionary<LLUUID, int> getLandObjectOwners()
|
||||||
|
|
|
@ -216,7 +216,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
|
||||||
public event ParcelDivideRequest OnParcelDivideRequest;
|
public event ParcelDivideRequest OnParcelDivideRequest;
|
||||||
public event ParcelJoinRequest OnParcelJoinRequest;
|
public event ParcelJoinRequest OnParcelJoinRequest;
|
||||||
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
||||||
|
public event ParcelAbandonRequest OnParcelAbandonRequest;
|
||||||
public event ParcelAccessListRequest OnParcelAccessListRequest;
|
public event ParcelAccessListRequest OnParcelAccessListRequest;
|
||||||
public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;
|
public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;
|
||||||
public event ParcelSelectObjects OnParcelSelectObjects;
|
public event ParcelSelectObjects OnParcelSelectObjects;
|
||||||
|
|
|
@ -27,16 +27,23 @@
|
||||||
|
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using OpenSim.Region.Environment.Interfaces;
|
using OpenSim.Region.Environment.Interfaces;
|
||||||
|
using OpenSim.Region.Environment.Modules.Framework;
|
||||||
|
using OpenSim.Region.Environment.Modules.Framework.InterfaceCommander;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Modules.World.Permissions
|
namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
{
|
{
|
||||||
public class PermissionsModule : IRegionModule, IScenePermissions
|
public class PermissionsModule : IRegionModule, IScenePermissions, ICommandableModule
|
||||||
{
|
{
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
|
private readonly Commander m_commander = new Commander("Permissions");
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
#region Constants
|
||||||
// These are here for testing. They will be taken out
|
// These are here for testing. They will be taken out
|
||||||
|
|
||||||
//private uint PERM_ALL = (uint)2147483647;
|
//private uint PERM_ALL = (uint)2147483647;
|
||||||
|
@ -45,16 +52,89 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
private uint PERM_MOVE = (uint)524288;
|
private uint PERM_MOVE = (uint)524288;
|
||||||
//private uint PERM_TRANS = (uint)8192;
|
//private uint PERM_TRANS = (uint)8192;
|
||||||
private uint PERM_LOCKED = (uint)540672;
|
private uint PERM_LOCKED = (uint)540672;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Bypass Permissions / Debug Permissions Stuff
|
||||||
|
|
||||||
// Bypasses the permissions engine
|
// Bypasses the permissions engine
|
||||||
private bool m_bypassPermissions = false;
|
private bool m_bypassPermissions = false;
|
||||||
|
private bool m_bypassPermissionsValue = true;
|
||||||
|
private bool m_debugPermissions = false;
|
||||||
public bool BypassPermissions
|
public bool BypassPermissions
|
||||||
{
|
{
|
||||||
get { return m_bypassPermissions; }
|
get { return m_bypassPermissions; }
|
||||||
set { m_bypassPermissions = value; }
|
set { m_bypassPermissions = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool BypassPermissionsValue
|
||||||
|
{
|
||||||
|
get { return m_bypassPermissionsValue; }
|
||||||
|
set { m_bypassPermissionsValue = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DebugPermissions
|
||||||
|
{
|
||||||
|
get { return m_debugPermissions; }
|
||||||
|
set { m_debugPermissions = value; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ICommandableModule Members
|
||||||
|
|
||||||
|
public ICommander CommandInterface
|
||||||
|
{
|
||||||
|
get { throw new System.NotImplementedException(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void InterfaceDebugPermissions(Object[] args)
|
||||||
|
{
|
||||||
|
if ((bool)args[0] == true)
|
||||||
|
{
|
||||||
|
m_debugPermissions = true;
|
||||||
|
m_log.Info("[PERMISSIONS]: Permissions Debugging Enabled.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_debugPermissions = false;
|
||||||
|
m_log.Info("[PERMISSIONS]: Permissions Debugging Disabled.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InterfaceBypassPermissions(Object[] args)
|
||||||
|
{
|
||||||
|
if ((bool)args[0] == true)
|
||||||
|
{
|
||||||
|
m_log.Info("[PERMISSIONS]: Permissions Bypass Enabled.");
|
||||||
|
m_bypassPermissionsValue = (bool)args[1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_bypassPermissions = false;
|
||||||
|
m_log.Info("[PERMISSIONS]: Permissions Bypass Disabled. Normal Operation.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processes commandline input. Do not call directly.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args">Commandline arguments</param>
|
||||||
|
private void EventManager_OnPluginConsole(string[] args)
|
||||||
|
{
|
||||||
|
if (args[0] == "permissions")
|
||||||
|
{
|
||||||
|
string[] tmpArgs = new string[args.Length - 2];
|
||||||
|
int i;
|
||||||
|
for (i = 2; i < args.Length; i++)
|
||||||
|
tmpArgs[i - 2] = args[i];
|
||||||
|
|
||||||
|
m_commander.ProcessConsoleCommand(args[1], tmpArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -67,29 +147,52 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
|
|
||||||
m_scene.RegisterModuleInterface<IScenePermissions>(this);
|
m_scene.RegisterModuleInterface<IScenePermissions>(this);
|
||||||
|
|
||||||
//Register External Permission Checks!
|
//Register functions with Scene External Checks!
|
||||||
m_scene.ExternalChecks.addCheckAbandonParcel(this.CanAbandonParcel);
|
m_scene.ExternalChecks.addCheckAbandonParcel(CanAbandonParcel); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckCopyObject(this.CanCopyObject);
|
m_scene.ExternalChecks.addCheckBeGodLike(CanBeGodLike); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckDeRezObject(this.CanDeRezObject);
|
m_scene.ExternalChecks.addCheckDuplicateObject(CanDuplicateObject); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckEditEstateTerrain(this.CanEditEstateTerrain);
|
m_scene.ExternalChecks.addCheckDeleteObject(CanDeleteObject); //MAYBE FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckEditObject(this.CanEditObject);
|
m_scene.ExternalChecks.addCheckEditObject(CanEditObject);//MAYBE FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckEditParcel(this.CanEditParcel);
|
m_scene.ExternalChecks.addCheckEditParcel(CanEditParcel); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckEditScript(this.CanEditScript);
|
m_scene.ExternalChecks.addCheckEditScript(CanEditScript); //NOT YET IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckInstantMessage(this.CanInstantMessage);
|
m_scene.ExternalChecks.addCheckInstantMessage(CanInstantMessage); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckInventoryTransfer(this.CanInventoryTransfer);
|
m_scene.ExternalChecks.addCheckInventoryTransfer(CanInventoryTransfer); //NOT YET IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckMoveObject(this.CanEditObjectPosition);
|
m_scene.ExternalChecks.addCheckIssueEstateCommand(CanIssueEstateCommand); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckRestartSim(this.CanRestartSim);
|
m_scene.ExternalChecks.addCheckMoveObject(CanMoveObject); //HOPEFULLY FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckReturnObject(this.CanReturnObject);
|
m_scene.ExternalChecks.addCheckObjectEntry(CanObjectEntry); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckRezObject(this.CanRezObject);
|
m_scene.ExternalChecks.addCheckReturnObject(CanReturnObject); //NOT YET IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckBeGodLike(this.CanBeGodLike);
|
m_scene.ExternalChecks.addCheckRezObject(CanRezObject); //HOPEFULLY FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckRunConsoleCommand(this.CanRunConsoleCommand);
|
m_scene.ExternalChecks.addCheckRunConsoleCommand(CanRunConsoleCommand); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckRunScript(this.CanRunScript);
|
m_scene.ExternalChecks.addCheckRunScript(CanRunScript); //NOT YET IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckSellParcel(this.CanSellParcel);
|
m_scene.ExternalChecks.addCheckSellParcel(CanSellParcel); //FULLY IMPLEMENTED
|
||||||
//m_scene.ExternalChecks.addCheckTakeObject; -- NOT YET IMPLEMENTED
|
m_scene.ExternalChecks.addCheckTakeObject(CanTakeObject); //FULLY IMPLEMENTED
|
||||||
m_scene.ExternalChecks.addCheckTerraformLandCommand(this.CanTerraform);
|
m_scene.ExternalChecks.addCheckTakeCopyObject(CanTakeCopyObject); //FULLY IMPLEMENTED
|
||||||
|
m_scene.ExternalChecks.addCheckTerraformLand(CanTerraformLand); //FULL IMPLEMENTED (POINT ONLY!!! NOT AREA!!!)
|
||||||
|
m_scene.ExternalChecks.addCheckViewScript(CanViewScript); //NOT YET IMPLEMENTED
|
||||||
|
|
||||||
|
//NEEDED PERMS:
|
||||||
|
//CanLinkObject
|
||||||
|
//CanDelinkObject
|
||||||
|
//CanBuyLand
|
||||||
|
|
||||||
|
|
||||||
|
//Register Debug Commands
|
||||||
|
Command bypassCommand = new Command("bypass", InterfaceBypassPermissions, "Force the permissions a specific way to test permissions");
|
||||||
|
bypassCommand.AddArgument("enable_bypass_perms", "true to enable bypassing all perms", "Boolean");
|
||||||
|
bypassCommand.AddArgument("bypass_perms_value", "true/false: true will ignore all perms; false will restrict everything", "Boolean");
|
||||||
|
|
||||||
|
m_commander.RegisterCommand("bypass", bypassCommand);
|
||||||
|
|
||||||
|
Command debugCommand = new Command("debug", InterfaceDebugPermissions, "Force the permissions a specific way to test permissions");
|
||||||
|
debugCommand.AddArgument("enable_debug_perms", "true to enable debugging to console all perms", "Boolean");
|
||||||
|
|
||||||
|
m_commander.RegisterCommand("debug", debugCommand);
|
||||||
|
m_scene.RegisterModuleCommander("CommanderPermissions", m_commander);
|
||||||
|
|
||||||
|
m_scene.EventManager.OnPluginConsole += new EventManager.OnPluginConsoleDelegate(EventManager_OnPluginConsole);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -110,18 +213,19 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Helper Functions
|
||||||
protected void SendPermissionError(LLUUID user, string reason)
|
protected void SendPermissionError(LLUUID user, string reason)
|
||||||
{
|
{
|
||||||
m_scene.EventManager.TriggerPermissionError(user, reason);
|
m_scene.EventManager.TriggerPermissionError(user, reason);
|
||||||
}
|
}
|
||||||
|
protected void DebugPermissionInformation(string permissionCalled)
|
||||||
|
{
|
||||||
|
if(m_debugPermissions)
|
||||||
|
m_log.Info("[PERMISSIONS]: " + permissionCalled + " was called from " + m_scene.RegionInfo.RegionName);
|
||||||
|
}
|
||||||
|
|
||||||
protected bool IsAdministrator(LLUUID user)
|
protected bool IsAdministrator(LLUUID user)
|
||||||
{
|
{
|
||||||
if (m_bypassPermissions)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there is no master avatar, return false
|
// If there is no master avatar, return false
|
||||||
if (m_scene.RegionInfo.MasterAvatarAssignedUUID != LLUUID.Zero)
|
if (m_scene.RegionInfo.MasterAvatarAssignedUUID != LLUUID.Zero)
|
||||||
{
|
{
|
||||||
|
@ -133,117 +237,19 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
|
|
||||||
protected bool IsEstateManager(LLUUID user)
|
protected bool IsEstateManager(LLUUID user)
|
||||||
{
|
{
|
||||||
if (m_bypassPermissions)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (user != LLUUID.Zero)
|
if (user != LLUUID.Zero)
|
||||||
{
|
{
|
||||||
LLUUID[] estatemanagers = m_scene.RegionInfo.EstateSettings.estateManagers;
|
LLUUID[] estatemanagers = m_scene.RegionInfo.EstateSettings.estateManagers;
|
||||||
for (int i = 0; i < estatemanagers.Length; i++)
|
foreach(LLUUID estatemanager in estatemanagers)
|
||||||
{
|
{
|
||||||
if (estatemanagers[i] == user)
|
if (estatemanager == user)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
protected bool IsGridUser(LLUUID user)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool IsGuest(LLUUID user)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanRezObject(int objectCount, LLUUID user, LLVector3 position,Scene scene)
|
|
||||||
{
|
|
||||||
bool permission = false;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
string reason = "Insufficient permission";
|
|
||||||
|
|
||||||
ILandObject land = m_scene.LandChannel.GetLandObject(position.X, position.Y);
|
|
||||||
if (land == null) return false;
|
|
||||||
|
|
||||||
if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.CreateObjects)) ==
|
|
||||||
(int)Parcel.ParcelFlags.CreateObjects)
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
//TODO: check for group rights
|
|
||||||
|
|
||||||
if (IsAdministrator(user))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reason = "Not an administrator";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GenericParcelPermission(user, position))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reason = "Not the parcel owner";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!permission)
|
|
||||||
SendPermissionError(user, reason);
|
|
||||||
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <see cref="Opensim.Region.Environment.Interfaces.IScenePermissions></see>
|
|
||||||
public bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
|
||||||
{
|
|
||||||
if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ILandObject land1 = m_scene.LandChannel.GetLandObject(oldPos.X, oldPos.Y);
|
|
||||||
ILandObject land2 = m_scene.LandChannel.GetLandObject(newPos.X, newPos.Y);
|
|
||||||
|
|
||||||
if (land1 == null || land2 == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (land2 == null)
|
|
||||||
{
|
|
||||||
// need this for crossing borders
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (land1.landData.globalID == land2.landData.globalID)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((land2.landData.landFlags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: check for group rights
|
|
||||||
|
|
||||||
if (GenericParcelPermission(user, newPos))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
SendPermissionError(user, "Not allowed to move objects in this parcel!");
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Object Permissions
|
#region Object Permissions
|
||||||
|
|
||||||
|
@ -427,143 +433,16 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <see cref="Opensim.Region.Environment.Interfaces.IScenePermissions></see>
|
|
||||||
public bool CanDeRezObject(LLUUID obj,LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanEditObject(LLUUID obj, LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanEditObjectPosition(LLUUID obj, LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
bool permission = GenericObjectPermission(user, obj);
|
|
||||||
if (!permission)
|
|
||||||
{
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The client
|
|
||||||
// may request to edit linked parts, and therefore, it needs
|
|
||||||
// to also check for SceneObjectPart
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[obj];
|
|
||||||
|
|
||||||
|
|
||||||
LLUUID taskOwner = null;
|
|
||||||
// Added this because at this point in time it wouldn't be wise for
|
|
||||||
// the administrator object permissions to take effect.
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
|
|
||||||
// Anyone can move
|
|
||||||
if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
// Locked
|
|
||||||
if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
|
|
||||||
permission = false;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool locked = false;
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[obj];
|
|
||||||
|
|
||||||
LLUUID objectOwner = group.OwnerID;
|
|
||||||
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
|
||||||
|
|
||||||
|
|
||||||
// This is an exception to the generic object permission.
|
|
||||||
// Administrators who lock their objects should not be able to move them,
|
|
||||||
// however generic object permission should return true.
|
|
||||||
// This keeps locked objects from being affected by random click + drag actions by accident
|
|
||||||
// and allows the administrator to grab or delete a locked object.
|
|
||||||
|
|
||||||
// Administrators and estate managers are still able to click+grab locked objects not
|
|
||||||
// owned by them in the scene
|
|
||||||
// This is by design.
|
|
||||||
|
|
||||||
if (locked && (user == objectOwner))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanCopyObject(int objectCount, LLUUID obj, LLUUID user, Scene scene, LLVector3 objectPosition)
|
|
||||||
{
|
|
||||||
bool permission = GenericObjectPermission(user, obj);
|
|
||||||
if (permission)
|
|
||||||
{
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if (!(m_scene.Entities[obj] is SceneObjectGroup))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[obj];
|
|
||||||
LLUUID taskOwner = null;
|
|
||||||
// Added this because at this point in time it wouldn't be wise for
|
|
||||||
// the administrator object permissions to take effect.
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
|
|
||||||
|
|
||||||
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanReturnObject(LLUUID obj, LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Communication Permissions
|
#region Generic Permissions
|
||||||
|
|
||||||
protected bool GenericCommunicationPermission(LLUUID user, LLUUID target)
|
protected bool GenericCommunicationPermission(LLUUID user, LLUUID target)
|
||||||
{
|
{
|
||||||
bool permission = false;
|
bool permission = false;
|
||||||
string reason = "Only registered users may communicate with another account.";
|
string reason = "Only registered users may communicate with another account.";
|
||||||
|
|
||||||
if (IsGridUser(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (!IsGridUser(user))
|
|
||||||
{
|
|
||||||
permission = false;
|
|
||||||
reason = "The person that you are messaging is not a registered user.";
|
|
||||||
}
|
|
||||||
if (IsAdministrator(user))
|
if (IsAdministrator(user))
|
||||||
permission = true;
|
permission = true;
|
||||||
|
|
||||||
|
@ -576,66 +455,6 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanInstantMessage(LLUUID user, LLUUID target, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericCommunicationPermission(user, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericCommunicationPermission(user, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public bool CanEditScript(LLUUID script, LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return IsAdministrator(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanRunScript(LLUUID script, LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return IsAdministrator(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanRunConsoleCommand(LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return IsAdministrator(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanTerraform(LLUUID user, LLVector3 position, Scene scene)
|
|
||||||
{
|
|
||||||
bool permission = false;
|
|
||||||
|
|
||||||
// Estate override
|
|
||||||
if (GenericEstatePermission(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
float X = position.X;
|
|
||||||
float Y = position.Y;
|
|
||||||
|
|
||||||
if (X > 255)
|
|
||||||
X = 255;
|
|
||||||
if (Y > 255)
|
|
||||||
Y = 255;
|
|
||||||
if (X < 0)
|
|
||||||
X = 0;
|
|
||||||
if (Y < 0)
|
|
||||||
Y = 0;
|
|
||||||
|
|
||||||
// Land owner can terraform too
|
|
||||||
ILandObject parcel = m_scene.LandChannel.GetLandObject(X, Y);
|
|
||||||
if (parcel != null && GenericParcelPermission(user, parcel))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (!permission)
|
|
||||||
SendPermissionError(user, "Not authorized to terraform at this location.");
|
|
||||||
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Estate Permissions
|
|
||||||
|
|
||||||
public bool GenericEstatePermission(LLUUID user)
|
public bool GenericEstatePermission(LLUUID user)
|
||||||
{
|
{
|
||||||
// Default: deny
|
// Default: deny
|
||||||
|
@ -652,28 +471,6 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanEditEstateTerrain(LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericEstatePermission(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanRestartSim(LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
// Since this is potentially going on a grid...
|
|
||||||
|
|
||||||
return GenericEstatePermission(user);
|
|
||||||
//return m_scene.RegionInfo.MasterAvatarAssignedUUID == user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanBeGodLike(LLUUID user, Scene scene)
|
|
||||||
{
|
|
||||||
return GenericEstatePermission(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Parcel Permissions
|
|
||||||
|
|
||||||
protected bool GenericParcelPermission(LLUUID user, ILandObject parcel)
|
protected bool GenericParcelPermission(LLUUID user, ILandObject parcel)
|
||||||
{
|
{
|
||||||
bool permission = false;
|
bool permission = false;
|
||||||
|
@ -707,22 +504,365 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
||||||
if (parcel == null) return false;
|
if (parcel == null) return false;
|
||||||
return GenericParcelPermission(user, parcel);
|
return GenericParcelPermission(user, parcel);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Permission Checks
|
||||||
|
private bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
public bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene)
|
return GenericParcelPermission(user, parcel);
|
||||||
{
|
}
|
||||||
return GenericParcelPermission(user, parcel);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene)
|
private bool CanBeGodLike(LLUUID user, Scene scene)
|
||||||
{
|
{
|
||||||
return GenericParcelPermission(user, parcel);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
}
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
public bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene)
|
return IsAdministrator(user);
|
||||||
{
|
}
|
||||||
return GenericParcelPermission(user, parcel);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private bool CanDuplicateObject(int objectCount, LLUUID objectID, LLUUID owner, Scene scene, LLVector3 objectPosition)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
if (!GenericObjectPermission(owner, objectID))
|
||||||
|
{
|
||||||
|
//They can't even edit the object
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//If they can rez, they can duplicate
|
||||||
|
return CanRezObject(objectCount, owner, objectPosition, scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanDeleteObject(LLUUID objectID, LLUUID deleter, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericObjectPermission(objectID, deleter);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanEditObject(LLUUID objectID, LLUUID editorID, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
|
||||||
|
return GenericObjectPermission(editorID, objectID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericParcelPermission(user, parcel);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanEditScript(LLUUID script, LLUUID user, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
|
||||||
|
return GenericCommunicationPermission(user, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanInventoryTransfer(LLUUID user, LLUUID target, Scene startScene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericCommunicationPermission(user, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericEstatePermission(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanMoveObject(LLUUID objectID, LLUUID moverID, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
bool permission = GenericObjectPermission(moverID, objectID);
|
||||||
|
if (!permission)
|
||||||
|
{
|
||||||
|
if (!m_scene.Entities.ContainsKey(objectID))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The client
|
||||||
|
// may request to edit linked parts, and therefore, it needs
|
||||||
|
// to also check for SceneObjectPart
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[objectID] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID];
|
||||||
|
|
||||||
|
|
||||||
|
LLUUID taskOwner = null;
|
||||||
|
// Added this because at this point in time it wouldn't be wise for
|
||||||
|
// the administrator object permissions to take effect.
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
|
||||||
|
// Anyone can move
|
||||||
|
if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
// Locked
|
||||||
|
if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
|
||||||
|
permission = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool locked = false;
|
||||||
|
if (!m_scene.Entities.ContainsKey(objectID))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[objectID] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objectID];
|
||||||
|
|
||||||
|
LLUUID objectOwner = group.OwnerID;
|
||||||
|
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
||||||
|
|
||||||
|
|
||||||
|
// This is an exception to the generic object permission.
|
||||||
|
// Administrators who lock their objects should not be able to move them,
|
||||||
|
// however generic object permission should return true.
|
||||||
|
// This keeps locked objects from being affected by random click + drag actions by accident
|
||||||
|
// and allows the administrator to grab or delete a locked object.
|
||||||
|
|
||||||
|
// Administrators and estate managers are still able to click+grab locked objects not
|
||||||
|
// owned by them in the scene
|
||||||
|
// This is by design.
|
||||||
|
|
||||||
|
if (locked && (moverID == objectOwner))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanObjectEntry(LLUUID objectID, LLVector3 newPoint, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
if ((newPoint.X > 257f || newPoint.X < -1f || newPoint.Y > 257f || newPoint.Y < -1f))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ILandObject land = m_scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y);
|
||||||
|
|
||||||
|
if (land == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: check for group rights
|
||||||
|
|
||||||
|
if (!m_scene.Entities.ContainsKey(objectID))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if (!(m_scene.Entities[objectID] is SceneObjectGroup))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID];
|
||||||
|
|
||||||
|
if (GenericParcelPermission(task.OwnerID, newPoint))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Otherwise, false!
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanReturnObject(LLUUID objectID, LLUUID returnerID, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericObjectPermission(returnerID, objectID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
bool permission = false;
|
||||||
|
|
||||||
|
ILandObject land = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y);
|
||||||
|
if (land == null) return false;
|
||||||
|
|
||||||
|
if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.CreateObjects)) ==
|
||||||
|
(int)Parcel.ParcelFlags.CreateObjects)
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
//TODO: check for group rights
|
||||||
|
|
||||||
|
if (IsAdministrator(owner))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GenericParcelPermission(owner, objectPosition))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanRunConsoleCommand(LLUUID user, Scene requestFromScene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
|
||||||
|
return IsAdministrator(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanRunScript(LLUUID script, LLUUID user, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericParcelPermission(user, parcel);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanTakeObject(LLUUID objectID, LLUUID stealer, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return GenericObjectPermission(stealer,objectID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanTakeCopyObject(LLUUID objectID, LLUUID userID, Scene inScene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
bool permission = GenericObjectPermission(userID, objectID);
|
||||||
|
if (permission)
|
||||||
|
{
|
||||||
|
if (!m_scene.Entities.ContainsKey(objectID))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if (!(m_scene.Entities[objectID] is SceneObjectGroup))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID];
|
||||||
|
LLUUID taskOwner = null;
|
||||||
|
// Added this because at this point in time it wouldn't be wise for
|
||||||
|
// the administrator object permissions to take effect.
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
|
||||||
|
|
||||||
|
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanTerraformLand(LLUUID user, LLVector3 position, Scene requestFromScene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
bool permission = false;
|
||||||
|
|
||||||
|
// Estate override
|
||||||
|
if (GenericEstatePermission(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
float X = position.X;
|
||||||
|
float Y = position.Y;
|
||||||
|
|
||||||
|
if (X > 255)
|
||||||
|
X = 255;
|
||||||
|
if (Y > 255)
|
||||||
|
Y = 255;
|
||||||
|
if (X < 0)
|
||||||
|
X = 0;
|
||||||
|
if (Y < 0)
|
||||||
|
Y = 0;
|
||||||
|
|
||||||
|
// Land owner can terraform too
|
||||||
|
ILandObject parcel = m_scene.LandChannel.GetLandObject(X, Y);
|
||||||
|
if (parcel != null && GenericParcelPermission(user, parcel))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanViewScript(LLUUID script, LLUUID user, Scene scene)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,8 +288,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup)obj).LocalId == localID)
|
if (((SceneObjectGroup)obj).LocalId == localID)
|
||||||
{
|
{
|
||||||
m_parentScene.RemoveEntity((SceneObjectGroup)obj);
|
if (m_parentScene.ExternalChecks.ExternalChecksCanDeleteObject(((SceneObjectGroup)obj).UUID, avatar_deleter))
|
||||||
m_numPrim--;
|
{
|
||||||
|
m_parentScene.RemoveEntity((SceneObjectGroup)obj);
|
||||||
|
m_numPrim--;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -998,12 +1001,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
LLVector3 oldPos = group.AbsolutePosition;
|
LLVector3 oldPos = group.AbsolutePosition;
|
||||||
//FIXME: ObjectEntry is not in ExternalChecks!
|
if (!m_parentScene.ExternalChecks.ExternalChecksCanObjectEntry(group.UUID,pos) && !group.RootPart.m_IsAttachment)
|
||||||
//if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
|
{
|
||||||
//{
|
|
||||||
group.SendGroupTerseUpdate();
|
group.SendGroupTerseUpdate();
|
||||||
//return;
|
return;
|
||||||
//}
|
}
|
||||||
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment)
|
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment)
|
||||||
{
|
{
|
||||||
group.UpdateSinglePosition(pos, localID);
|
group.UpdateSinglePosition(pos, localID);
|
||||||
|
@ -1030,12 +1032,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//FIXME: ObjectEntry not in ExternalChecks!
|
if (!m_parentScene.ExternalChecks.ExternalChecksCanObjectEntry(group.UUID,pos) && !group.RootPart.m_IsAttachment)
|
||||||
//if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
|
{
|
||||||
//{
|
|
||||||
group.SendGroupTerseUpdate();
|
group.SendGroupTerseUpdate();
|
||||||
// return;
|
return;
|
||||||
//}
|
}
|
||||||
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
|
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
|
||||||
{
|
{
|
||||||
group.UpdateGroupPosition(pos);
|
group.UpdateGroupPosition(pos);
|
||||||
|
@ -1055,7 +1056,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectGroup group = GetGroupByPrim(localID);
|
SceneObjectGroup group = GetGroupByPrim(localID);
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID,remoteClient.AgentId))
|
if (m_parentScene.ExternalChecks.ExternalChecksCanEditObject(group.UUID,remoteClient.AgentId))
|
||||||
{
|
{
|
||||||
group.UpdateTextureEntry(localID, texture);
|
group.UpdateTextureEntry(localID, texture);
|
||||||
}
|
}
|
||||||
|
@ -1378,7 +1379,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (originPrim != null)
|
if (originPrim != null)
|
||||||
{
|
{
|
||||||
if (m_parentScene.ExternalChecks.ExternalChecksCanCopyObject(originPrim.Children.Count, originPrim.UUID, AgentID, originPrim.AbsolutePosition))
|
if (m_parentScene.ExternalChecks.ExternalChecksCanDuplicateObject(originPrim.Children.Count, originPrim.UUID, AgentID, originPrim.AbsolutePosition))
|
||||||
{
|
{
|
||||||
SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID);
|
SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID);
|
||||||
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
||||||
|
|
|
@ -988,17 +988,28 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
if (selectedEnt != null)
|
if (selectedEnt != null)
|
||||||
{
|
{
|
||||||
bool permission;
|
bool permissionToTake = false;
|
||||||
if (DeRezPacket.AgentBlock.Destination == 1)
|
bool permissionToDelete = false;
|
||||||
{ // Take Copy
|
if (DeRezPacket.AgentBlock.Destination == 1)// Take Copy
|
||||||
permission = ExternalChecks.ExternalChecksCanTakeObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
|
{
|
||||||
|
permissionToTake = ExternalChecks.ExternalChecksCanTakeCopyObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
|
||||||
|
permissionToDelete = false; //Just taking copy!
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else if(DeRezPacket.AgentBlock.Destination == 4) //Take
|
||||||
{ // Take
|
{
|
||||||
permission = ExternalChecks.ExternalChecksCanTakeObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
|
// Take
|
||||||
|
permissionToTake = ExternalChecks.ExternalChecksCanTakeObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
|
||||||
|
permissionToDelete = permissionToTake; //If they can take, they can delete!
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permission)
|
else if (DeRezPacket.AgentBlock.Destination == 6) //Delete
|
||||||
|
{
|
||||||
|
permissionToTake = false;
|
||||||
|
permissionToDelete = ExternalChecks.ExternalChecksCanDeleteObject(((SceneObjectGroup)selectedEnt).UUID, remoteClient.AgentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (permissionToTake)
|
||||||
{
|
{
|
||||||
SceneObjectGroup objectGroup = (SceneObjectGroup) selectedEnt;
|
SceneObjectGroup objectGroup = (SceneObjectGroup) selectedEnt;
|
||||||
string sceneObjectXml = objectGroup.ToXmlString();
|
string sceneObjectXml = objectGroup.ToXmlString();
|
||||||
|
@ -1044,8 +1055,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
remoteClient.SendInventoryItemCreateUpdate(item);
|
remoteClient.SendInventoryItemCreateUpdate(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Nasty hardcoding. If Destination is 1 then client wants us to take a copy
|
if (permissionToDelete)
|
||||||
if (DeRezPacket.AgentBlock.Destination != 1)
|
|
||||||
{
|
{
|
||||||
DeleteSceneObjectGroup(objectGroup);
|
DeleteSceneObjectGroup(objectGroup);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1146,13 +1146,20 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_log.Info("[SCENE]: Loading land objects from storage");
|
m_log.Info("[SCENE]: Loading land objects from storage");
|
||||||
List<LandData> landData = m_storageManager.DataStore.LoadLandObjects(regionID);
|
List<LandData> landData = m_storageManager.DataStore.LoadLandObjects(regionID);
|
||||||
|
|
||||||
if (landData.Count == 0)
|
if (LandChannel != null)
|
||||||
{
|
{
|
||||||
LandChannel.NoLandDataFromStorage();
|
if (landData.Count == 0)
|
||||||
|
{
|
||||||
|
LandChannel.NoLandDataFromStorage();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LandChannel.IncomingLandObjectsFromStorage(landData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LandChannel.IncomingLandObjectsFromStorage(landData);
|
m_log.Error("[SCENE]: Land Channel is not defined. Cannot load from storage!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,24 +74,24 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region DEREZ OBJECT
|
#region DELETE OBJECT
|
||||||
public delegate bool CanDeRezObject(LLUUID objectID, LLUUID deleter, Scene scene);
|
public delegate bool CanDeleteObject(LLUUID objectID, LLUUID deleter, Scene scene);
|
||||||
private List<CanDeRezObject> CanDeRezObjectCheckFunctions = new List<CanDeRezObject>();
|
private List<CanDeleteObject> CanDeleteObjectCheckFunctions = new List<CanDeleteObject>();
|
||||||
|
|
||||||
public void addCheckDeRezObject(CanDeRezObject delegateFunc)
|
public void addCheckDeleteObject(CanDeleteObject delegateFunc)
|
||||||
{
|
{
|
||||||
if (!CanDeRezObjectCheckFunctions.Contains(delegateFunc))
|
if (!CanDeleteObjectCheckFunctions.Contains(delegateFunc))
|
||||||
CanDeRezObjectCheckFunctions.Add(delegateFunc);
|
CanDeleteObjectCheckFunctions.Add(delegateFunc);
|
||||||
}
|
}
|
||||||
public void removeCheckDeRezObject(CanDeRezObject delegateFunc)
|
public void removeCheckDeleteObject(CanDeleteObject delegateFunc)
|
||||||
{
|
{
|
||||||
if (CanDeRezObjectCheckFunctions.Contains(delegateFunc))
|
if (CanDeleteObjectCheckFunctions.Contains(delegateFunc))
|
||||||
CanDeRezObjectCheckFunctions.Remove(delegateFunc);
|
CanDeleteObjectCheckFunctions.Remove(delegateFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ExternalChecksCanDeRezObject(LLUUID objectID, LLUUID deleter)
|
public bool ExternalChecksCanDeleteObject(LLUUID objectID, LLUUID deleter)
|
||||||
{
|
{
|
||||||
foreach (CanDeRezObject check in CanDeRezObjectCheckFunctions)
|
foreach (CanDeleteObject check in CanDeleteObjectCheckFunctions)
|
||||||
{
|
{
|
||||||
if (check(objectID,deleter,m_scene) == false)
|
if (check(objectID,deleter,m_scene) == false)
|
||||||
{
|
{
|
||||||
|
@ -132,24 +132,53 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region COPY OBJECT
|
#region TAKE COPY OBJECT
|
||||||
public delegate bool CanCopyObject(int objectCount, LLUUID objectID, LLUUID owner, Scene scene, LLVector3 objectPosition);
|
public delegate bool CanTakeCopyObject(LLUUID objectID, LLUUID userID, Scene inScene);
|
||||||
private List<CanCopyObject> CanCopyObjectCheckFunctions = new List<CanCopyObject>();
|
private List<CanTakeCopyObject> CanTakeCopyObjectCheckFunctions = new List<CanTakeCopyObject>();
|
||||||
|
|
||||||
public void addCheckCopyObject(CanCopyObject delegateFunc)
|
public void addCheckTakeCopyObject(CanTakeCopyObject delegateFunc)
|
||||||
{
|
{
|
||||||
if (!CanCopyObjectCheckFunctions.Contains(delegateFunc))
|
if (!CanTakeCopyObjectCheckFunctions.Contains(delegateFunc))
|
||||||
CanCopyObjectCheckFunctions.Add(delegateFunc);
|
CanTakeCopyObjectCheckFunctions.Add(delegateFunc);
|
||||||
}
|
}
|
||||||
public void removeCheckCopyObject(CanCopyObject delegateFunc)
|
public void removeCheckTakeCopyObject(CanTakeCopyObject delegateFunc)
|
||||||
{
|
{
|
||||||
if (CanCopyObjectCheckFunctions.Contains(delegateFunc))
|
if (CanTakeCopyObjectCheckFunctions.Contains(delegateFunc))
|
||||||
CanCopyObjectCheckFunctions.Remove(delegateFunc);
|
CanTakeCopyObjectCheckFunctions.Remove(delegateFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ExternalChecksCanCopyObject(int objectCount, LLUUID objectID, LLUUID owner, LLVector3 objectPosition)
|
public bool ExternalChecksCanTakeCopyObject(LLUUID objectID, LLUUID userID)
|
||||||
{
|
{
|
||||||
foreach (CanCopyObject check in CanCopyObjectCheckFunctions)
|
foreach (CanTakeCopyObject check in CanTakeCopyObjectCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(objectID,userID,m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region DUPLICATE OBJECT
|
||||||
|
public delegate bool CanDuplicateObject(int objectCount, LLUUID objectID, LLUUID owner, Scene scene, LLVector3 objectPosition);
|
||||||
|
private List<CanDuplicateObject> CanDuplicateObjectCheckFunctions = new List<CanDuplicateObject>();
|
||||||
|
|
||||||
|
public void addCheckDuplicateObject(CanDuplicateObject delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanDuplicateObjectCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanDuplicateObjectCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckDuplicateObject(CanDuplicateObject delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanDuplicateObjectCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanDuplicateObjectCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanDuplicateObject(int objectCount, LLUUID objectID, LLUUID owner, LLVector3 objectPosition)
|
||||||
|
{
|
||||||
|
foreach (CanDuplicateObject check in CanDuplicateObjectCheckFunctions)
|
||||||
{
|
{
|
||||||
if (check(objectCount, objectID, owner, m_scene, objectPosition) == false)
|
if (check(objectCount, objectID, owner, m_scene, objectPosition) == false)
|
||||||
{
|
{
|
||||||
|
@ -219,6 +248,35 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region OBJECT ENTRY
|
||||||
|
public delegate bool CanObjectEntry(LLUUID objectID, LLVector3 newPoint, Scene scene);
|
||||||
|
private List<CanObjectEntry> CanObjectEntryCheckFunctions = new List<CanObjectEntry>();
|
||||||
|
|
||||||
|
public void addCheckObjectEntry(CanObjectEntry delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanObjectEntryCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanObjectEntryCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckObjectEntry(CanObjectEntry delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanObjectEntryCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanObjectEntryCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanObjectEntry(LLUUID objectID, LLVector3 newPoint)
|
||||||
|
{
|
||||||
|
foreach (CanObjectEntry check in CanObjectEntryCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(objectID, newPoint, m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region RETURN OBJECT
|
#region RETURN OBJECT
|
||||||
public delegate bool CanReturnObject(LLUUID objectID, LLUUID returnerID, Scene scene);
|
public delegate bool CanReturnObject(LLUUID objectID, LLUUID returnerID, Scene scene);
|
||||||
private List<CanReturnObject> CanReturnObjectCheckFunctions = new List<CanReturnObject>();
|
private List<CanReturnObject> CanReturnObjectCheckFunctions = new List<CanReturnObject>();
|
||||||
|
@ -248,10 +306,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Misc Permission Checks
|
|
||||||
|
|
||||||
#region INSTANT MESSAGE
|
#region INSTANT MESSAGE
|
||||||
public delegate bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene);
|
public delegate bool CanInstantMessage(LLUUID user, LLUUID target, Scene startScene);
|
||||||
private List<CanInstantMessage> CanInstantMessageCheckFunctions = new List<CanInstantMessage>();
|
private List<CanInstantMessage> CanInstantMessageCheckFunctions = new List<CanInstantMessage>();
|
||||||
|
@ -271,7 +325,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
foreach (CanInstantMessage check in CanInstantMessageCheckFunctions)
|
foreach (CanInstantMessage check in CanInstantMessageCheckFunctions)
|
||||||
{
|
{
|
||||||
if (check(user,target,m_scene) == false)
|
if (check(user, target, m_scene) == false)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -310,6 +364,35 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region VIEW SCRIPT
|
||||||
|
public delegate bool CanViewScript(LLUUID script, LLUUID user, Scene scene);
|
||||||
|
private List<CanViewScript> CanViewScriptCheckFunctions = new List<CanViewScript>();
|
||||||
|
|
||||||
|
public void addCheckViewScript(CanViewScript delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanViewScriptCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanViewScriptCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckViewScript(CanViewScript delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanViewScriptCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanViewScriptCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanViewScript(LLUUID script, LLUUID user)
|
||||||
|
{
|
||||||
|
foreach (CanViewScript check in CanViewScriptCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(script, user, m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region EDIT SCRIPT
|
#region EDIT SCRIPT
|
||||||
public delegate bool CanEditScript(LLUUID script, LLUUID user, Scene scene);
|
public delegate bool CanEditScript(LLUUID script, LLUUID user, Scene scene);
|
||||||
private List<CanEditScript> CanEditScriptCheckFunctions = new List<CanEditScript>();
|
private List<CanEditScript> CanEditScriptCheckFunctions = new List<CanEditScript>();
|
||||||
|
@ -369,23 +452,23 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region TERRAFORM LAND
|
#region TERRAFORM LAND
|
||||||
public delegate bool CanTerraformLandCommand(LLUUID user, LLVector3 position, Scene requestFromScene);
|
public delegate bool CanTerraformLand(LLUUID user, LLVector3 position, Scene requestFromScene);
|
||||||
private List<CanTerraformLandCommand> CanTerraformLandCommandCheckFunctions = new List<CanTerraformLandCommand>();
|
private List<CanTerraformLand> CanTerraformLandCheckFunctions = new List<CanTerraformLand>();
|
||||||
|
|
||||||
public void addCheckTerraformLandCommand(CanTerraformLandCommand delegateFunc)
|
public void addCheckTerraformLand(CanTerraformLand delegateFunc)
|
||||||
{
|
{
|
||||||
if (!CanTerraformLandCommandCheckFunctions.Contains(delegateFunc))
|
if (!CanTerraformLandCheckFunctions.Contains(delegateFunc))
|
||||||
CanTerraformLandCommandCheckFunctions.Add(delegateFunc);
|
CanTerraformLandCheckFunctions.Add(delegateFunc);
|
||||||
}
|
}
|
||||||
public void removeCheckTerraformLandCommand(CanTerraformLandCommand delegateFunc)
|
public void removeCheckTerraformLand(CanTerraformLand delegateFunc)
|
||||||
{
|
{
|
||||||
if (CanTerraformLandCommandCheckFunctions.Contains(delegateFunc))
|
if (CanTerraformLandCheckFunctions.Contains(delegateFunc))
|
||||||
CanTerraformLandCommandCheckFunctions.Remove(delegateFunc);
|
CanTerraformLandCheckFunctions.Remove(delegateFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ExternalChecksCanTerraformLand(LLUUID user, LLVector3 pos)
|
public bool ExternalChecksCanTerraformLand(LLUUID user, LLVector3 pos)
|
||||||
{
|
{
|
||||||
foreach (CanTerraformLandCommand check in CanTerraformLandCommandCheckFunctions)
|
foreach (CanTerraformLand check in CanTerraformLandCheckFunctions)
|
||||||
{
|
{
|
||||||
if (check(user, pos, m_scene) == false)
|
if (check(user, pos, m_scene) == false)
|
||||||
{
|
{
|
||||||
|
@ -426,6 +509,34 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region CAN ISSUE ESTATE COMMAND
|
||||||
|
public delegate bool CanIssueEstateCommand(LLUUID user, Scene requestFromScene);
|
||||||
|
private List<CanIssueEstateCommand> CanIssueEstateCommandCheckFunctions = new List<CanIssueEstateCommand>();
|
||||||
|
|
||||||
|
public void addCheckIssueEstateCommand(CanIssueEstateCommand delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanIssueEstateCommandCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanIssueEstateCommandCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckIssueEstateCommand(CanIssueEstateCommand delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanIssueEstateCommandCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanIssueEstateCommandCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanIssueEstateCommand(LLUUID user)
|
||||||
|
{
|
||||||
|
foreach (CanIssueEstateCommand check in CanIssueEstateCommandCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(user, m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region CAN BE GODLIKE
|
#region CAN BE GODLIKE
|
||||||
public delegate bool CanBeGodLike(LLUUID user, Scene requestFromScene);
|
public delegate bool CanBeGodLike(LLUUID user, Scene requestFromScene);
|
||||||
private List<CanBeGodLike> CanBeGodLikeCheckFunctions = new List<CanBeGodLike>();
|
private List<CanBeGodLike> CanBeGodLikeCheckFunctions = new List<CanBeGodLike>();
|
||||||
|
@ -452,154 +563,95 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region EDIT PARCEL
|
||||||
|
public delegate bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene);
|
||||||
|
private List<CanEditParcel> CanEditParcelCheckFunctions = new List<CanEditParcel>();
|
||||||
|
|
||||||
|
public void addCheckEditParcel(CanEditParcel delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanEditParcelCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanEditParcelCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckEditParcel(CanEditParcel delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanEditParcelCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanEditParcelCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanEditParcel(LLUUID user, ILandObject parcel)
|
||||||
|
{
|
||||||
|
foreach (CanEditParcel check in CanEditParcelCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(user, parcel, m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region SELL PARCEL
|
||||||
|
public delegate bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene);
|
||||||
|
private List<CanSellParcel> CanSellParcelCheckFunctions = new List<CanSellParcel>();
|
||||||
|
|
||||||
|
public void addCheckSellParcel(CanSellParcel delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanSellParcelCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanSellParcelCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckSellParcel(CanSellParcel delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanSellParcelCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanSellParcelCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanSellParcel(LLUUID user, ILandObject parcel)
|
||||||
|
{
|
||||||
|
foreach (CanSellParcel check in CanSellParcelCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(user, parcel, m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ABANDON PARCEL
|
||||||
|
public delegate bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene);
|
||||||
|
private List<CanAbandonParcel> CanAbandonParcelCheckFunctions = new List<CanAbandonParcel>();
|
||||||
|
|
||||||
|
public void addCheckAbandonParcel(CanAbandonParcel delegateFunc)
|
||||||
|
{
|
||||||
|
if (!CanAbandonParcelCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanAbandonParcelCheckFunctions.Add(delegateFunc);
|
||||||
|
}
|
||||||
|
public void removeCheckAbandonParcel(CanAbandonParcel delegateFunc)
|
||||||
|
{
|
||||||
|
if (CanAbandonParcelCheckFunctions.Contains(delegateFunc))
|
||||||
|
CanAbandonParcelCheckFunctions.Remove(delegateFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExternalChecksCanAbandonParcel(LLUUID user, ILandObject parcel)
|
||||||
|
{
|
||||||
|
foreach (CanAbandonParcel check in CanAbandonParcelCheckFunctions)
|
||||||
|
{
|
||||||
|
if (check(user, parcel, m_scene) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Parcel and Estate Permission Checks
|
|
||||||
#region EDIT ESTATE TERRAIN
|
|
||||||
public delegate bool CanEditEstateTerrain(LLUUID user, Scene scene);
|
|
||||||
private List<CanEditEstateTerrain> CanEditEstateTerrainCheckFunctions = new List<CanEditEstateTerrain>();
|
|
||||||
|
|
||||||
public void addCheckEditEstateTerrain(CanEditEstateTerrain delegateFunc)
|
|
||||||
{
|
|
||||||
if (!CanEditEstateTerrainCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanEditEstateTerrainCheckFunctions.Add(delegateFunc);
|
|
||||||
}
|
|
||||||
public void removeCheckEditEstateTerrain(CanEditEstateTerrain delegateFunc)
|
|
||||||
{
|
|
||||||
if (CanEditEstateTerrainCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanEditEstateTerrainCheckFunctions.Remove(delegateFunc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ExternalChecksCanEditEstateTerrain(LLUUID user)
|
|
||||||
{
|
|
||||||
foreach (CanEditEstateTerrain check in CanEditEstateTerrainCheckFunctions)
|
|
||||||
{
|
|
||||||
if (check(user, m_scene) == false)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region RESTART SIM
|
|
||||||
public delegate bool CanRestartSim(LLUUID user, Scene scene);
|
|
||||||
private List<CanRestartSim> CanRestartSimCheckFunctions = new List<CanRestartSim>();
|
|
||||||
|
|
||||||
public void addCheckRestartSim(CanRestartSim delegateFunc)
|
|
||||||
{
|
|
||||||
if (!CanRestartSimCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanRestartSimCheckFunctions.Add(delegateFunc);
|
|
||||||
}
|
|
||||||
public void removeCheckRestartSim(CanRestartSim delegateFunc)
|
|
||||||
{
|
|
||||||
if (CanRestartSimCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanRestartSimCheckFunctions.Remove(delegateFunc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ExternalChecksCanRestartSim(LLUUID user)
|
|
||||||
{
|
|
||||||
foreach (CanRestartSim check in CanRestartSimCheckFunctions)
|
|
||||||
{
|
|
||||||
if (check(user, m_scene) == false)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region EDIT PARCEL
|
|
||||||
public delegate bool CanEditParcel(LLUUID user, ILandObject parcel, Scene scene);
|
|
||||||
private List<CanEditParcel> CanEditParcelCheckFunctions = new List<CanEditParcel>();
|
|
||||||
|
|
||||||
public void addCheckEditParcel(CanEditParcel delegateFunc)
|
|
||||||
{
|
|
||||||
if (!CanEditParcelCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanEditParcelCheckFunctions.Add(delegateFunc);
|
|
||||||
}
|
|
||||||
public void removeCheckEditParcel(CanEditParcel delegateFunc)
|
|
||||||
{
|
|
||||||
if (CanEditParcelCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanEditParcelCheckFunctions.Remove(delegateFunc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ExternalChecksCanEditParcel(LLUUID user, ILandObject parcel)
|
|
||||||
{
|
|
||||||
foreach (CanEditParcel check in CanEditParcelCheckFunctions)
|
|
||||||
{
|
|
||||||
if (check(user, parcel, m_scene) == false)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region SELL PARCEL
|
|
||||||
public delegate bool CanSellParcel(LLUUID user, ILandObject parcel, Scene scene);
|
|
||||||
private List<CanSellParcel> CanSellParcelCheckFunctions = new List<CanSellParcel>();
|
|
||||||
|
|
||||||
public void addCheckSellParcel(CanSellParcel delegateFunc)
|
|
||||||
{
|
|
||||||
if (!CanSellParcelCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanSellParcelCheckFunctions.Add(delegateFunc);
|
|
||||||
}
|
|
||||||
public void removeCheckSellParcel(CanSellParcel delegateFunc)
|
|
||||||
{
|
|
||||||
if (CanSellParcelCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanSellParcelCheckFunctions.Remove(delegateFunc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ExternalChecksCanSellParcel(LLUUID user, ILandObject parcel)
|
|
||||||
{
|
|
||||||
foreach (CanSellParcel check in CanSellParcelCheckFunctions)
|
|
||||||
{
|
|
||||||
if (check(user, parcel, m_scene) == false)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region ABANDON PARCEL
|
|
||||||
public delegate bool CanAbandonParcel(LLUUID user, ILandObject parcel, Scene scene);
|
|
||||||
private List<CanAbandonParcel> CanAbandonParcelCheckFunctions = new List<CanAbandonParcel>();
|
|
||||||
|
|
||||||
public void addCheckAbandonParcel(CanAbandonParcel delegateFunc)
|
|
||||||
{
|
|
||||||
if (!CanAbandonParcelCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanAbandonParcelCheckFunctions.Add(delegateFunc);
|
|
||||||
}
|
|
||||||
public void removeCheckAbandonParcel(CanAbandonParcel delegateFunc)
|
|
||||||
{
|
|
||||||
if (CanAbandonParcelCheckFunctions.Contains(delegateFunc))
|
|
||||||
CanAbandonParcelCheckFunctions.Remove(delegateFunc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ExternalChecksCanAbandonParcel(LLUUID user, ILandObject parcel)
|
|
||||||
{
|
|
||||||
foreach (CanAbandonParcel check in CanAbandonParcelCheckFunctions)
|
|
||||||
{
|
|
||||||
if (check(user, parcel, m_scene) == false)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public event ParcelDivideRequest OnParcelDivideRequest;
|
public event ParcelDivideRequest OnParcelDivideRequest;
|
||||||
public event ParcelJoinRequest OnParcelJoinRequest;
|
public event ParcelJoinRequest OnParcelJoinRequest;
|
||||||
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
||||||
|
public event ParcelAbandonRequest OnParcelAbandonRequest;
|
||||||
public event ParcelAccessListRequest OnParcelAccessListRequest;
|
public event ParcelAccessListRequest OnParcelAccessListRequest;
|
||||||
public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;
|
public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;
|
||||||
public event ParcelSelectObjects OnParcelSelectObjects;
|
public event ParcelSelectObjects OnParcelSelectObjects;
|
||||||
|
|
|
@ -281,7 +281,7 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
public int osRegionRestart(double seconds)
|
public int osRegionRestart(double seconds)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
if (World.ExternalChecks.ExternalChecksCanRestartSim(m_host.OwnerID))
|
if (World.ExternalChecks.ExternalChecksCanIssueEstateCommand(m_host.OwnerID))
|
||||||
{
|
{
|
||||||
World.Restart((float)seconds);
|
World.Restart((float)seconds);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue