Revert "Handle PERM_EXPORT in LLPermissions."
This reverts commit 9c71afe73e.
This commit is contained in:
@@ -34,13 +34,6 @@
|
|||||||
#include "metapropertyt.h"
|
#include "metapropertyt.h"
|
||||||
#include "llsd.h"
|
#include "llsd.h"
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
/// Class LFSimFeatureHandlerInterface
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
//static
|
|
||||||
LFSimFeatureHandlerInterface* LFSimFeatureHandlerInterface::sInstance;
|
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
/// Class LLPermissions
|
/// Class LLPermissions
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
@@ -482,14 +475,6 @@ BOOL LLPermissions::setNextOwnerBits(const LLUUID& agent, const LLUUID& group, B
|
|||||||
|
|
||||||
bool LLPermissions::allowOperationBy(PermissionBit op, const LLUUID& requester, const LLUUID& group) const
|
bool LLPermissions::allowOperationBy(PermissionBit op, const LLUUID& requester, const LLUUID& group) const
|
||||||
{
|
{
|
||||||
// Singu extension: Make this function work for PERM_EXPORT operation (also on grids not supporting it).
|
|
||||||
if (op == PERM_EXPORT)
|
|
||||||
{
|
|
||||||
// Requester must always be the owner; on grids supporting PERM_EXPORT, that bit
|
|
||||||
// must be set in the mMaskEveryone mask, otherwise the requester must be the creator.
|
|
||||||
return (!mIsGroupOwned && (mOwner == requester) &&
|
|
||||||
(mCreator == requester || (LFSimFeatureHandlerInterface::ifInstance()->simSupportsExport() && (mMaskEveryone & PERM_EXPORT))));
|
|
||||||
}
|
|
||||||
if(requester.isNull())
|
if(requester.isNull())
|
||||||
{
|
{
|
||||||
// ...system making request
|
// ...system making request
|
||||||
|
|||||||
@@ -40,23 +40,6 @@ extern void mask_to_string(U32 mask, char* str);
|
|||||||
extern std::string mask_to_string(U32 mask);
|
extern std::string mask_to_string(U32 mask);
|
||||||
template<class T> class LLMetaClassT;
|
template<class T> class LLMetaClassT;
|
||||||
|
|
||||||
// Interface of LFSimFeatureHandler.
|
|
||||||
class LFSimFeatureHandlerInterface
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
// LFSimFeatureHandler is a singleton.
|
|
||||||
static LFSimFeatureHandlerInterface* sInstance;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
LFSimFeatureHandlerInterface(void) { sInstance = this; }
|
|
||||||
virtual ~LFSimFeatureHandlerInterface() { }
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual bool simSupportsExport() const = 0;
|
|
||||||
|
|
||||||
static LFSimFeatureHandlerInterface* ifInstance(void) { return sInstance; }
|
|
||||||
};
|
|
||||||
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
// Class LLPermissions
|
// Class LLPermissions
|
||||||
//
|
//
|
||||||
@@ -291,7 +274,6 @@ public:
|
|||||||
inline bool allowModifyBy(const LLUUID &agent_id, const LLUUID& group) const;
|
inline bool allowModifyBy(const LLUUID &agent_id, const LLUUID& group) const;
|
||||||
inline bool allowCopyBy(const LLUUID& agent_id, const LLUUID& group) const;
|
inline bool allowCopyBy(const LLUUID& agent_id, const LLUUID& group) const;
|
||||||
inline bool allowMoveBy(const LLUUID &agent_id, const LLUUID &group) const;
|
inline bool allowMoveBy(const LLUUID &agent_id, const LLUUID &group) const;
|
||||||
inline bool allowExportBy(const LLUUID &agent_id) const; // Singu extension.
|
|
||||||
|
|
||||||
// This somewhat specialized function is meant for testing if the
|
// This somewhat specialized function is meant for testing if the
|
||||||
// current owner is allowed to transfer to the specified agent id.
|
// current owner is allowed to transfer to the specified agent id.
|
||||||
@@ -391,11 +373,6 @@ bool LLPermissions::allowTransferTo(const LLUUID &agent_id) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLPermissions::allowExportBy(const LLUUID& agent) const
|
|
||||||
{
|
|
||||||
return allowOperationBy(PERM_EXPORT, agent);
|
|
||||||
}
|
|
||||||
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
// Class LLAggregatePermissions
|
// Class LLAggregatePermissions
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "llnotificationsutil.h"
|
#include "llnotificationsutil.h"
|
||||||
|
|
||||||
// newview includes
|
// newview includes
|
||||||
|
#include "lfsimfeaturehandler.h"
|
||||||
#include "llavatarappearancedefines.h"
|
#include "llavatarappearancedefines.h"
|
||||||
#include "llface.h"
|
#include "llface.h"
|
||||||
#include "llvoavatar.h"
|
#include "llvoavatar.h"
|
||||||
@@ -219,6 +220,17 @@ void WavefrontSaver::Add(const LLViewerObject* some_vo)
|
|||||||
}
|
}
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
bool can_export_node(const LLSelectNode* node)
|
||||||
|
{
|
||||||
|
if (const LLPermissions* perms = node->mPermissions)
|
||||||
|
{
|
||||||
|
if (gAgentID == perms->getCreator() || (LFSimFeatureHandler::instance().simSupportsExport() && gAgentID == perms->getOwner() && perms->getMaskEveryone() & PERM_EXPORT))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
class LFSaveSelectedObjects : public view_listener_t
|
class LFSaveSelectedObjects : public view_listener_t
|
||||||
{
|
{
|
||||||
bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
|
bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
|
||||||
@@ -233,7 +245,7 @@ namespace
|
|||||||
{
|
{
|
||||||
total++;
|
total++;
|
||||||
LLSelectNode* node = *iter;
|
LLSelectNode* node = *iter;
|
||||||
if (!node->mPermissions->allowExportBy(gAgentID)) continue;
|
if (!can_export_node(node)) continue;
|
||||||
included++;
|
included++;
|
||||||
wfsaver->Add(node->getObject());
|
wfsaver->Add(node->getObject());
|
||||||
}
|
}
|
||||||
@@ -316,7 +328,7 @@ void WavefrontSaver::Add(const LLVOAvatar* av_vo) //adds attachments, too!
|
|||||||
if (!c) continue;
|
if (!c) continue;
|
||||||
if (const LLSelectNode* n = LLSelectMgr::getInstance()->getSelection()->findNode(const_cast<LLViewerObject*>(c)))
|
if (const LLSelectNode* n = LLSelectMgr::getInstance()->getSelection()->findNode(const_cast<LLViewerObject*>(c)))
|
||||||
{
|
{
|
||||||
if (!n->mPermissions->allowExportBy(gAgentID)) continue;
|
if (!can_export_node(n)) continue;
|
||||||
}
|
}
|
||||||
else continue;
|
else continue;
|
||||||
const LLVolume* vol = c->getVolume();
|
const LLVolume* vol = c->getVolume();
|
||||||
|
|||||||
@@ -65,6 +65,7 @@
|
|||||||
#include "boost/date_time/posix_time/posix_time.hpp"
|
#include "boost/date_time/posix_time/posix_time.hpp"
|
||||||
|
|
||||||
// newview includes
|
// newview includes
|
||||||
|
#include "lfsimfeaturehandler.h"
|
||||||
#include "llface.h"
|
#include "llface.h"
|
||||||
#include "llvovolume.h"
|
#include "llvovolume.h"
|
||||||
|
|
||||||
@@ -116,6 +117,18 @@ namespace DAEExportUtil
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool canExportNode(const LLSelectNode* node)
|
||||||
|
{
|
||||||
|
if (const LLPermissions* perms = node->mPermissions)
|
||||||
|
{
|
||||||
|
if (gAgentID == perms->getCreator() || (LFSimFeatureHandler::instance().simSupportsExport() && gAgentID == perms->getOwner() && perms->getMaskEveryone() & PERM_EXPORT))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void saveSelectedObject()
|
void saveSelectedObject()
|
||||||
{
|
{
|
||||||
static const std::string file_ext = ".dae";
|
static const std::string file_ext = ".dae";
|
||||||
@@ -131,7 +144,7 @@ namespace DAEExportUtil
|
|||||||
{
|
{
|
||||||
total++;
|
total++;
|
||||||
LLSelectNode* node = *iter;
|
LLSelectNode* node = *iter;
|
||||||
if (!node->mPermissions->allowExportBy(gAgentID) || !node->getObject()->getVolume()) continue;
|
if (!canExportNode(node) || !node->getObject()->getVolume()) continue;
|
||||||
included++;
|
included++;
|
||||||
daesaver->Add(node->getObject(), node->mName);
|
daesaver->Add(node->getObject(), node->mName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
#define LFSIMFEATUREHANDLER_H
|
#define LFSIMFEATUREHANDLER_H
|
||||||
|
|
||||||
#include "llsingleton.h"
|
#include "llsingleton.h"
|
||||||
#include "llpermissions.h"
|
|
||||||
|
|
||||||
template<typename Type>
|
template<typename Type>
|
||||||
class SignaledType
|
class SignaledType
|
||||||
@@ -46,7 +45,7 @@ private:
|
|||||||
Type mValue;
|
Type mValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LFSimFeatureHandler : public LFSimFeatureHandlerInterface, public LLSingleton<LFSimFeatureHandler>
|
class LFSimFeatureHandler : public LLSingleton<LFSimFeatureHandler>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
friend class LLSingleton<LFSimFeatureHandler>;
|
friend class LLSingleton<LFSimFeatureHandler>;
|
||||||
@@ -60,7 +59,7 @@ public:
|
|||||||
boost::signals2::connection setSupportsExportCallback(const boost::signals2::signal<void()>::slot_type& slot);
|
boost::signals2::connection setSupportsExportCallback(const boost::signals2::signal<void()>::slot_type& slot);
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
/*virtual*/ bool simSupportsExport() const { return mSupportsExport; }
|
bool simSupportsExport() const { return mSupportsExport; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// SignaledTypes
|
// SignaledTypes
|
||||||
|
|||||||
@@ -3165,8 +3165,7 @@ BOOL LLAgent::allowOperation(PermissionBit op,
|
|||||||
U8 god_minimum)
|
U8 god_minimum)
|
||||||
{
|
{
|
||||||
// Check god level.
|
// Check god level.
|
||||||
// Singu note: We should never get here for PERM_EXPORT really, but if we do - then Gods are not above the law.
|
if (getGodLevel() >= god_minimum) return TRUE;
|
||||||
if (getGodLevel() >= god_minimum && PERM_EXPORT != op) return TRUE;
|
|
||||||
|
|
||||||
if (!perm.isOwned()) return FALSE;
|
if (!perm.isOwned()) return FALSE;
|
||||||
|
|
||||||
@@ -3188,8 +3187,7 @@ BOOL LLAgent::allowOperation(PermissionBit op,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Check for granted mod permissions.
|
// Check for granted mod permissions.
|
||||||
// Singu note: do not allow proxy powers for exporting.
|
if ((PERM_OWNER != op) && isGrantedProxy(perm))
|
||||||
if ((PERM_OWNER != op && PERM_EXPORT != op) && isGrantedProxy(perm))
|
|
||||||
{
|
{
|
||||||
agent_proxy = owner_id;
|
agent_proxy = owner_id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1422,7 +1422,11 @@ bool LLPanelEditWearable::updatePermissions()
|
|||||||
|
|
||||||
// Exporting (of slider values) is allowed when the wearable is full perm, and owned by and created by the user.
|
// Exporting (of slider values) is allowed when the wearable is full perm, and owned by and created by the user.
|
||||||
// Of course, only modifiable is enough for the user to write down the values and enter them else where... but why make it easy for them to break the ToS.
|
// Of course, only modifiable is enough for the user to write down the values and enter them else where... but why make it easy for them to break the ToS.
|
||||||
if (is_complete && item->getPermissions().allowExportBy(gAgent.getID()))
|
if (is_complete &&
|
||||||
|
gAgent.getID() == item->getPermissions().getOwner() &&
|
||||||
|
gAgent.getID() == item->getPermissions().getCreator() &&
|
||||||
|
(PERM_ITEM_UNRESTRICTED &
|
||||||
|
perm_mask) == PERM_ITEM_UNRESTRICTED)
|
||||||
{
|
{
|
||||||
can_export = true;
|
can_export = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1177,7 +1177,7 @@ void LLPanelPermissions::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data)
|
|||||||
|
|
||||||
void LLPanelPermissions::onCommitExport(const LLSD& param)
|
void LLPanelPermissions::onCommitExport(const LLSD& param)
|
||||||
{
|
{
|
||||||
LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_EVERYONE, param.asBoolean(), PERM_EXPORT);
|
LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_EVERYONE, param, PERM_EXPORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|||||||
@@ -5926,12 +5926,6 @@ BOOL LLSelectNode::allowOperationOnNode(PermissionBit op, U64 group_proxy_power)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PERM_EXPORT == op)
|
|
||||||
{
|
|
||||||
// No proxy or god powers allowed.
|
|
||||||
return mPermissions->allowExportBy(gAgent.getID());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate proxy_agent_id and group_id to use for permissions checks.
|
// Calculate proxy_agent_id and group_id to use for permissions checks.
|
||||||
// proxy_agent_id may be set to the object owner through group powers.
|
// proxy_agent_id may be set to the object owner through group powers.
|
||||||
// group_id can only be set to the object's group, if the agent is in that group.
|
// group_id can only be set to the object's group, if the agent is in that group.
|
||||||
|
|||||||
@@ -2895,7 +2895,15 @@ class LLObjectEnableExport : public view_listener_t
|
|||||||
const LLSD& userdata;
|
const LLSD& userdata;
|
||||||
virtual bool apply(LLSelectNode* node)
|
virtual bool apply(LLSelectNode* node)
|
||||||
{
|
{
|
||||||
return node->mPermissions->allowExportBy(gAgent.getID());
|
// Note: the actual permission checking algorithm depends on the grid TOS and must be
|
||||||
|
// performed for each prim and texture. This is done later in llviewerobjectbackup.cpp.
|
||||||
|
// This means that even if the item is enabled in the menu, the export may fail should
|
||||||
|
// the permissions not be met for each exported asset. The permissions check below
|
||||||
|
// therefore only corresponds to the minimal permissions requirement common to all grids.
|
||||||
|
LLPermissions *item_permissions = node->mPermissions;
|
||||||
|
return (gAgent.getID() == item_permissions->getOwner() &&
|
||||||
|
(gAgent.getID() == item_permissions->getCreator() ||
|
||||||
|
(item_permissions->getMaskOwner() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ff * the_ff = new ff(userdata);
|
ff * the_ff = new ff(userdata);
|
||||||
|
|||||||
@@ -398,7 +398,18 @@ void LLObjectBackup::exportObject_continued(AIFilePicker* filepicker)
|
|||||||
|
|
||||||
bool LLObjectBackup::validatePerms(const LLPermissions *item_permissions)
|
bool LLObjectBackup::validatePerms(const LLPermissions *item_permissions)
|
||||||
{
|
{
|
||||||
return item_permissions->allowExportBy(gAgent.getID());
|
if (gHippoGridManager->getConnectedGrid()->isSecondLife())
|
||||||
|
{
|
||||||
|
// In Second Life, you must be the creator to be permitted to export the asset.
|
||||||
|
return (gAgent.getID() == item_permissions->getOwner() &&
|
||||||
|
gAgent.getID() == item_permissions->getCreator());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Out of Second Life, simply check that the asset is full perms.
|
||||||
|
return (gAgent.getID() == item_permissions->getOwner() &&
|
||||||
|
(item_permissions->getMaskOwner() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// So far, only Second Life forces TPVs to verify the creator for textures...
|
// So far, only Second Life forces TPVs to verify the creator for textures...
|
||||||
|
|||||||
Reference in New Issue
Block a user