diff options
Diffstat (limited to 'src/mongo/client/sasl_client_authenticate.cpp')
-rw-r--r-- | src/mongo/client/sasl_client_authenticate.cpp | 94 |
1 files changed, 46 insertions, 48 deletions
diff --git a/src/mongo/client/sasl_client_authenticate.cpp b/src/mongo/client/sasl_client_authenticate.cpp index 7b50cbc8dc8..e7ad3e57ece 100644 --- a/src/mongo/client/sasl_client_authenticate.cpp +++ b/src/mongo/client/sasl_client_authenticate.cpp @@ -36,58 +36,56 @@ namespace mongo { - using namespace mongoutils; +using namespace mongoutils; - Status (*saslClientAuthenticate)(DBClientWithCommands* client, - const BSONObj& saslParameters) = NULL; +Status (*saslClientAuthenticate)(DBClientWithCommands* client, + const BSONObj& saslParameters) = NULL; - const char* const saslStartCommandName = "saslStart"; - const char* const saslContinueCommandName = "saslContinue"; - const char* const saslCommandAutoAuthorizeFieldName = "autoAuthorize"; - const char* const saslCommandCodeFieldName = "code"; - const char* const saslCommandConversationIdFieldName = "conversationId"; - const char* const saslCommandDoneFieldName = "done"; - const char* const saslCommandErrmsgFieldName = "errmsg"; - const char* const saslCommandMechanismFieldName = "mechanism"; - const char* const saslCommandMechanismListFieldName = "supportedMechanisms"; - const char* const saslCommandPasswordFieldName = "pwd"; - const char* const saslCommandPayloadFieldName = "payload"; - const char* const saslCommandUserDBFieldName = "db"; - const char* const saslCommandUserFieldName = "user"; - const char* const saslCommandServiceHostnameFieldName = "serviceHostname"; - const char* const saslCommandServiceNameFieldName = "serviceName"; - const char* const saslCommandDigestPasswordFieldName = "digestPassword"; - const char* const saslDefaultDBName = "$external"; - const char* const saslDefaultServiceName = "mongodb"; +const char* const saslStartCommandName = "saslStart"; +const char* const saslContinueCommandName = "saslContinue"; +const char* const saslCommandAutoAuthorizeFieldName = "autoAuthorize"; +const char* const saslCommandCodeFieldName = "code"; +const char* const saslCommandConversationIdFieldName = "conversationId"; +const char* const saslCommandDoneFieldName = "done"; +const char* const saslCommandErrmsgFieldName = "errmsg"; +const char* const saslCommandMechanismFieldName = "mechanism"; +const char* const saslCommandMechanismListFieldName = "supportedMechanisms"; +const char* const saslCommandPasswordFieldName = "pwd"; +const char* const saslCommandPayloadFieldName = "payload"; +const char* const saslCommandUserDBFieldName = "db"; +const char* const saslCommandUserFieldName = "user"; +const char* const saslCommandServiceHostnameFieldName = "serviceHostname"; +const char* const saslCommandServiceNameFieldName = "serviceName"; +const char* const saslCommandDigestPasswordFieldName = "digestPassword"; +const char* const saslDefaultDBName = "$external"; +const char* const saslDefaultServiceName = "mongodb"; - Status saslExtractPayload(const BSONObj& cmdObj, std::string* payload, BSONType* type) { - BSONElement payloadElement; - Status status = bsonExtractField(cmdObj, saslCommandPayloadFieldName, &payloadElement); - if (!status.isOK()) - return status; +Status saslExtractPayload(const BSONObj& cmdObj, std::string* payload, BSONType* type) { + BSONElement payloadElement; + Status status = bsonExtractField(cmdObj, saslCommandPayloadFieldName, &payloadElement); + if (!status.isOK()) + return status; - *type = payloadElement.type(); - if (payloadElement.type() == BinData) { - const char* payloadData; - int payloadLen; - payloadData = payloadElement.binData(payloadLen); - if (payloadLen < 0) - return Status(ErrorCodes::InvalidLength, "Negative payload length"); - *payload = std::string(payloadData, payloadData + payloadLen); + *type = payloadElement.type(); + if (payloadElement.type() == BinData) { + const char* payloadData; + int payloadLen; + payloadData = payloadElement.binData(payloadLen); + if (payloadLen < 0) + return Status(ErrorCodes::InvalidLength, "Negative payload length"); + *payload = std::string(payloadData, payloadData + payloadLen); + } else if (payloadElement.type() == String) { + try { + *payload = base64::decode(payloadElement.str()); + } catch (UserException& e) { + return Status(ErrorCodes::FailedToParse, e.what()); } - else if (payloadElement.type() == String) { - try { - *payload = base64::decode(payloadElement.str()); - } catch (UserException& e) { - return Status(ErrorCodes::FailedToParse, e.what()); - } - } - else { - return Status(ErrorCodes::TypeMismatch, - (str::stream() << "Wrong type for field; expected BinData or String for " - << payloadElement)); - } - - return Status::OK(); + } else { + return Status(ErrorCodes::TypeMismatch, + (str::stream() << "Wrong type for field; expected BinData or String for " + << payloadElement)); } + + return Status::OK(); +} } // namespace mongo |