From c39cf6845d6d946665b36611152f7702a6b1074f Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 30 Jan 2008 12:18:53 +0000 Subject: Parse out the userid and password from the response; a small step on the road to authentication. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@616736 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/ConnectionHandler.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'cpp/src/qpid/broker/ConnectionHandler.cpp') diff --git a/cpp/src/qpid/broker/ConnectionHandler.cpp b/cpp/src/qpid/broker/ConnectionHandler.cpp index dd645b595e..45c2f29d87 100644 --- a/cpp/src/qpid/broker/ConnectionHandler.cpp +++ b/cpp/src/qpid/broker/ConnectionHandler.cpp @@ -29,10 +29,17 @@ using namespace qpid; using namespace qpid::broker; using namespace qpid::framing; + +namespace +{ +const std::string PLAIN = "PLAIN"; +const std::string en_US = "en_US"; +} + void ConnectionHandler::init(const framing::ProtocolInitiation& header) { FieldTable properties; - string mechanisms("PLAIN"); - string locales("en_US"); + string mechanisms(PLAIN); + string locales(en_US); handler->client.start(header.getMajor(), header.getMinor(), properties, mechanisms, locales); } @@ -59,9 +66,20 @@ ConnectionHandler::ConnectionHandler(Connection& connection) : handler(new Hand ConnectionHandler::Handler:: Handler(Connection& c) : client(c.getOutput()), connection(c) {} void ConnectionHandler::Handler::startOk(const FieldTable& /*clientProperties*/, - const string& /*mechanism*/, - const string& /*response*/, const string& /*locale*/) + const string& mechanism, + const string& response, const string& /*locale*/) { + //TODO: handle SASL mechanisms more cleverly + if (mechanism == PLAIN) { + if (response.size() > 0 && response[0] == (char) 0) { + string temp = response.substr(1); + string::size_type i = temp.find((char)0); + string uid = temp.substr(0, i); + string pwd = temp.substr(i + 1); + //TODO: authentication + connection.setUserId(uid); + } + } client.tune(framing::CHANNEL_MAX, connection.getFrameMax(), connection.getHeartbeat()); } -- cgit v1.2.1