aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Tools/PlayerDump.cpp9
-rwxr-xr-xsrc/server/game/World/World.cpp4
-rwxr-xr-xsrc/server/game/World/World.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist14
4 files changed, 29 insertions, 0 deletions
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index 8f888f8fb85..92fa001fe46 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -352,6 +352,15 @@ bool PlayerDumpWriter::GetDump(uint32 guid, std::string &dump)
DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, uint32 guid)
{
+ if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_PATHS))
+ if (strstr(file.c_str(), "\\") || strstr(file.c_str(), "/"))
+ return DUMP_FILE_OPEN_ERROR;
+ if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_OVERWRITE))
+ if (FILE* f = fopen(file.c_str(), "r"))
+ {
+ fclose(f);
+ return DUMP_FILE_OPEN_ERROR;
+ }
FILE* fout = fopen(file.c_str(), "w");
if (!fout)
return DUMP_FILE_OPEN_ERROR;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 390c5de3f64..34b93c71fb4 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1189,6 +1189,10 @@ void World::LoadConfigSettings(bool reload)
// MySQL ping time interval
m_int_configs[CONFIG_DB_PING_INTERVAL] = ConfigMgr::GetIntDefault("MaxPingTime", 30);
+ // misc
+ m_bool_configs[CONFIG_PDUMP_NO_PATHS] = ConfigMgr::GetBoolDefault("PlayerDump.DisallowPaths", true);
+ m_bool_configs[CONFIG_PDUMP_NO_OVERWRITE] = ConfigMgr::GetBoolDefault("PlayerDump.DisallowOverwrite", true);
+
sScriptMgr->OnConfigLoad(reload);
}
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index e8d962281cd..7430dd22420 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -158,6 +158,8 @@ enum WorldBoolConfigs
CONFIG_ALLOW_TICKETS,
CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES,
CONFIG_PRESERVE_CUSTOM_CHANNELS,
+ CONFIG_PDUMP_NO_PATHS,
+ CONFIG_PDUMP_NO_OVERWRITE,
BOOL_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index c894bf8afb7..a8c0d91b2e6 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -2770,4 +2770,18 @@ LevelReq.Auction = 1
LevelReq.Mail = 1
#
+# PlayerDump.DisallowPaths
+# Description: Disallow using paths in PlayerDump output files
+# Default: 1
+
+PlayerDump.DisallowPaths = 1
+
+#
+# PlayerDump.DisallowOverwrite
+# Description: Disallow overwriting existing files with PlayerDump
+# Default: 1
+
+PlayerDump.DisallowOverwrite = 1
+
+#
###################################################################################################