summaryrefslogtreecommitdiff
path: root/indra/llinventory
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llinventory')
-rw-r--r--indra/llinventory/llinventory.cpp15
-rw-r--r--indra/llinventory/llinventorytype.cpp77
-rw-r--r--indra/llinventory/llinventorytype.h7
-rw-r--r--indra/llinventory/llparcel.h4
-rw-r--r--indra/llinventory/llpermissions.cpp11
-rw-r--r--indra/llinventory/llpermissions.h3
-rw-r--r--indra/llinventory/llpermissionsflags.h3
7 files changed, 94 insertions, 26 deletions
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index 597e19e7ea..59aca12de2 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -310,6 +310,7 @@ LLInventoryItem::LLInventoryItem(
{
LLStringUtil::replaceNonstandardASCII(mDescription, ' ');
LLStringUtil::replaceChar(mDescription, '|', ' ');
+ mPermissions.initMasks(inv_type);
}
LLInventoryItem::LLInventoryItem() :
@@ -432,6 +433,9 @@ void LLInventoryItem::setDescription(const std::string& d)
void LLInventoryItem::setPermissions(const LLPermissions& perm)
{
mPermissions = perm;
+
+ // Override permissions to unrestricted if this is a landmark
+ mPermissions.initMasks(mInventoryType);
}
void LLInventoryItem::setInventoryType(LLInventoryType::EType inv_type)
@@ -503,6 +507,7 @@ BOOL LLInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32
mType = static_cast<LLAssetType::EType>(type);
msg->getS8(block, "InvType", type, block_num);
mInventoryType = static_cast<LLInventoryType::EType>(type);
+ mPermissions.initMasks(mInventoryType);
msg->getU32Fast(block, _PREHASH_Flags, mFlags, block_num);
@@ -693,6 +698,9 @@ BOOL LLInventoryItem::importFile(LLFILE* fp)
lldebugs << "Resetting inventory type for " << mUUID << llendl;
mInventoryType = LLInventoryType::defaultForAssetType(mType);
}
+
+ mPermissions.initMasks(mInventoryType);
+
return success;
}
@@ -896,6 +904,9 @@ BOOL LLInventoryItem::importLegacyStream(std::istream& input_stream)
lldebugs << "Resetting inventory type for " << mUUID << llendl;
mInventoryType = LLInventoryType::defaultForAssetType(mType);
}
+
+ mPermissions.initMasks(mInventoryType);
+
return success;
}
@@ -1118,6 +1129,8 @@ bool LLInventoryItem::fromLLSD(const LLSD& sd)
mInventoryType = LLInventoryType::defaultForAssetType(mType);
}
+ mPermissions.initMasks(mInventoryType);
+
return true;
fail:
return false;
@@ -1624,7 +1637,7 @@ LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
rv[INV_PARENT_ID_LABEL] = cat->getParentUUID();
rv[INV_NAME_LABEL] = cat->getName();
rv[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(cat->getType());
- if(LLAssetType::AT_NONE != cat->getPreferredType())
+ if(LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
{
rv[INV_PREFERRED_TYPE_LABEL] =
LLAssetType::lookup(cat->getPreferredType());
diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp
index 2dc229226f..a445466b26 100644
--- a/indra/llinventory/llinventorytype.cpp
+++ b/indra/llinventory/llinventorytype.cpp
@@ -44,9 +44,23 @@ static const std::string empty_string;
///----------------------------------------------------------------------------
struct InventoryEntry : public LLDictionaryEntry
{
- InventoryEntry(const std::string &name,
- const std::string &human_name,
- int num_asset_types = 0, ...);
+ InventoryEntry(const std::string &name, // unlike asset type names, not limited to 8 characters; need not match asset type names
+ const std::string &human_name, // for decoding to human readable form; put any and as many printable characters you want in each one.
+ int num_asset_types = 0, ...)
+ :
+ LLDictionaryEntry(name),
+ mHumanName(human_name)
+ {
+ va_list argp;
+ va_start(argp, num_asset_types);
+ // Read in local textures
+ for (U8 i=0; i < num_asset_types; i++)
+ {
+ LLAssetType::EType t = (LLAssetType::EType)va_arg(argp,int);
+ mAssetTypes.push_back(t);
+ }
+ }
+
const std::string mHumanName;
typedef std::vector<LLAssetType::EType> asset_vec_t;
asset_vec_t mAssetTypes;
@@ -115,25 +129,35 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] =
LLInventoryType::IT_GESTURE, // AT_GESTURE
LLInventoryType::IT_NONE, // AT_SIMSTATE
LLInventoryType::IT_FAVORITE, // AT_FAVORITE
+
LLInventoryType::IT_NONE, // AT_LINK
LLInventoryType::IT_NONE, // AT_LINK_FOLDER
-};
-InventoryEntry::InventoryEntry(const std::string &name,
- const std::string &human_name,
- int num_asset_types, ...) :
- LLDictionaryEntry(name),
- mHumanName(human_name)
-{
- va_list argp;
- va_start(argp, num_asset_types);
- // Read in local textures
- for (U8 i=0; i < num_asset_types; i++)
- {
- LLAssetType::EType t = (LLAssetType::EType)va_arg(argp,int);
- mAssetTypes.push_back(t);
- }
-}
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+ LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE
+
+ LLInventoryType::IT_CATEGORY, // AT_CURRENT_OUTFIT
+ LLInventoryType::IT_CATEGORY, // AT_OUTFIT
+ LLInventoryType::IT_CATEGORY, // AT_MY_OUTFITS
+};
// static
const std::string &LLInventoryType::lookup(EType type)
@@ -173,6 +197,21 @@ LLInventoryType::EType LLInventoryType::defaultForAssetType(LLAssetType::EType a
}
}
+
+// add any types that we don't want the user to be able to change permissions on.
+// static
+bool LLInventoryType::cannotRestrictPermissions(LLInventoryType::EType type)
+{
+ switch(type)
+ {
+ case IT_CALLINGCARD:
+ case IT_LANDMARK:
+ return true;
+ default:
+ return false;
+ }
+}
+
bool inventory_and_asset_types_match(LLInventoryType::EType inventory_type,
LLAssetType::EType asset_type)
{
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
index 1aad90d51b..14b28bfe4b 100644
--- a/indra/llinventory/llinventorytype.h
+++ b/indra/llinventory/llinventorytype.h
@@ -83,10 +83,13 @@ public:
// return the default inventory for the given asset type.
static EType defaultForAssetType(LLAssetType::EType asset_type);
+ // true if this type cannot have restricted permissions.
+ static bool cannotRestrictPermissions(EType type);
+
private:
// don't instantiate or derive one of these objects
- LLInventoryType() {}
- ~LLInventoryType() {}
+ LLInventoryType( void );
+ ~LLInventoryType( void );
};
// helper function that returns true if inventory type and asset type
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index 7b7896f74f..71baac8d89 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -447,8 +447,10 @@ public:
BOOL getAllowFly() const
{ return (mParcelFlags & PF_ALLOW_FLY) ? TRUE : FALSE; }
+ // Remove permission restrictions for creating landmarks.
+ // We should eventually remove this flag completely.
BOOL getAllowLandmark() const
- { return (mParcelFlags & PF_ALLOW_LANDMARK) ? TRUE : FALSE; }
+ { return TRUE; }
BOOL getAllowGroupScripts() const
{ return (mParcelFlags & PF_ALLOW_GROUP_SCRIPTS) ? TRUE : FALSE; }
diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp
index 559a5631dc..0babf26457 100644
--- a/indra/llinventory/llpermissions.cpp
+++ b/indra/llinventory/llpermissions.cpp
@@ -83,6 +83,17 @@ void LLPermissions::initMasks(PermissionMask base, PermissionMask owner,
fix();
}
+// ! BACKWARDS COMPATIBILITY ! Override masks for inventory types that
+// no longer can have restricted permissions. This takes care of previous
+// version landmarks that could have had no copy/mod/transfer bits set.
+void LLPermissions::initMasks(LLInventoryType::EType type)
+{
+ if (LLInventoryType::cannotRestrictPermissions(type))
+ {
+ initMasks(PERM_ALL, PERM_ALL, PERM_ALL, PERM_ALL, PERM_ALL);
+ }
+}
+
BOOL LLPermissions::getOwnership(LLUUID& owner_id, BOOL& is_group_owned) const
{
if(mOwner.notNull())
diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
index 2035b57f5c..d4ec399436 100644
--- a/indra/llinventory/llpermissions.h
+++ b/indra/llinventory/llpermissions.h
@@ -38,6 +38,7 @@
#include "lluuid.h"
#include "llxmlnode.h"
#include "reflective.h"
+#include "llinventorytype.h"
// prototypes
class LLMessageSystem;
@@ -129,6 +130,8 @@ public:
void initMasks(PermissionMask base, PermissionMask owner,
PermissionMask everyone, PermissionMask group,
PermissionMask next);
+ // adjust permissions based on inventory type.
+ void initMasks(LLInventoryType::EType type);
//
// ACCESSORS
diff --git a/indra/llinventory/llpermissionsflags.h b/indra/llinventory/llpermissionsflags.h
index afa2adbd90..f810929d68 100644
--- a/indra/llinventory/llpermissionsflags.h
+++ b/indra/llinventory/llpermissionsflags.h
@@ -32,9 +32,6 @@
#ifndef LL_LLPERMISSIONSFLAGS_H
#define LL_LLPERMISSIONSFLAGS_H
-// llpermissionsflags.h
-// Copyright 2002, Linden Research, Inc.
-//
// Flags for various permissions bits.
// Shared between viewer and simulator.