예제 #1
0
int CLuaACLDefs::isObjectInACLGroup ( lua_State* luaVM )
{
    if ( lua_type ( luaVM, 1 ) == LUA_TSTRING && lua_type ( luaVM, 2 ) == LUA_TLIGHTUSERDATA )
    {
        const char* szObject = lua_tostring ( luaVM, 1 );
        CAccessControlListGroup* pGroup = lua_toaclgroup ( luaVM, 2 );
        CAccessControlListGroupObject::EObjectType GroupObjectType;

        if ( pGroup && m_pACLManager->VerifyGroup ( pGroup ) )
        {
            if ( StringBeginsWith ( szObject, "resource." ) ) {
                szObject += 9;
                GroupObjectType = CAccessControlListGroupObject::OBJECT_TYPE_RESOURCE;
            }
            else if ( StringBeginsWith ( szObject, "user." ) )
            {
                szObject += 5;
                GroupObjectType = CAccessControlListGroupObject::OBJECT_TYPE_USER;
            }
            else
            {
                // Invalid group type
                lua_pushboolean ( luaVM, false );
                return 1;
            }
            if ( pGroup->FindObjectMatch ( szObject, GroupObjectType ) )
            {
                lua_pushboolean ( luaVM, true );
                return 1;
            }
        }
    }
    lua_pushboolean ( luaVM, false );
    return 1;
}
예제 #2
0
int CLuaACLDefs::aclGroupAddObject ( lua_State* luaVM )
{
    // Verify the arguents
    if ( lua_type ( luaVM, 1 ) == LUA_TLIGHTUSERDATA &&
         lua_type ( luaVM, 2 ) == LUA_TSTRING )
    {
        // Grab the arguments
        CAccessControlListGroup* pGroup = lua_toaclgroup ( luaVM, 1 );
        const char* szObject = lua_tostring ( luaVM, 2 );

        // Verify the group and ACL
        if ( pGroup )
        {
            // Figure out what type of object this is
            const char* szObjectAfterDot = szObject;
            CAccessControlListGroupObject::EObjectType eType;
            if ( StringBeginsWith ( szObject, "resource." ) )
            {
                eType = CAccessControlListGroupObject::OBJECT_TYPE_RESOURCE;
                szObjectAfterDot += 9;
            }
            else if ( StringBeginsWith ( szObject, "user." ) )
            {
                eType = CAccessControlListGroupObject::OBJECT_TYPE_USER;
                szObjectAfterDot += 5;
            }
            else
            {
                lua_pushboolean ( luaVM, false );
                return 1;
            }

            // Make sure it doesn't already exist
            if ( !pGroup->FindObjectMatch ( szObjectAfterDot, eType ) )
            {
                // Set it
                pGroup->AddObject ( szObjectAfterDot, eType );
                CLogger::LogPrintf ( "ACL: %s: Object '%s' added to group '%s'\n", GetResourceName ( luaVM ), szObject, pGroup->GetGroupName () );

                // Return success
                lua_pushboolean ( luaVM, true );
                return 1;
            }
        }
    }
    else
        m_pScriptDebugging->LogBadType ( luaVM, "aclGroupAddObject" );

    lua_pushboolean ( luaVM, false );
    return 1;
}
예제 #3
0
int CLuaACLDefs::aclGroupAddObject ( lua_State* luaVM )
{
//  bool aclGroupAddObject ( aclgroup theGroup, string theObjectName )
    CAccessControlListGroup* pGroup; SString strObject;
    
    CScriptArgReader argStream ( luaVM );
    argStream.ReadUserData ( pGroup );
    argStream.ReadString ( strObject );
    
    if ( !argStream.HasErrors () )
    {
        // Figure out what type of object this is
        const char* szObjectAfterDot = strObject;
        CAccessControlListGroupObject::EObjectType eType;
        if ( StringBeginsWith ( strObject, "resource." ) )
        {
            eType = CAccessControlListGroupObject::OBJECT_TYPE_RESOURCE;
            szObjectAfterDot += 9;
        }
        else if ( StringBeginsWith ( strObject, "user." ) )
        {
            eType = CAccessControlListGroupObject::OBJECT_TYPE_USER;
            szObjectAfterDot += 5;
        }
        else
        {
            lua_pushboolean ( luaVM, false );
            return 1;
        }
        // Make sure it doesn't already exist
        if ( !pGroup->FindObjectMatch ( szObjectAfterDot, eType ) )
        {
            // Set it
            pGroup->AddObject ( szObjectAfterDot, eType );
            CLogger::LogPrintf ( "ACL: %s: Object '%s' added to group '%s'\n", GetResourceName ( luaVM ), strObject.c_str (), pGroup->GetGroupName () );
            // Return success
            lua_pushboolean ( luaVM, true );
            return 1;
        }
    }
    else
        m_pScriptDebugging->LogCustom ( luaVM, argStream.GetFullErrorMessage () );

    lua_pushboolean ( luaVM, false );
    return 1;
}
예제 #4
0
int CLuaACLDefs::isObjectInACLGroup ( lua_State* luaVM )
{
//  bool isObjectInACLGroup ( string theObject, aclgroup theGroup )
    SString strObject; CAccessControlListGroup* pGroup; CAccessControlListGroupObject::EObjectType GroupObjectType;
    
    CScriptArgReader argStream ( luaVM );
    argStream.ReadString ( strObject );
    argStream.ReadUserData ( pGroup );
    
    if ( !argStream.HasErrors () )
    {
        // Figure out what type of object this is
        const char* szObjectAfterDot = strObject;
        if ( StringBeginsWith ( strObject, "resource." ) ) {
            szObjectAfterDot += 9;
            GroupObjectType = CAccessControlListGroupObject::OBJECT_TYPE_RESOURCE;
        }
        else if ( StringBeginsWith ( strObject, "user." ) )
        {
            szObjectAfterDot += 5;
            GroupObjectType = CAccessControlListGroupObject::OBJECT_TYPE_USER;
        }
        else
        {
            // Invalid group type
            lua_pushboolean ( luaVM, false );
            return 1;
        }
        if ( pGroup->FindObjectMatch ( szObjectAfterDot, GroupObjectType ) )
        {
            lua_pushboolean ( luaVM, true );
            return 1;
        }
    }
    else
        m_pScriptDebugging->LogCustom ( luaVM, argStream.GetFullErrorMessage () );

    lua_pushboolean ( luaVM, false );
    return 1;
}