Index: net/http/mock_gssapi_library_posix.cc |
diff --git a/net/http/mock_gssapi_library_posix.cc b/net/http/mock_gssapi_library_posix.cc |
deleted file mode 100644 |
index b4d651461ec2aebb3acdeacd797a2e2db1e70678..0000000000000000000000000000000000000000 |
--- a/net/http/mock_gssapi_library_posix.cc |
+++ /dev/null |
@@ -1,480 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/http/mock_gssapi_library_posix.h" |
- |
-#include "base/logging.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/stringprintf.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace net { |
- |
-namespace test { |
- |
-struct GssNameMockImpl { |
- std::string name; |
- gss_OID_desc name_type; |
-}; |
- |
-} // namespace test |
- |
-namespace { |
- |
-// gss_OID helpers. |
-// NOTE: gss_OID's do not own the data they point to, which should be static. |
-void ClearOid(gss_OID dest) { |
- if (!dest) |
- return; |
- dest->length = 0; |
- dest->elements = NULL; |
-} |
- |
-void SetOid(gss_OID dest, const void* src, size_t length) { |
- if (!dest) |
- return; |
- ClearOid(dest); |
- if (!src) |
- return; |
- dest->length = length; |
- if (length) |
- dest->elements = const_cast<void*>(src); |
-} |
- |
-void CopyOid(gss_OID dest, const gss_OID_desc* src) { |
- if (!dest) |
- return; |
- ClearOid(dest); |
- if (!src) |
- return; |
- SetOid(dest, src->elements, src->length); |
-} |
- |
-// gss_buffer_t helpers. |
-void ClearBuffer(gss_buffer_t dest) { |
- if (!dest) |
- return; |
- dest->length = 0; |
- delete [] reinterpret_cast<char*>(dest->value); |
- dest->value = NULL; |
-} |
- |
-void SetBuffer(gss_buffer_t dest, const void* src, size_t length) { |
- if (!dest) |
- return; |
- ClearBuffer(dest); |
- if (!src) |
- return; |
- dest->length = length; |
- if (length) { |
- dest->value = new char[length]; |
- memcpy(dest->value, src, length); |
- } |
-} |
- |
-void CopyBuffer(gss_buffer_t dest, const gss_buffer_t src) { |
- if (!dest) |
- return; |
- ClearBuffer(dest); |
- if (!src) |
- return; |
- SetBuffer(dest, src->value, src->length); |
-} |
- |
-std::string BufferToString(const gss_buffer_t src) { |
- std::string dest; |
- if (!src) |
- return dest; |
- const char* string = reinterpret_cast<char*>(src->value); |
- dest.assign(string, src->length); |
- return dest; |
-} |
- |
-void BufferFromString(const std::string& src, gss_buffer_t dest) { |
- if (!dest) |
- return; |
- SetBuffer(dest, src.c_str(), src.length()); |
-} |
- |
-// gss_name_t helpers. |
-void ClearName(gss_name_t dest) { |
- if (!dest) |
- return; |
- test::GssNameMockImpl* name = reinterpret_cast<test::GssNameMockImpl*>(dest); |
- name->name.clear(); |
- ClearOid(&name->name_type); |
-} |
- |
-void SetName(gss_name_t dest, const void* src, size_t length) { |
- if (!dest) |
- return; |
- ClearName(dest); |
- if (!src) |
- return; |
- test::GssNameMockImpl* name = reinterpret_cast<test::GssNameMockImpl*>(dest); |
- name->name.assign(reinterpret_cast<const char*>(src), length); |
-} |
- |
-std::string NameToString(const gss_name_t& src) { |
- std::string dest; |
- if (!src) |
- return dest; |
- test::GssNameMockImpl* string = |
- reinterpret_cast<test::GssNameMockImpl*>(src); |
- dest = string->name; |
- return dest; |
-} |
- |
-void NameFromString(const std::string& src, gss_name_t dest) { |
- if (!dest) |
- return; |
- SetName(dest, src.c_str(), src.length()); |
-} |
- |
-} // namespace |
- |
-namespace test { |
- |
-GssContextMockImpl::GssContextMockImpl() |
- : lifetime_rec(0), |
- ctx_flags(0), |
- locally_initiated(0), |
- open(0) { |
- ClearOid(&mech_type); |
-} |
- |
-GssContextMockImpl::GssContextMockImpl(const GssContextMockImpl& other) |
- : src_name(other.src_name), |
- targ_name(other.targ_name), |
- lifetime_rec(other.lifetime_rec), |
- ctx_flags(other.ctx_flags), |
- locally_initiated(other.locally_initiated), |
- open(other.open) { |
- CopyOid(&mech_type, &other.mech_type); |
-} |
- |
-GssContextMockImpl::GssContextMockImpl(const char* src_name_in, |
- const char* targ_name_in, |
- OM_uint32 lifetime_rec_in, |
- const gss_OID_desc& mech_type_in, |
- OM_uint32 ctx_flags_in, |
- int locally_initiated_in, |
- int open_in) |
- : src_name(src_name_in ? src_name_in : ""), |
- targ_name(targ_name_in ? targ_name_in : ""), |
- lifetime_rec(lifetime_rec_in), |
- ctx_flags(ctx_flags_in), |
- locally_initiated(locally_initiated_in), |
- open(open_in) { |
- CopyOid(&mech_type, &mech_type_in); |
-} |
- |
-GssContextMockImpl::~GssContextMockImpl() { |
- ClearOid(&mech_type); |
-} |
- |
-void GssContextMockImpl::Assign( |
- const GssContextMockImpl& other) { |
- if (&other == this) |
- return; |
- src_name = other.src_name; |
- targ_name = other.targ_name; |
- lifetime_rec = other.lifetime_rec; |
- CopyOid(&mech_type, &other.mech_type); |
- ctx_flags = other.ctx_flags; |
- locally_initiated = other.locally_initiated; |
- open = other.open; |
-} |
- |
-MockGSSAPILibrary::SecurityContextQuery::SecurityContextQuery() |
- : expected_package(), |
- response_code(0), |
- minor_response_code(0), |
- context_info() { |
- expected_input_token.length = 0; |
- expected_input_token.value = NULL; |
- output_token.length = 0; |
- output_token.value = NULL; |
-} |
- |
-MockGSSAPILibrary::SecurityContextQuery::SecurityContextQuery( |
- const std::string& in_expected_package, |
- OM_uint32 in_response_code, |
- OM_uint32 in_minor_response_code, |
- const test::GssContextMockImpl& in_context_info, |
- const char* in_expected_input_token, |
- const char* in_output_token) |
- : expected_package(in_expected_package), |
- response_code(in_response_code), |
- minor_response_code(in_minor_response_code), |
- context_info(in_context_info) { |
- if (in_expected_input_token) { |
- expected_input_token.length = strlen(in_expected_input_token); |
- expected_input_token.value = const_cast<char*>(in_expected_input_token); |
- } else { |
- expected_input_token.length = 0; |
- expected_input_token.value = NULL; |
- } |
- |
- if (in_output_token) { |
- output_token.length = strlen(in_output_token); |
- output_token.value = const_cast<char*>(in_output_token); |
- } else { |
- output_token.length = 0; |
- output_token.value = NULL; |
- } |
-} |
- |
-MockGSSAPILibrary::SecurityContextQuery::~SecurityContextQuery() {} |
- |
-MockGSSAPILibrary::MockGSSAPILibrary() { |
-} |
- |
-MockGSSAPILibrary::~MockGSSAPILibrary() { |
-} |
- |
-void MockGSSAPILibrary::ExpectSecurityContext( |
- const std::string& expected_package, |
- OM_uint32 response_code, |
- OM_uint32 minor_response_code, |
- const GssContextMockImpl& context_info, |
- const gss_buffer_desc& expected_input_token, |
- const gss_buffer_desc& output_token) { |
- SecurityContextQuery security_query; |
- security_query.expected_package = expected_package; |
- security_query.response_code = response_code; |
- security_query.minor_response_code = minor_response_code; |
- security_query.context_info.Assign(context_info); |
- security_query.expected_input_token = expected_input_token; |
- security_query.output_token = output_token; |
- expected_security_queries_.push_back(security_query); |
-} |
- |
-bool MockGSSAPILibrary::Init() { |
- return true; |
-} |
- |
-// These methods match the ones in the GSSAPI library. |
-OM_uint32 MockGSSAPILibrary::import_name( |
- OM_uint32* minor_status, |
- const gss_buffer_t input_name_buffer, |
- const gss_OID input_name_type, |
- gss_name_t* output_name) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!output_name) |
- return GSS_S_BAD_NAME; |
- if (!input_name_buffer) |
- return GSS_S_CALL_BAD_STRUCTURE; |
- if (!input_name_type) |
- return GSS_S_BAD_NAMETYPE; |
- GssNameMockImpl* output = new GssNameMockImpl; |
- if (output == NULL) |
- return GSS_S_FAILURE; |
- output->name_type.length = 0; |
- output->name_type.elements = NULL; |
- |
- // Save the data. |
- output->name = BufferToString(input_name_buffer); |
- CopyOid(&output->name_type, input_name_type); |
- *output_name = reinterpret_cast<gss_name_t>(output); |
- |
- return GSS_S_COMPLETE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::release_name( |
- OM_uint32* minor_status, |
- gss_name_t* input_name) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!input_name) |
- return GSS_S_BAD_NAME; |
- if (!*input_name) |
- return GSS_S_COMPLETE; |
- GssNameMockImpl* name = *reinterpret_cast<GssNameMockImpl**>(input_name); |
- ClearName(*input_name); |
- delete name; |
- *input_name = NULL; |
- return GSS_S_COMPLETE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::release_buffer( |
- OM_uint32* minor_status, |
- gss_buffer_t buffer) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!buffer) |
- return GSS_S_BAD_NAME; |
- ClearBuffer(buffer); |
- return GSS_S_COMPLETE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::display_name( |
- OM_uint32* minor_status, |
- const gss_name_t input_name, |
- gss_buffer_t output_name_buffer, |
- gss_OID* output_name_type) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!input_name) |
- return GSS_S_BAD_NAME; |
- if (!output_name_buffer) |
- return GSS_S_CALL_BAD_STRUCTURE; |
- if (!output_name_type) |
- return GSS_S_CALL_BAD_STRUCTURE; |
- std::string name(NameToString(input_name)); |
- BufferFromString(name, output_name_buffer); |
- GssNameMockImpl* internal_name = |
- *reinterpret_cast<GssNameMockImpl**>(input_name); |
- if (output_name_type) |
- *output_name_type = internal_name ? &internal_name->name_type : NULL; |
- return GSS_S_COMPLETE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::display_status( |
- OM_uint32* minor_status, |
- OM_uint32 status_value, |
- int status_type, |
- const gss_OID mech_type, |
- OM_uint32* message_context, |
- gss_buffer_t status_string) { |
- if (minor_status) |
- *minor_status = 0; |
- std::string msg = base::StringPrintf("Value: %u, Type %u", |
- status_value, |
- status_type); |
- if (message_context) |
- *message_context = 0; |
- BufferFromString(msg, status_string); |
- return GSS_S_COMPLETE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::init_sec_context( |
- OM_uint32* minor_status, |
- const gss_cred_id_t initiator_cred_handle, |
- gss_ctx_id_t* context_handle, |
- const gss_name_t target_name, |
- const gss_OID mech_type, |
- OM_uint32 req_flags, |
- OM_uint32 time_req, |
- const gss_channel_bindings_t input_chan_bindings, |
- const gss_buffer_t input_token, |
- gss_OID* actual_mech_type, |
- gss_buffer_t output_token, |
- OM_uint32* ret_flags, |
- OM_uint32* time_rec) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!context_handle) |
- return GSS_S_CALL_BAD_STRUCTURE; |
- GssContextMockImpl** internal_context_handle = |
- reinterpret_cast<test::GssContextMockImpl**>(context_handle); |
- // Create it if necessary. |
- if (!*internal_context_handle) { |
- *internal_context_handle = new GssContextMockImpl; |
- } |
- EXPECT_TRUE(*internal_context_handle); |
- GssContextMockImpl& context = **internal_context_handle; |
- if (expected_security_queries_.empty()) { |
- return GSS_S_UNAVAILABLE; |
- } |
- SecurityContextQuery security_query = expected_security_queries_.front(); |
- expected_security_queries_.pop_front(); |
- EXPECT_EQ(std::string("Negotiate"), security_query.expected_package); |
- OM_uint32 major_status = security_query.response_code; |
- if (minor_status) |
- *minor_status = security_query.minor_response_code; |
- context.src_name = security_query.context_info.src_name; |
- context.targ_name = security_query.context_info.targ_name; |
- context.lifetime_rec = security_query.context_info.lifetime_rec; |
- CopyOid(&context.mech_type, &security_query.context_info.mech_type); |
- context.ctx_flags = security_query.context_info.ctx_flags; |
- context.locally_initiated = security_query.context_info.locally_initiated; |
- context.open = security_query.context_info.open; |
- if (!input_token) { |
- EXPECT_FALSE(security_query.expected_input_token.length); |
- } else { |
- EXPECT_EQ(input_token->length, security_query.expected_input_token.length); |
- if (input_token->length) { |
- EXPECT_EQ(0, memcmp(input_token->value, |
- security_query.expected_input_token.value, |
- input_token->length)); |
- } |
- } |
- CopyBuffer(output_token, &security_query.output_token); |
- if (actual_mech_type) |
- CopyOid(*actual_mech_type, mech_type); |
- if (ret_flags) |
- *ret_flags = req_flags; |
- return major_status; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::wrap_size_limit( |
- OM_uint32* minor_status, |
- const gss_ctx_id_t context_handle, |
- int conf_req_flag, |
- gss_qop_t qop_req, |
- OM_uint32 req_output_size, |
- OM_uint32* max_input_size) { |
- if (minor_status) |
- *minor_status = 0; |
- ADD_FAILURE(); |
- return GSS_S_UNAVAILABLE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::delete_sec_context( |
- OM_uint32* minor_status, |
- gss_ctx_id_t* context_handle, |
- gss_buffer_t output_token) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!context_handle) |
- return GSS_S_CALL_BAD_STRUCTURE; |
- GssContextMockImpl** internal_context_handle = |
- reinterpret_cast<GssContextMockImpl**>(context_handle); |
- if (*internal_context_handle) { |
- delete *internal_context_handle; |
- *internal_context_handle = NULL; |
- } |
- return GSS_S_COMPLETE; |
-} |
- |
-OM_uint32 MockGSSAPILibrary::inquire_context( |
- OM_uint32* minor_status, |
- const gss_ctx_id_t context_handle, |
- gss_name_t* src_name, |
- gss_name_t* targ_name, |
- OM_uint32* lifetime_rec, |
- gss_OID* mech_type, |
- OM_uint32* ctx_flags, |
- int* locally_initiated, |
- int* open) { |
- if (minor_status) |
- *minor_status = 0; |
- if (!context_handle) |
- return GSS_S_CALL_BAD_STRUCTURE; |
- GssContextMockImpl* internal_context_ptr = |
- reinterpret_cast<GssContextMockImpl*>(context_handle); |
- GssContextMockImpl& context = *internal_context_ptr; |
- if (src_name) |
- NameFromString(context.src_name, *src_name); |
- if (targ_name) |
- NameFromString(context.targ_name, *targ_name); |
- if (lifetime_rec) |
- *lifetime_rec = context.lifetime_rec; |
- if (mech_type) |
- CopyOid(*mech_type, &context.mech_type); |
- if (ctx_flags) |
- *ctx_flags = context.ctx_flags; |
- if (locally_initiated) |
- *locally_initiated = context.locally_initiated; |
- if (open) |
- *open = context.open; |
- return GSS_S_COMPLETE; |
-} |
- |
-} // namespace test |
- |
-} // namespace net |
- |