aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/extra/m_pgsql.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-01-16 04:12:50 +0000
committerGravatar Sadie Powell2023-01-16 04:12:50 +0000
commit3061793a748f8df3a2b78462ac6ae62962bb2b64 (patch)
treec696ef3bbceb16f8bc04a57e635420be02c728ce /src/modules/extra/m_pgsql.cpp
parentConvert the setidle module to use standard replies. (diff)
parentFix the cycle module sending a notice instead of ERR_BANNEDFROMCHAN. (diff)
downloadinspircd++-3061793a748f8df3a2b78462ac6ae62962bb2b64.tar.gz
inspircd++-3061793a748f8df3a2b78462ac6ae62962bb2b64.tar.bz2
inspircd++-3061793a748f8df3a2b78462ac6ae62962bb2b64.zip
Merge branch 'insp3' into master.
Diffstat (limited to 'src/modules/extra/m_pgsql.cpp')
-rw-r--r--src/modules/extra/m_pgsql.cpp37
1 files changed, 32 insertions, 5 deletions
diff --git a/src/modules/extra/m_pgsql.cpp b/src/modules/extra/m_pgsql.cpp
index 50a9e428b..99bd0ed79 100644
--- a/src/modules/extra/m_pgsql.cpp
+++ b/src/modules/extra/m_pgsql.cpp
@@ -248,25 +248,52 @@ public:
DelayReconnect();
}
+ std::string EscapeDSN(const std::string& str)
+ {
+ std::string out;
+ out.reserve(str.size());
+
+ for (std::string::const_iterator it = str.begin(); it != str.end(); ++it)
+ {
+ char chr = *it;
+ switch (chr)
+ {
+ case '\\':
+ out.append("\\\\");
+ break;
+
+ case '\'':
+ out.append("\\'");
+ break;
+
+ default:
+ out.push_back(chr);
+ break;
+ }
+ }
+
+ return out;
+ }
+
std::string GetDSN()
{
std::ostringstream conninfo("connect_timeout = '5'");
std::string item;
if (conf->readString("host", item))
- conninfo << " host = '" << item << "'";
+ conninfo << " host = '" << EscapeDSN(item) << "'";
if (conf->readString("port", item))
- conninfo << " port = '" << item << "'";
+ conninfo << " port = '" << EscapeDSN(item) << "'";
if (conf->readString("name", item))
- conninfo << " dbname = '" << item << "'";
+ conninfo << " dbname = '" << EscapeDSN(item) << "'";
if (conf->readString("user", item))
- conninfo << " user = '" << item << "'";
+ conninfo << " user = '" << EscapeDSN(item) << "'";
if (conf->readString("pass", item))
- conninfo << " password = '" << item << "'";
+ conninfo << " password = '" << EscapeDSN(item) << "'";
if (conf->getBool("tls", conf->getBool("ssl", true)))
conninfo << " sslmode = 'require'";