1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/http/mock_gssapi_library_posix.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/third_party/gssapi/gssapi.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace net { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace test { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct GssNameMockImpl { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string name; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_OID_desc name_type; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace test 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// gss_OID helpers. 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NOTE: gss_OID's do not own the data they point to, which should be static. 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ClearOid(gss_OID dest) { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->length = 0; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->elements = NULL; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetOid(gss_OID dest, const void* src, size_t length) { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearOid(dest); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->length = length; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (length) 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->elements = const_cast<void*>(src); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CopyOid(gss_OID dest, const gss_OID_desc* src) { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearOid(dest); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetOid(dest, src->elements, src->length); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// gss_buffer_t helpers. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ClearBuffer(gss_buffer_t dest) { 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->length = 0; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete [] reinterpret_cast<char*>(dest->value); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->value = NULL; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetBuffer(gss_buffer_t dest, const void* src, size_t length) { 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearBuffer(dest); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->length = length; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (length) { 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest->value = new char[length]; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch memcpy(dest->value, src, length); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CopyBuffer(gss_buffer_t dest, const gss_buffer_t src) { 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearBuffer(dest); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetBuffer(dest, src->value, src->length); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string BufferToString(const gss_buffer_t src) { 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string dest; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return dest; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* string = reinterpret_cast<char*>(src->value); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest.assign(string, src->length); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return dest; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BufferFromString(const std::string& src, gss_buffer_t dest) { 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetBuffer(dest, src.c_str(), src.length()); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// gss_name_t helpers. 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ClearName(gss_name_t dest) { 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test::GssNameMockImpl* name = reinterpret_cast<test::GssNameMockImpl*>(dest); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name->name.clear(); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearOid(&name->name_type); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetName(gss_name_t dest, const void* src, size_t length) { 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearName(dest); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test::GssNameMockImpl* name = reinterpret_cast<test::GssNameMockImpl*>(dest); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name->name.assign(reinterpret_cast<const char*>(src), length); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string NameToString(const gss_name_t& src) { 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string dest; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!src) 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return dest; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test::GssNameMockImpl* string = 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch reinterpret_cast<test::GssNameMockImpl*>(src); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dest = string->name; 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return dest; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NameFromString(const std::string& src, gss_name_t dest) { 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dest) 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetName(dest, src.c_str(), src.length()); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace test { 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGssContextMockImpl::GssContextMockImpl() 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : lifetime_rec(0), 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ctx_flags(0), 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch locally_initiated(0), 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch open(0) { 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearOid(&mech_type); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGssContextMockImpl::GssContextMockImpl(const GssContextMockImpl& other) 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : src_name(other.src_name), 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch targ_name(other.targ_name), 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch lifetime_rec(other.lifetime_rec), 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ctx_flags(other.ctx_flags), 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch locally_initiated(other.locally_initiated), 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch open(other.open) { 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(&mech_type, &other.mech_type); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGssContextMockImpl::GssContextMockImpl(const char* src_name_in, 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* targ_name_in, 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 lifetime_rec_in, 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_OID_desc& mech_type_in, 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 ctx_flags_in, 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int locally_initiated_in, 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int open_in) 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : src_name(src_name_in ? src_name_in : ""), 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch targ_name(targ_name_in ? targ_name_in : ""), 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch lifetime_rec(lifetime_rec_in), 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ctx_flags(ctx_flags_in), 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch locally_initiated(locally_initiated_in), 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch open(open_in) { 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(&mech_type, &mech_type_in); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGssContextMockImpl::~GssContextMockImpl() { 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearOid(&mech_type); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GssContextMockImpl::Assign( 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GssContextMockImpl& other) { 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (&other == this) 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch src_name = other.src_name; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch targ_name = other.targ_name; 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch lifetime_rec = other.lifetime_rec; 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(&mech_type, &other.mech_type); 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ctx_flags = other.ctx_flags; 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch locally_initiated = other.locally_initiated; 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch open = other.open; 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenMockGSSAPILibrary::SecurityContextQuery::SecurityContextQuery() 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : expected_package(), 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen response_code(0), 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen minor_response_code(0), 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen context_info() { 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_input_token.length = 0; 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_input_token.value = NULL; 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output_token.length = 0; 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output_token.value = NULL; 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenMockGSSAPILibrary::SecurityContextQuery::SecurityContextQuery( 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& in_expected_package, 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OM_uint32 in_response_code, 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OM_uint32 in_minor_response_code, 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const test::GssContextMockImpl& in_context_info, 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char* in_expected_input_token, 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const char* in_output_token) 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : expected_package(in_expected_package), 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen response_code(in_response_code), 21172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen minor_response_code(in_minor_response_code), 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen context_info(in_context_info) { 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (in_expected_input_token) { 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_input_token.length = strlen(in_expected_input_token); 21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_input_token.value = const_cast<char*>(in_expected_input_token); 21672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_input_token.length = 0; 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_input_token.value = NULL; 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (in_output_token) { 22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output_token.length = strlen(in_output_token); 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output_token.value = const_cast<char*>(in_output_token); 22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 22572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output_token.length = 0; 22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output_token.value = NULL; 22772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 22872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenMockGSSAPILibrary::SecurityContextQuery::~SecurityContextQuery() {} 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochMockGSSAPILibrary::MockGSSAPILibrary() { 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochMockGSSAPILibrary::~MockGSSAPILibrary() { 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid MockGSSAPILibrary::ExpectSecurityContext( 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& expected_package, 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OM_uint32 response_code, 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OM_uint32 minor_response_code, 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GssContextMockImpl& context_info, 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const gss_buffer_desc& expected_input_token, 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const gss_buffer_desc& output_token) { 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SecurityContextQuery security_query; 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen security_query.expected_package = expected_package; 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen security_query.response_code = response_code; 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen security_query.minor_response_code = minor_response_code; 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen security_query.context_info.Assign(context_info); 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen security_query.expected_input_token = expected_input_token; 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen security_query.output_token = output_token; 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen expected_security_queries_.push_back(security_query); 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool MockGSSAPILibrary::Init() { 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// These methods match the ones in the GSSAPI library. 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::import_name( 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_buffer_t input_name_buffer, 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_OID input_name_type, 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_name_t* output_name) { 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!output_name) 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_BAD_NAME; 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!input_name_buffer) 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_CALL_BAD_STRUCTURE; 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!input_name_type) 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_BAD_NAMETYPE; 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssNameMockImpl* output = new GssNameMockImpl; 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (output == NULL) 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_FAILURE; 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch output->name_type.length = 0; 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch output->name_type.elements = NULL; 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Save the data. 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch output->name = BufferToString(input_name_buffer); 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(&output->name_type, input_name_type); 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *output_name = output; 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::release_name( 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_name_t* input_name) { 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!input_name) 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_BAD_NAME; 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!*input_name) 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssNameMockImpl* name = *reinterpret_cast<GssNameMockImpl**>(input_name); 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearName(*input_name); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete name; 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *input_name = NULL; 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::release_buffer( 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_buffer_t buffer) { 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!buffer) 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_BAD_NAME; 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearBuffer(buffer); 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::display_name( 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_name_t input_name, 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_buffer_t output_name_buffer, 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_OID* output_name_type) { 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!input_name) 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_BAD_NAME; 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!output_name_buffer) 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_CALL_BAD_STRUCTURE; 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!output_name_type) 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_CALL_BAD_STRUCTURE; 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string name(NameToString(input_name)); 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BufferFromString(name, output_name_buffer); 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssNameMockImpl* internal_name = 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *reinterpret_cast<GssNameMockImpl**>(input_name); 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (output_name_type) 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *output_name_type = internal_name ? &internal_name->name_type : NULL; 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::display_status( 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 status_value, 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int status_type, 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_OID mech_type, 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* message_context, 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_buffer_t status_string) { 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 3453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string msg = base::StringPrintf("Value: %u, Type %u", 3463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick status_value, 3473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick status_type); 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (message_context) 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *message_context = 0; 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BufferFromString(msg, status_string); 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::init_sec_context( 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_cred_id_t initiator_cred_handle, 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_ctx_id_t* context_handle, 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_name_t target_name, 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_OID mech_type, 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 req_flags, 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 time_req, 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_channel_bindings_t input_chan_bindings, 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_buffer_t input_token, 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_OID* actual_mech_type, 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_buffer_t output_token, 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* ret_flags, 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* time_rec) { 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!context_handle) 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_CALL_BAD_STRUCTURE; 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssContextMockImpl** internal_context_handle = 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch reinterpret_cast<test::GssContextMockImpl**>(context_handle); 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create it if necessary. 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!*internal_context_handle) { 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *internal_context_handle = new GssContextMockImpl; 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(*internal_context_handle); 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssContextMockImpl& context = **internal_context_handle; 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (expected_security_queries_.empty()) { 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_UNAVAILABLE; 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SecurityContextQuery security_query = expected_security_queries_.front(); 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_security_queries_.pop_front(); 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(std::string("Negotiate"), security_query.expected_package); 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 major_status = security_query.response_code; 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = security_query.minor_response_code; 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch context.src_name = security_query.context_info.src_name; 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch context.targ_name = security_query.context_info.targ_name; 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch context.lifetime_rec = security_query.context_info.lifetime_rec; 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(&context.mech_type, &security_query.context_info.mech_type); 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch context.ctx_flags = security_query.context_info.ctx_flags; 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch context.locally_initiated = security_query.context_info.locally_initiated; 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch context.open = security_query.context_info.open; 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!input_token) { 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(security_query.expected_input_token.length); 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(input_token->length, security_query.expected_input_token.length); 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (input_token->length) { 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, memcmp(input_token->value, 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch security_query.expected_input_token.value, 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch input_token->length)); 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyBuffer(output_token, &security_query.output_token); 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (actual_mech_type) 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(*actual_mech_type, mech_type); 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (ret_flags) 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *ret_flags = req_flags; 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return major_status; 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::wrap_size_limit( 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_ctx_id_t context_handle, 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int conf_req_flag, 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_qop_t qop_req, 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32 req_output_size, 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* max_input_size) { 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ADD_FAILURE(); 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_UNAVAILABLE; 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::delete_sec_context( 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_ctx_id_t* context_handle, 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_buffer_t output_token) { 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!context_handle) 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_CALL_BAD_STRUCTURE; 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssContextMockImpl** internal_context_handle = 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch reinterpret_cast<GssContextMockImpl**>(context_handle); 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (*internal_context_handle) { 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete *internal_context_handle; 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *internal_context_handle = NULL; 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOM_uint32 MockGSSAPILibrary::inquire_context( 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* minor_status, 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gss_ctx_id_t context_handle, 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_name_t* src_name, 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_name_t* targ_name, 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* lifetime_rec, 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gss_OID* mech_type, 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OM_uint32* ctx_flags, 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int* locally_initiated, 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int* open) { 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (minor_status) 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *minor_status = 0; 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!context_handle) 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_CALL_BAD_STRUCTURE; 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssContextMockImpl* internal_context_ptr = 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch reinterpret_cast<GssContextMockImpl*>(context_handle); 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GssContextMockImpl& context = *internal_context_ptr; 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (src_name) 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NameFromString(context.src_name, *src_name); 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (targ_name) 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NameFromString(context.targ_name, *targ_name); 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (lifetime_rec) 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *lifetime_rec = context.lifetime_rec; 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (mech_type) 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CopyOid(*mech_type, &context.mech_type); 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (ctx_flags) 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *ctx_flags = context.ctx_flags; 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (locally_initiated) 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *locally_initiated = context.locally_initiated; 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (open) 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *open = context.open; 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GSS_S_COMPLETE; 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace test 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace net 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 482