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