Author: tross
Date: Tue Sep 22 18:58:59 2009
New Revision: 817770

URL: http://svn.apache.org/viewvc?rev=817770&view=rev
Log:
QPID-2112 - C++ Client: Facility needed for app to extract the user-ID in use 
for a connection

Modified:
    qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
    qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h
    qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
    qpid/trunk/qpid/cpp/src/qpid/client/Sasl.h
    qpid/trunk/qpid/cpp/src/qpid/client/SaslFactory.cpp
    qpid/trunk/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp?rev=817770&r1=817769&r2=817770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.cpp Tue Sep 22 
18:58:59 2009
@@ -257,6 +257,7 @@
         knownBrokersUrls.push_back(Url((*i)->get<std::string>()));
     if (sasl.get()) {
         securityLayer = sasl->getSecurityLayer(maxFrameSize);
+        operUserId = sasl->getUserId();
     }
     setState(OPEN);
     QPID_LOG(debug, "Known-brokers for connection: " << 
log::formatList(knownBrokersUrls));

Modified: qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h?rev=817770&r1=817769&r2=817770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/ConnectionHandler.h Tue Sep 22 18:58:59 
2009
@@ -71,6 +71,7 @@
     std::auto_ptr<Sasl> sasl;
     std::auto_ptr<qpid::sys::SecurityLayer> securityLayer;
     boost::intrusive_ptr<qpid::sys::TimerTask> rcvTimeoutTask;
+    std::string operUserId;
 
     void checkState(STATES s, const std::string& msg);
 
@@ -120,6 +121,7 @@
     std::vector<Url> knownBrokersUrls;
 
     static framing::connection::CloseCode convert(uint16_t replyCode);
+    const std::string& getUserId() const { return operUserId; }
 };
 
 }}

Modified: qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp?rev=817770&r1=817769&r2=817770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/ConnectionImpl.cpp Tue Sep 22 18:58:59 
2009
@@ -151,6 +151,12 @@
  
     handler.waitForOpen();
 
+    // If the SASL layer has provided an "operational" userId for the 
connection,
+    // put it in the negotiated settings.
+    const std::string& userId(handler.getUserId());
+    if (!userId.empty())
+        handler.username = userId;
+
     //enable security layer if one has been negotiated:
     std::auto_ptr<SecurityLayer> securityLayer = handler.getSecurityLayer();
     if (securityLayer.get()) {

Modified: qpid/trunk/qpid/cpp/src/qpid/client/Sasl.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/Sasl.h?rev=817770&r1=817769&r2=817770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/Sasl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/Sasl.h Tue Sep 22 18:58:59 2009
@@ -45,6 +45,7 @@
     virtual std::string start(const std::string& mechanisms) = 0;
     virtual std::string step(const std::string& challenge) = 0;
     virtual std::string getMechanism() = 0;
+    virtual std::string getUserId() = 0;
     virtual std::auto_ptr<qpid::sys::SecurityLayer> getSecurityLayer(uint16_t 
maxFrameSize) = 0;    
     virtual ~Sasl() {}
 };

Modified: qpid/trunk/qpid/cpp/src/qpid/client/SaslFactory.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/SaslFactory.cpp?rev=817770&r1=817769&r2=817770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/SaslFactory.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/SaslFactory.cpp Tue Sep 22 18:58:59 2009
@@ -82,6 +82,7 @@
     std::string start(const std::string& mechanisms);
     std::string step(const std::string& challenge);
     std::string getMechanism();
+    std::string getUserId();
     std::auto_ptr<SecurityLayer> getSecurityLayer(uint16_t maxFrameSize);
   private:
     sasl_conn_t* conn;    
@@ -266,6 +267,18 @@
     return mechanism;
 }
 
+std::string CyrusSasl::getUserId()
+{
+    int propResult;
+    const char* operName;
+
+    propResult = sasl_getprop(conn, SASL_USERNAME, (const void**) &operName);
+    if (propResult == SASL_OK)
+        return std::string(operName);
+
+    return std::string();
+}
+
 void CyrusSasl::interact(sasl_interact_t* client_interact)
 {
 

Modified: qpid/trunk/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp?rev=817770&r1=817769&r2=817770&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp Tue Sep 22 
18:58:59 2009
@@ -43,6 +43,7 @@
     std::string start(const std::string& mechanisms);
     std::string step(const std::string& challenge);
     std::string getMechanism();
+    std::string getUserId();
     std::auto_ptr<SecurityLayer> getSecurityLayer(uint16_t maxFrameSize);
   private:
     ConnectionSettings settings;
@@ -131,6 +132,11 @@
     return mechanism;
 }
 
+std::string WindowsSasl::getUserId()
+{
+    return std::string(); // TODO - when GSSAPI is supported, return userId 
for connection.
+}
+
 std::auto_ptr<SecurityLayer> WindowsSasl::getSecurityLayer(uint16_t 
maxFrameSize)
 {
     return std::auto_ptr<SecurityLayer>(0);



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to