Author: gsim
Date: Fri May 29 12:25:00 2015
New Revision: 1682440
URL: http://svn.apache.org/r1682440
Log:
QPID-6559: add PLAIN support for NullSaslClient
Modified:
qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.cpp
qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.h
qpid/trunk/qpid/cpp/src/qpid/SaslFactory.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.cpp?rev=1682440&r1=1682439&r2=1682440&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.cpp Fri May 29 12:25:00 2015
@@ -25,15 +25,25 @@
namespace qpid {
namespace {
const std::string ANONYMOUS("ANONYMOUS");
+const std::string PLAIN("PLAIN");
}
-bool NullSaslClient::start(const std::string& mechanisms, std::string&,
- const qpid::sys::SecuritySettings*)
+NullSaslClient::NullSaslClient(const std::string& u, const std::string& p) :
username(u), password(p) {}
+
+bool NullSaslClient::start(const std::string& mechanisms, std::string&
response,
+ const qpid::sys::SecuritySettings*)
{
- if (mechanisms.find(ANONYMOUS) == std::string::npos) {
+ if (!username.empty() && !password.empty() && mechanisms.find(PLAIN) !=
std::string::npos) {
+ mechanism = PLAIN;
+ response = ((char)0) + username + ((char)0) + password;
+ } else if (mechanisms.find(ANONYMOUS) != std::string::npos) {
+ mechanism = ANONYMOUS;
+ const char* u = username.empty() ? ANONYMOUS.c_str() :
username.c_str();
+ response = ((char)0) + u;
+ } else {
throw qpid::Exception("No suitable mechanism!");
}
- return false;
+ return true;
}
std::string NullSaslClient::step(const std::string&)
{
@@ -41,11 +51,11 @@ std::string NullSaslClient::step(const s
}
std::string NullSaslClient::getMechanism()
{
- return ANONYMOUS;
+ return mechanism;
}
std::string NullSaslClient::getUserId()
{
- return ANONYMOUS;
+ return username.empty() ? ANONYMOUS : username;
}
std::auto_ptr<qpid::sys::SecurityLayer>
NullSaslClient::getSecurityLayer(uint16_t)
{
Modified: qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.h
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.h?rev=1682440&r1=1682439&r2=1682440&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/NullSaslClient.h Fri May 29 12:25:00 2015
@@ -28,6 +28,7 @@ namespace qpid {
class NullSaslClient : public Sasl
{
public:
+ NullSaslClient(const std::string& username, const std::string& password);
bool start(const std::string& mechanisms, std::string& response,
const qpid::sys::SecuritySettings*
externalSecuritySettings = 0);
std::string step(const std::string& challenge);
@@ -35,6 +36,9 @@ class NullSaslClient : public Sasl
std::string getUserId();
std::auto_ptr<qpid::sys::SecurityLayer> getSecurityLayer(uint16_t
maxFrameSize);
private:
+ const std::string username;
+ const std::string password;
+ std::string mechanism;
};
} // namespace qpid
Modified: qpid/trunk/qpid/cpp/src/qpid/SaslFactory.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/SaslFactory.cpp?rev=1682440&r1=1682439&r2=1682440&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/SaslFactory.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/SaslFactory.cpp Fri May 29 12:25:00 2015
@@ -47,9 +47,9 @@ SaslFactory& SaslFactory::getInstance()
return *instance;
}
-std::auto_ptr<Sasl> SaslFactory::create( const std::string &, const
std::string &, const std::string &, const std::string &, int, int, bool )
+std::auto_ptr<Sasl> SaslFactory::create(const std::string& username, const
std::string& password, const std::string&, const std::string&, int, int, bool)
{
- std::auto_ptr<Sasl> client(new NullSaslClient);
+ std::auto_ptr<Sasl> client(new NullSaslClient(username, password));
return client;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]