Prevent login to a region if the Telehub or Landing Point are in a banned parcel
parent
e68867c9b6
commit
5aeaa7fcdd
|
@ -3751,6 +3751,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
RegionInfo.RegionSettings.TelehubObject, acd.Name, Name);
|
RegionInfo.RegionSettings.TelehubObject, acd.Name, Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Final permissions check; this time we don't allow changing the position
|
||||||
|
if (!IsPositionAllowed(acd.AgentID, acd.startpos, ref reason))
|
||||||
|
{
|
||||||
|
m_authenticateHandler.RemoveCircuit(acd.circuitcode);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3760,9 +3767,31 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (land.LandData.LandingType == (byte)1 && land.LandData.UserLocation != Vector3.Zero)
|
if (land.LandData.LandingType == (byte)1 && land.LandData.UserLocation != Vector3.Zero)
|
||||||
{
|
{
|
||||||
acd.startpos = land.LandData.UserLocation;
|
acd.startpos = land.LandData.UserLocation;
|
||||||
|
|
||||||
|
// Final permissions check; this time we don't allow changing the position
|
||||||
|
if (!IsPositionAllowed(acd.AgentID, acd.startpos, ref reason))
|
||||||
|
{
|
||||||
|
m_authenticateHandler.RemoveCircuit(acd.circuitcode);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsPositionAllowed(UUID agentID, Vector3 pos, ref string reason)
|
||||||
|
{
|
||||||
|
ILandObject land = LandChannel.GetLandObject(pos);
|
||||||
|
if (land == null)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (land.IsBannedFromLand(agentID) || land.IsRestrictedFromLand(agentID))
|
||||||
|
{
|
||||||
|
reason = "You are banned from the region.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -5153,7 +5182,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Vector3? nearestPoint = GetNearestPointInParcelAlongDirectionFromPoint(avatar.AbsolutePosition, dir, nearestParcel);
|
Vector3? nearestPoint = GetNearestPointInParcelAlongDirectionFromPoint(avatar.AbsolutePosition, dir, nearestParcel);
|
||||||
if (nearestPoint != null)
|
if (nearestPoint != null)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("Found a sane previous position based on velocity, sending them to: " + nearestPoint.ToString());
|
m_log.Debug("Found a sane previous position based on velocity, sending them to: " + nearestPoint.ToString());
|
||||||
return nearestPoint.Value;
|
return nearestPoint.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5163,7 +5192,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
nearestPoint = GetNearestPointInParcelAlongDirectionFromPoint(avatar.AbsolutePosition, dir, nearestParcel);
|
nearestPoint = GetNearestPointInParcelAlongDirectionFromPoint(avatar.AbsolutePosition, dir, nearestParcel);
|
||||||
if (nearestPoint != null)
|
if (nearestPoint != null)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("They had a zero velocity, sending them to: " + nearestPoint.ToString());
|
m_log.Debug("They had a zero velocity, sending them to: " + nearestPoint.ToString());
|
||||||
return nearestPoint.Value;
|
return nearestPoint.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5172,7 +5201,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
// Ultimate backup if we have no idea where they are and
|
// Ultimate backup if we have no idea where they are and
|
||||||
// the last allowed position was in another parcel
|
// the last allowed position was in another parcel
|
||||||
Debug.WriteLine("Have no idea where they are, sending them to: " + avatar.lastKnownAllowedPosition.ToString());
|
m_log.Debug("Have no idea where they are, sending them to: " + avatar.lastKnownAllowedPosition.ToString());
|
||||||
return avatar.lastKnownAllowedPosition;
|
return avatar.lastKnownAllowedPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5182,7 +5211,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//Go to the edge, this happens in teleporting to a region with no available parcels
|
//Go to the edge, this happens in teleporting to a region with no available parcels
|
||||||
Vector3 nearestRegionEdgePoint = GetNearestRegionEdgePosition(avatar);
|
Vector3 nearestRegionEdgePoint = GetNearestRegionEdgePosition(avatar);
|
||||||
|
|
||||||
//Debug.WriteLine("They are really in a place they don't belong, sending them to: " + nearestRegionEdgePoint.ToString());
|
//m_log.Debug("They are really in a place they don't belong, sending them to: " + nearestRegionEdgePoint.ToString());
|
||||||
|
|
||||||
return nearestRegionEdgePoint;
|
return nearestRegionEdgePoint;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue