diff options
Diffstat (limited to 'indra/llinventory')
| -rw-r--r-- | indra/llinventory/llinventory.cpp | 33 | ||||
| -rw-r--r-- | indra/llinventory/llinventory.h | 5 | ||||
| -rw-r--r-- | indra/llinventory/llparcel.h | 6 | ||||
| -rw-r--r-- | indra/llinventory/llpermissions.cpp | 13 | ||||
| -rw-r--r-- | indra/llinventory/llpermissions.h | 4 | ||||
| -rw-r--r-- | indra/llinventory/lltransactiontypes.h | 12 | 
6 files changed, 69 insertions, 4 deletions
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index e2a77f1d1e..5d3fbe5128 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -458,6 +458,39 @@ void LLInventoryItem::setCreationDate(time_t creation_date_utc)  	mCreationDate = creation_date_utc;  } +void LLInventoryItem::accumulatePermissionSlamBits(const LLInventoryItem& old_item) +{ +	// Remove any pre-existing II_FLAGS_PERM_OVERWRITE_MASK flags  +	// because we now detect when they should be set. +	setFlags( old_item.getFlags() | (getFlags() & ~(LLInventoryItem::II_FLAGS_PERM_OVERWRITE_MASK)) ); + +	// Enforce the PERM_OVERWRITE flags for any masks that are different +	// but only for AT_OBJECT's since that is the only asset type that can  +	// exist in-world (instead of only in-inventory or in-object-contents). +	if (LLAssetType::AT_OBJECT == getType()) +	{ +		LLPermissions old_permissions = old_item.getPermissions(); +		U32 flags_to_be_set = 0; +		if(old_permissions.getMaskNextOwner() != getPermissions().getMaskNextOwner()) +		{ +			flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; +		} +		if(old_permissions.getMaskEveryone() != getPermissions().getMaskEveryone()) +		{ +			flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; +		} +		if(old_permissions.getMaskGroup() != getPermissions().getMaskGroup()) +		{ +			flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; +		} +		LLSaleInfo old_sale_info = old_item.getSaleInfo(); +		if(old_sale_info != getSaleInfo()) +		{ +			flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE; +		} +		setFlags(getFlags() | flags_to_be_set); +	} +}  const LLSaleInfo& LLInventoryItem::getSaleInfo() const  { diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h index 64af6c94f5..bd581e860f 100644 --- a/indra/llinventory/llinventory.h +++ b/indra/llinventory/llinventory.h @@ -93,7 +93,6 @@ public:  	virtual const LLUUID& getUUID() const;  	const LLUUID& getParentUUID() const;  	virtual const LLUUID& getLinkedUUID() const; // get the inventoryID that this item points to, else this item's inventoryID -  	virtual const std::string& getName() const;  	virtual LLAssetType::EType getType() const;  	LLAssetType::EType getActualType() const; // bypasses indirection for linked items @@ -263,6 +262,10 @@ public:  	void setInventoryType(LLInventoryType::EType inv_type);  	void setFlags(U32 flags);  	void setCreationDate(time_t creation_date_utc); + +	// Check for changes in permissions masks and sale info +	// and set the corresponding bits in mFlags +	void accumulatePermissionSlamBits(const LLInventoryItem& old_item);  	// This is currently only used in the Viewer to handle calling cards  	// where the creator is actually used to store the target. diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index aa8391230c..2a9a596912 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -136,9 +136,9 @@ class LLSD;  class LLAccessEntry  {  public: -	LLUUID		mID; -	S32			mTime; -	U32			mFlags; +	LLUUID		mID;		// Agent ID +	S32			mTime;		// Time (unix seconds) when entry expires +	U32			mFlags;		// Not used - currently should always be zero  };  typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator; diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp index 0babf26457..d2e5034734 100644 --- a/indra/llinventory/llpermissions.cpp +++ b/indra/llinventory/llpermissions.cpp @@ -288,6 +288,17 @@ BOOL LLPermissions::setOwnerAndGroup(  	return allowed;  } +//Fix for DEV-33917, last owner isn't used much and has little impact on +//permissions so it's reasonably safe to do this, however, for now,  +//limiting the functionality of this routine to objects which are  +//group owned. +void LLPermissions::setLastOwner(const LLUUID& last_owner) +{ +	if (isGroupOwned()) +		mLastOwner = last_owner; +} + +   // only call this if you know what you're doing  // there are usually perm-bit consequences when the   // ownerhsip changes @@ -895,6 +906,8 @@ void LLMetaClassT<LLPermissions>::reflectProperties(LLMetaClass& meta_class)  {  	reflectProperty(meta_class, "mCreator", &LLPermissions::mCreator);  	reflectProperty(meta_class, "mOwner", &LLPermissions::mOwner); +	reflectProperty(meta_class, "mGroup", &LLPermissions::mGroup); +	reflectProperty(meta_class, "mIsGroupOwned", &LLPermissions::mIsGroupOwned);  }  // virtual diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h index 864088148f..d5a0881c8f 100644 --- a/indra/llinventory/llpermissions.h +++ b/indra/llinventory/llpermissions.h @@ -232,6 +232,10 @@ public:  	// ownerhsip changes  	void yesReallySetOwner(const LLUUID& owner, bool group_owned); +	// Last owner doesn't have much in the way of permissions so it's  +	//not too dangerous to do this.  +	void setLastOwner(const LLUUID& last_owner); +  	// saves last owner, sets owner to uuid null, sets group  	// owned. group_id must be the group of the object (that's who it  	// is being deeded to) and the object must be group diff --git a/indra/llinventory/lltransactiontypes.h b/indra/llinventory/lltransactiontypes.h index 1cb7308bd4..2c699bcb87 100644 --- a/indra/llinventory/lltransactiontypes.h +++ b/indra/llinventory/lltransactiontypes.h @@ -69,6 +69,12 @@ const S32 TRANS_PARCEL_DIR_FEE		= 2003;  const S32 TRANS_GROUP_TAX		    = 2004; // Taxes incurred as part of group membership  const S32 TRANS_CLASSIFIED_RENEW	= 2005; +// Codes 2100-2999 reserved for recurring billing services +// New codes can be created through an admin interface so may not +// automatically end up in the list below :-( +// So make sure you check the transaction_description table +const S32 TRANS_RECURRING_GENERIC  = 2100; +  // Codes 3000-3999 reserved for inventory transactions  const S32 TRANS_GIVE_INVENTORY		= 3000; @@ -84,6 +90,12 @@ const S32 TRANS_DWELL_BONUS			= 5007;  const S32 TRANS_PAY_OBJECT			= 5008;  const S32 TRANS_OBJECT_PAYS			= 5009; +// Codes 5100-5999 reserved for recurring billing transfers between users +// New codes can be created through an admin interface so may not +// automatically end up in the list below :-( +// So make sure you check the transaction_description table +const S32 TRANS_RECURRING_GENERIC_USER  = 5100; +  // Codes 6000-6999 reserved for group transactions  //const S32 TRANS_GROUP_JOIN		    = 6000;  //reserved for future use  const S32 TRANS_GROUP_LAND_DEED		= 6001;  | 
