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]

Reply via email to