IniKeyDenylist
IniKeyDenylist
#Overview
name: IniKeyDenylist
The value of this variable can be defined or overridden in .ini config files. 51
.ini config files referencing this setting variable.
It is referenced in 8
C++ source files. Also referenced in 1
C# build file meaning it may affect the build system logic.
#Summary
#Usage in the C++ source code
The purpose of IniKeyDenylist is to specify a list of configuration keys that should be removed from packaged builds of a game or application in Unreal Engine 5. This setting variable is primarily used for the packaging and configuration management system.
The IniKeyDenylist is primarily used by the packaging system in Unreal Engine 5. It is referenced in various modules and plugins, including:
- EOSShared plugin
- OnlineServicesEOSGS plugin
- OnlineSubsystemEOS plugin
- DeveloperToolSettings module
- PakFileUtilities module
- UnrealEd module
The value of this variable is set in the project’s configuration files, specifically in the ProjectPackagingSettings section of the game’s INI file (typically DefaultGame.ini).
IniKeyDenylist interacts with other configuration-related variables, such as IniSectionDenylist, which is used to remove entire sections from the configuration files during packaging.
Developers must be aware that using IniKeyDenylist will remove sensitive or unnecessary configuration keys from the packaged build. This is particularly important for keys containing sensitive information like encryption keys or client secrets.
Best practices when using this variable include:
- Carefully consider which keys should be added to the denylist to ensure that necessary configuration is not accidentally removed.
- Use IniKeyDenylist in conjunction with IniSectionDenylist for more comprehensive control over configuration stripping.
- Ensure that any keys added to the denylist are properly handled in the code, with fallback mechanisms or alternative ways to provide the necessary information.
- Regularly review and update the denylist as project requirements change.
- Be cautious when packaging builds and verify that the removal of denylisted keys doesn’t negatively impact the application’s functionality.
#Setting Variables
#References In INI files
<Workspace>/Engine/Config/BaseGame.ini:137, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:138, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:139, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:140, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:141, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:142, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:143, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:144, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:145, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:146, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:147, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:148, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:149, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:150, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:151, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:152, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Engine/Config/BaseGame.ini:153, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:145, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:146, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:147, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:148, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:149, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:150, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:151, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:152, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:153, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:154, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:155, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:156, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:157, section: [/Script/UnrealEd.ProjectPackagingSettings]
<Workspace>/Projects/Lyra/Config/DefaultGame.ini:158, section: [/Script/UnrealEd.ProjectPackagingSettings]
... omitting 21 locations ...
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Online/EOSShared/Source/EOSShared/Private/EOSSDKManager.cpp:331
Scope (from outer to inner):
file
function const FEOSSDKPlatformConfig* FEOSSDKManager::GetPlatformConfig
Source code excerpt:
if (GConfig->GetString(*SectionName, TEXT("EncryptionKey"), PlatformConfig->EncryptionKey, GEngineIni))
{
// EncryptionKey gets removed from packaged builds due to IniKeyDenylist=EncryptionKey entry in BaseGame.ini.
// Normally we could just add a remap in ConfigRedirects.ini but the section name varies with the PlatformConfigName.
UE_LOG(LogEOSSDK, Warning, TEXT("Config section \"EOSSDK.Platform.%s\" contains deprecated key EncryptionKey, please migrate to ClientEncryptionKey."), *PlatformConfigName);
}
GConfig->GetString(*SectionName, TEXT("ClientEncryptionKey"), PlatformConfig->EncryptionKey, GEngineIni);
GConfig->GetString(*SectionName, TEXT("OverrideCountryCode"), PlatformConfig->OverrideCountryCode, GEngineIni);
GConfig->GetString(*SectionName, TEXT("OverrideLocaleCode"), PlatformConfig->OverrideLocaleCode, GEngineIni);
#Loc: <Workspace>/Engine/Plugins/Online/OnlineServicesEOSGS/Source/Private/Online/OnlineServicesEOSGSPlatformFactory.cpp:57
Scope (from outer to inner):
file
function FString LoadEOSPlatformConfig
Source code excerpt:
GConfig->GetString(*ConfigSectionName, TEXT("ClientId"), PlatformConfig.ClientId, GEngineIni);
GConfig->GetString(*ConfigSectionName, TEXT("ClientSecret"), PlatformConfig.ClientSecret, GEngineIni);
// Config key renamed to ClientEncryptionKey as EncryptionKey gets removed from packaged builds due to IniKeyDenylist=EncryptionKey entry in BaseGame.ini.
GConfig->GetString(*ConfigSectionName, TEXT("ClientEncryptionKey"), PlatformConfig.EncryptionKey, GEngineIni);
PlatformConfig.CacheDirectory = SDKManager->GetCacheDirBase() / TEXT("OnlineServicesEOS");
PlatformConfig.bIsServer = IsRunningDedicatedServer() ? EOS_TRUE : EOS_FALSE;
if (!IsRunningGame())
#Loc: <Workspace>/Engine/Plugins/Online/OnlineSubsystemEOS/Source/OnlineSubsystemEOS/Public/EOSSettings.h:58
Scope: file
Source code excerpt:
UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category="EOS Artifact Settings")
// Config key renamed to ClientEncryptionKey as EncryptionKey gets removed from packaged builds due to IniKeyDenylist=EncryptionKey entry in BaseGame.ini.
FString ClientEncryptionKey;
FEOSArtifactSettings ToNative() const;
};
/** Native version of the UObject based config data */
#Loc: <Workspace>/Engine/Source/Developer/DeveloperToolSettings/Classes/Settings/ProjectPackagingSettings.h:547
Scope (from outer to inner):
file
class class UProjectPackagingSettings : public UObject
Source code excerpt:
/** List of ini file keys to strip when packaging */
UPROPERTY(config, EditAnywhere, Category = Packaging)
TArray<FString> IniKeyDenylist;
UE_DEPRECATED(5.1, "This property is no longer supported. Use IniSectionDenylist.")
UPROPERTY(config /*, EditAnywhere, Category = Packaging */, meta = (DeprecatedProperty, DeprecationMessage = "This property is no longer supported. Use IniSectionDenylist."))
TArray<FString> IniSectionBlacklist;
/** List of ini file sections to strip when packaging */
#Loc: <Workspace>/Engine/Source/Developer/PakFileUtilities/Private/PakFileUtilities.cpp:5378
Scope (from outer to inner):
file
function bool MakeBinaryConfig
Source code excerpt:
TArray<FString> KeyDenyListStrings;
TArray<FString> SectionsDenyList;
GConfig->GetArray(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("IniKeyDenylist"), KeyDenyListStrings, GGameIni);
GConfig->GetArray(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("IniSectionDenylist"), SectionsDenyList, GGameIni);
TArray<FName> KeysDenyList;
for (const FString& Key : KeyDenyListStrings)
{
KeysDenyList.Add(FName(*Key));
}
#Loc: <Workspace>/Engine/Source/Developer/PakFileUtilities/Private/PakFileUtilities.cpp:5410
Scope (from outer to inner):
file
function bool MakeBinaryConfig
Source code excerpt:
// check the deny list removed itself
KeyDenyListStrings.Empty();
Config.GetArray(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("IniKeyDenylist"), KeyDenyListStrings, GGameIni);
check(KeyDenyListStrings.Num() == 0);
// allow delegates to modify the config data with some tagged binary data
FCoreDelegates::FExtraBinaryConfigData ExtraData(Config, true);
FCoreDelegates::TSAccessExtraBinaryConfigData().Broadcast(ExtraData);
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Commandlets/MakeBinaryConfigCommandlet.cpp:61
Scope (from outer to inner):
file
function int32 UMakeBinaryConfigCommandlet::Main
Source code excerpt:
TArray<FString> KeyDenyListStrings;
TArray<FString> SectionsDenyList;
GConfig->GetArray(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("IniKeyDenylist"), KeyDenyListStrings, GGameIni);
GConfig->GetArray(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("IniSectionDenylist"), SectionsDenyList, GGameIni);
TArray<FName> KeysDenyList;
for (FString Key : KeyDenyListStrings)
{
KeysDenyList.Add(FName(*Key));
}
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Commandlets/MakeBinaryConfigCommandlet.cpp:93
Scope (from outer to inner):
file
function int32 UMakeBinaryConfigCommandlet::Main
Source code excerpt:
// check the deny list removed itself
KeyDenyListStrings.Empty();
Config.GetArray(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("IniKeyDenylist"), KeyDenyListStrings, GGameIni);
check(KeyDenyListStrings.Num() == 0);
// allow delegates to modify the config data with some tagged binary data
FCoreDelegates::FExtraBinaryConfigData ExtraData(Config, true);
FCoreDelegates::TSAccessExtraBinaryConfigData().Broadcast(ExtraData);
#References in C# build files
This variable is referenced in the following C# build files:
Location: <Workspace>/Engine/Source/Programs/AutomationTool/AutomationUtils/DeploymentContext.cs:616
// Read the config deny lists
GameConfig.GetArray(PackagingIniPath, "IniKeyDenylist", out IniKeyDenyList);
GameConfig.GetArray(PackagingIniPath, "IniSectionDenylist", out IniSectionDenyList);
// TODO: Drive these lists from a config file
IniSuffixAllowList = new List<string>
{
".ini",