Skip to content

Commit 90dc2cd

Browse files
Lua C modules now require ACL access
For each resource that wants to use a C module, a right needs to be added in the following format: <right name="module.<name>" access="true"></right> For example, <right name="module.lfs" access="true"></right> A * wildcard works to grant a resource access to all modules.
1 parent b8ec9e2 commit 90dc2cd

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

Server/mods/deathmatch/logic/CAccessControlListManager.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ bool CAccessControlListManager::Load ( void )
144144
{
145145
pRight = pACL->AddRight ( &szRightName[8], CAccessControlListRight::RIGHT_TYPE_GENERAL, bAccess );
146146
}
147+
else if ( StringBeginsWith ( szRightName, "module." ) )
148+
{
149+
pRight = pACL->AddRight ( &szRightName[7], CAccessControlListRight::RIGHT_TYPE_MODULE, bAccess );
150+
}
147151
else continue;
148152

149153
// Set all the extra attributes
@@ -552,6 +556,11 @@ const char* CAccessControlListManager::ExtractRightName ( const char* szRightNam
552556
eType = CAccessControlListRight::RIGHT_TYPE_GENERAL;
553557
return szRightName + 8;
554558
}
559+
else if ( StringBeginsWith( szRightName, "module." ) )
560+
{
561+
eType = CAccessControlListRight::RIGHT_TYPE_MODULE;
562+
return szRightName + 7;
563+
}
555564

556565
// Failed
557566
return NULL;

Server/mods/deathmatch/logic/CAccessControlListRight.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class CAccessControlListRight
2525
RIGHT_TYPE_COMMAND,
2626
RIGHT_TYPE_FUNCTION,
2727
RIGHT_TYPE_RESOURCE,
28-
RIGHT_TYPE_GENERAL
28+
RIGHT_TYPE_GENERAL,
29+
RIGHT_TYPE_MODULE
2930
};
3031

3132
public:

Server/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ IMPLEMENT_ENUM_BEGIN( CAccessControlListRight::ERightType )
240240
ADD_ENUM ( CAccessControlListRight::RIGHT_TYPE_FUNCTION, "function" )
241241
ADD_ENUM ( CAccessControlListRight::RIGHT_TYPE_RESOURCE, "resource" )
242242
ADD_ENUM ( CAccessControlListRight::RIGHT_TYPE_GENERAL, "general" )
243+
ADD_ENUM ( CAccessControlListRight::RIGHT_TYPE_MODULE, "module" )
243244
IMPLEMENT_ENUM_END( "right-type" )
244245

245246
IMPLEMENT_ENUM_BEGIN( CElement::EElementType )

Server/mods/deathmatch/logic/lua/CLuaMain.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,24 @@ bool CLuaMain::LoadClib(lua_State* L, SString strName, SString &strError )
864864
return false;
865865
}
866866

867+
// Check ACL permissions
868+
if ( !g_pGame->GetACLManager()->CanObjectUseRight(m_pResource->GetName().c_str(),
869+
CAccessControlListGroupObject::OBJECT_TYPE_RESOURCE,
870+
"*",
871+
CAccessControlListRight::RIGHT_TYPE_MODULE,
872+
false) &&
873+
!g_pGame->GetACLManager()->CanObjectUseRight(m_pResource->GetName().c_str(),
874+
CAccessControlListGroupObject::OBJECT_TYPE_RESOURCE,
875+
strName.c_str(),
876+
CAccessControlListRight::RIGHT_TYPE_MODULE,
877+
false)
878+
)
879+
{
880+
strError += "error loading module " + strName + " from file " + strPath +
881+
":\n\t ACL access denied. Grant \"module." + strName + "\" right to resource " + m_pResource->GetName();
882+
return false;
883+
}
884+
867885
if (!luaL_loader_C(L, strName.c_str(), strPath.c_str()) || lua_type(L, -1) == LUA_TNIL)
868886
{
869887
strError += "error loading module " + strName + " from file " + strPath +

0 commit comments

Comments
 (0)