diff options
-rw-r--r-- | src/smb.hpp | 1 | ||||
-rw-r--r-- | src/utils.hpp | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/smb.hpp b/src/smb.hpp index 6a0db0b..a77dba3 100644 --- a/src/smb.hpp +++ b/src/smb.hpp @@ -35,6 +35,7 @@ class SmbShare else { LogMsg(Logger::Info, "Authenticating as ", credentials->user()); + credentials->escapeCommas(); credentialsOpt = "user=" + credentials->user() + ",password=" + credentials->password(); } diff --git a/src/utils.hpp b/src/utils.hpp index f0d71d6..ebbdaf6 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -46,13 +46,39 @@ class Credentials return passBuf; } + void escapeCommas() + { + if (!commasEscaped) + { + escapeComma(userBuf); + escapeComma(passBuf); + commasEscaped = true; + } + } + private: Credentials() = delete; Credentials(const Credentials&) = delete; Credentials& operator=(const Credentials&) = delete; + /* escape ',' (coma) by ',,' */ + void escapeComma(std::string& s) + { + std::string temp; + std::for_each(s.begin(), s.end(), [&temp](const auto& c) { + *std::back_inserter(temp) = c; + if (c == ',') + { + *std::back_inserter(temp) = c; + } + }); + std::swap(s, temp); + secureCleanup(temp); + } + std::string userBuf; std::string passBuf; + bool commasEscaped{false}; }; class CredentialsProvider @@ -83,6 +109,11 @@ class CredentialsProvider { } + void escapeCommas() + { + credentials.escapeCommas(); + } + const std::string& user() { return credentials.user(); |