OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 #include "net/android/dummy_spnego_authenticator.h" | |
5 | |
6 #include "base/android/jni_string.h" | |
7 #include "base/base64.h" | |
8 #include "jni/DummySpnegoAuthenticator_jni.h" | |
9 | |
10 namespace net { | |
11 | |
12 // iso.org.dod.internet.security.mechanism.snego (1.3.6.1.5.5.2) | |
Ryan Sleevi
2015/06/29 13:56:44
nit: Add a comment explaining where it's from and
aberent
2015/07/02 21:13:34
Done.
| |
13 gss_OID_desc CHROME_GSS_SPNEGO_MECH_OID_DESC_VAL = { | |
14 6, | |
15 const_cast<char*>("\x2b\x06\x01\x05\x05\x02")}; | |
Ryan Sleevi
2015/06/29 13:56:44
DANGER: This is a fairly dangerous code pattern. B
aberent
2015/07/02 21:13:34
Done. Should probably be copied back to the origin
| |
16 | |
17 gss_OID CHROME_GSS_SPNEGO_MECH_OID_DESC = &CHROME_GSS_SPNEGO_MECH_OID_DESC_VAL; | |
18 | |
19 namespace { | |
20 | |
21 // gss_OID helpers. | |
22 // NOTE: gss_OID's do not own the data they point to, which should be static. | |
23 void ClearOid(gss_OID dest) { | |
24 if (!dest) | |
25 return; | |
26 dest->length = 0; | |
27 dest->elements = NULL; | |
28 } | |
29 | |
30 void SetOid(gss_OID dest, const void* src, size_t length) { | |
31 if (!dest) | |
32 return; | |
33 ClearOid(dest); | |
34 if (!src) | |
35 return; | |
36 dest->length = length; | |
37 if (length) | |
38 dest->elements = const_cast<void*>(src); | |
39 } | |
40 | |
41 void CopyOid(gss_OID dest, const gss_OID_desc* src) { | |
42 if (!dest) | |
43 return; | |
44 ClearOid(dest); | |
45 if (!src) | |
46 return; | |
47 SetOid(dest, src->elements, src->length); | |
48 } | |
49 } // namespace | |
Ryan Sleevi
2015/06/29 13:56:44
newline between 48/49
aberent
2015/07/02 21:13:34
Done.
| |
50 | |
51 namespace test { | |
52 GssContextMockImpl::GssContextMockImpl() | |
Ryan Sleevi
2015/06/29 13:56:44
newline between 51/52
aberent
2015/07/02 21:13:34
Done.
| |
53 : lifetime_rec(0), ctx_flags(0), locally_initiated(0), open(0) { | |
54 ClearOid(&mech_type); | |
55 } | |
56 | |
57 GssContextMockImpl::GssContextMockImpl(const GssContextMockImpl& other) | |
58 : src_name(other.src_name), | |
59 targ_name(other.targ_name), | |
60 lifetime_rec(other.lifetime_rec), | |
61 ctx_flags(other.ctx_flags), | |
62 locally_initiated(other.locally_initiated), | |
63 open(other.open) { | |
64 CopyOid(&mech_type, &other.mech_type); | |
65 } | |
66 | |
67 GssContextMockImpl::GssContextMockImpl(const char* src_name_in, | |
68 const char* targ_name_in, | |
69 uint32_t lifetime_rec_in, | |
70 const gss_OID_desc& mech_type_in, | |
71 uint32_t ctx_flags_in, | |
72 int locally_initiated_in, | |
73 int open_in) | |
74 : src_name(src_name_in ? src_name_in : ""), | |
75 targ_name(targ_name_in ? targ_name_in : ""), | |
76 lifetime_rec(lifetime_rec_in), | |
77 ctx_flags(ctx_flags_in), | |
78 locally_initiated(locally_initiated_in), | |
79 open(open_in) { | |
80 CopyOid(&mech_type, &mech_type_in); | |
81 } | |
82 | |
83 GssContextMockImpl::~GssContextMockImpl() { | |
84 ClearOid(&mech_type); | |
85 } | |
86 | |
87 } // namespace test | |
88 | |
89 namespace android { | |
90 | |
91 DummySpnegoAuthenticator::SecurityContextQuery::SecurityContextQuery( | |
92 const std::string& in_expected_package, | |
93 uint32_t in_response_code, | |
94 uint32_t in_minor_response_code, | |
95 const test::GssContextMockImpl& in_context_info, | |
96 const char* in_expected_input_token, | |
97 const char* in_output_token) | |
98 : expected_package(in_expected_package), | |
99 response_code(in_response_code), | |
100 minor_response_code(in_minor_response_code), | |
101 context_info(in_context_info) { | |
102 if (in_expected_input_token) { | |
103 expected_input_token = in_expected_input_token; | |
104 } else { | |
105 expected_input_token = std::string(); | |
Ryan Sleevi
2015/06/29 13:56:44
unnecessary (default string ctor will ensure this)
aberent
2015/07/02 21:13:34
Done.
| |
106 } | |
107 if (in_output_token) { | |
108 output_token = in_output_token; | |
109 } else { | |
110 output_token = std::string(); | |
Ryan Sleevi
2015/06/29 13:56:44
unnecessary
aberent
2015/07/02 21:13:34
Done.
| |
111 } | |
112 } | |
113 | |
114 DummySpnegoAuthenticator::SecurityContextQuery::~SecurityContextQuery() { | |
115 } | |
116 | |
117 void DummySpnegoAuthenticator::EnsureTestAccountExists() { | |
118 Java_DummySpnegoAuthenticator_ensureTestAccountExists( | |
119 base::android::AttachCurrentThread()); | |
120 } | |
121 | |
122 void DummySpnegoAuthenticator::RemoveTestAccounts() { | |
123 Java_DummySpnegoAuthenticator_removeTestAccounts( | |
124 base::android::AttachCurrentThread()); | |
125 } | |
126 | |
127 void DummySpnegoAuthenticator::ExpectSecurityContext( | |
128 const std::string& expected_package, | |
129 uint32_t response_code, | |
130 uint32_t minor_response_code, | |
131 const test::GssContextMockImpl& context_info, | |
132 std::string& expected_input_token, | |
133 std::string& output_token) { | |
134 std::string token; | |
135 base::Base64Encode(output_token, &token); | |
Ryan Sleevi
2015/06/29 13:56:44
Check results
aberent
2015/07/02 21:13:34
Now, after significant changes, the code is checki
| |
136 SetNextResult(response_code, token); | |
137 } | |
138 | |
139 void DummySpnegoAuthenticator::SetNextResult(int result, | |
140 const std::string& token) { | |
141 auto env = base::android::AttachCurrentThread(); | |
142 Java_DummySpnegoAuthenticator_setNextResult( | |
143 env, result, base::android::ConvertUTF8ToJavaString(env, token).obj()); | |
144 } | |
145 | |
146 bool DummySpnegoAuthenticator::RegisterJni(JNIEnv* env) { | |
147 return RegisterNativesImpl(env); | |
148 } | |
149 | |
150 } // namespace android | |
151 } // namespace net | |
OLD | NEW |