1*6236dae4SAndroid Build Coastguard Worker /***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _
3*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| |
4*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___
6*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker *
8*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker *
10*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker *
14*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker *
18*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker *
21*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker *
23*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/
24*6236dae4SAndroid Build Coastguard Worker
25*6236dae4SAndroid Build Coastguard Worker /* Only provides the bare minimum to link with libcurl */
26*6236dae4SAndroid Build Coastguard Worker
27*6236dae4SAndroid Build Coastguard Worker #include <stdio.h>
28*6236dae4SAndroid Build Coastguard Worker #include <stdlib.h>
29*6236dae4SAndroid Build Coastguard Worker #include <string.h>
30*6236dae4SAndroid Build Coastguard Worker
31*6236dae4SAndroid Build Coastguard Worker #include "stub_gssapi.h"
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Worker /* !checksrc! disable SNPRINTF all */
34*6236dae4SAndroid Build Coastguard Worker
35*6236dae4SAndroid Build Coastguard Worker #define MAX_CREDS_LENGTH 250
36*6236dae4SAndroid Build Coastguard Worker #define APPROX_TOKEN_LEN 250
37*6236dae4SAndroid Build Coastguard Worker
38*6236dae4SAndroid Build Coastguard Worker enum min_err_code {
39*6236dae4SAndroid Build Coastguard Worker GSS_OK = 0,
40*6236dae4SAndroid Build Coastguard Worker GSS_NO_MEMORY,
41*6236dae4SAndroid Build Coastguard Worker GSS_INVALID_ARGS,
42*6236dae4SAndroid Build Coastguard Worker GSS_INVALID_CREDS,
43*6236dae4SAndroid Build Coastguard Worker GSS_INVALID_CTX,
44*6236dae4SAndroid Build Coastguard Worker GSS_SERVER_ERR,
45*6236dae4SAndroid Build Coastguard Worker GSS_NO_MECH,
46*6236dae4SAndroid Build Coastguard Worker GSS_LAST
47*6236dae4SAndroid Build Coastguard Worker };
48*6236dae4SAndroid Build Coastguard Worker
49*6236dae4SAndroid Build Coastguard Worker static const char *min_err_table[] = {
50*6236dae4SAndroid Build Coastguard Worker "stub-gss: no error",
51*6236dae4SAndroid Build Coastguard Worker "stub-gss: no memory",
52*6236dae4SAndroid Build Coastguard Worker "stub-gss: invalid arguments",
53*6236dae4SAndroid Build Coastguard Worker "stub-gss: invalid credentials",
54*6236dae4SAndroid Build Coastguard Worker "stub-gss: invalid context",
55*6236dae4SAndroid Build Coastguard Worker "stub-gss: server returned error",
56*6236dae4SAndroid Build Coastguard Worker "stub-gss: cannot find a mechanism",
57*6236dae4SAndroid Build Coastguard Worker NULL
58*6236dae4SAndroid Build Coastguard Worker };
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Worker struct gss_ctx_id_t_desc_struct {
61*6236dae4SAndroid Build Coastguard Worker enum { NONE, KRB5, NTLM1, NTLM3 } sent;
62*6236dae4SAndroid Build Coastguard Worker int have_krb5;
63*6236dae4SAndroid Build Coastguard Worker int have_ntlm;
64*6236dae4SAndroid Build Coastguard Worker OM_uint32 flags;
65*6236dae4SAndroid Build Coastguard Worker char creds[MAX_CREDS_LENGTH];
66*6236dae4SAndroid Build Coastguard Worker };
67*6236dae4SAndroid Build Coastguard Worker
68*6236dae4SAndroid Build Coastguard Worker /* simple implementation of strndup(), which isn't portable */
my_strndup(const char * ptr,size_t len)69*6236dae4SAndroid Build Coastguard Worker static char *my_strndup(const char *ptr, size_t len)
70*6236dae4SAndroid Build Coastguard Worker {
71*6236dae4SAndroid Build Coastguard Worker char *copy = malloc(len + 1);
72*6236dae4SAndroid Build Coastguard Worker if(!copy)
73*6236dae4SAndroid Build Coastguard Worker return NULL;
74*6236dae4SAndroid Build Coastguard Worker memcpy(copy, ptr, len);
75*6236dae4SAndroid Build Coastguard Worker copy[len] = '\0';
76*6236dae4SAndroid Build Coastguard Worker return copy;
77*6236dae4SAndroid Build Coastguard Worker }
78*6236dae4SAndroid Build Coastguard Worker
gss_init_sec_context(OM_uint32 * min,gss_const_cred_id_t initiator_cred_handle,gss_ctx_id_t * context_handle,gss_const_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)79*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_init_sec_context(OM_uint32 *min,
80*6236dae4SAndroid Build Coastguard Worker gss_const_cred_id_t initiator_cred_handle,
81*6236dae4SAndroid Build Coastguard Worker gss_ctx_id_t *context_handle,
82*6236dae4SAndroid Build Coastguard Worker gss_const_name_t target_name,
83*6236dae4SAndroid Build Coastguard Worker const gss_OID mech_type,
84*6236dae4SAndroid Build Coastguard Worker OM_uint32 req_flags,
85*6236dae4SAndroid Build Coastguard Worker OM_uint32 time_req,
86*6236dae4SAndroid Build Coastguard Worker const gss_channel_bindings_t input_chan_bindings,
87*6236dae4SAndroid Build Coastguard Worker const gss_buffer_t input_token,
88*6236dae4SAndroid Build Coastguard Worker gss_OID *actual_mech_type,
89*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_token,
90*6236dae4SAndroid Build Coastguard Worker OM_uint32 *ret_flags,
91*6236dae4SAndroid Build Coastguard Worker OM_uint32 *time_rec)
92*6236dae4SAndroid Build Coastguard Worker {
93*6236dae4SAndroid Build Coastguard Worker /* The token will be encoded in base64 */
94*6236dae4SAndroid Build Coastguard Worker size_t length = APPROX_TOKEN_LEN * 3 / 4;
95*6236dae4SAndroid Build Coastguard Worker size_t used = 0;
96*6236dae4SAndroid Build Coastguard Worker char *token = NULL;
97*6236dae4SAndroid Build Coastguard Worker const char *creds = NULL;
98*6236dae4SAndroid Build Coastguard Worker gss_ctx_id_t ctx = NULL;
99*6236dae4SAndroid Build Coastguard Worker
100*6236dae4SAndroid Build Coastguard Worker (void)initiator_cred_handle;
101*6236dae4SAndroid Build Coastguard Worker (void)mech_type;
102*6236dae4SAndroid Build Coastguard Worker (void)time_req;
103*6236dae4SAndroid Build Coastguard Worker (void)input_chan_bindings;
104*6236dae4SAndroid Build Coastguard Worker (void)actual_mech_type;
105*6236dae4SAndroid Build Coastguard Worker
106*6236dae4SAndroid Build Coastguard Worker if(!min)
107*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
108*6236dae4SAndroid Build Coastguard Worker
109*6236dae4SAndroid Build Coastguard Worker *min = 0;
110*6236dae4SAndroid Build Coastguard Worker
111*6236dae4SAndroid Build Coastguard Worker if(!context_handle || !target_name || !output_token) {
112*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_ARGS;
113*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
114*6236dae4SAndroid Build Coastguard Worker }
115*6236dae4SAndroid Build Coastguard Worker
116*6236dae4SAndroid Build Coastguard Worker creds = getenv("CURL_STUB_GSS_CREDS");
117*6236dae4SAndroid Build Coastguard Worker if(!creds || strlen(creds) >= MAX_CREDS_LENGTH) {
118*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_CREDS;
119*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
120*6236dae4SAndroid Build Coastguard Worker }
121*6236dae4SAndroid Build Coastguard Worker
122*6236dae4SAndroid Build Coastguard Worker ctx = *context_handle;
123*6236dae4SAndroid Build Coastguard Worker if(ctx && strcmp(ctx->creds, creds)) {
124*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_CREDS;
125*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
126*6236dae4SAndroid Build Coastguard Worker }
127*6236dae4SAndroid Build Coastguard Worker
128*6236dae4SAndroid Build Coastguard Worker output_token->length = 0;
129*6236dae4SAndroid Build Coastguard Worker output_token->value = NULL;
130*6236dae4SAndroid Build Coastguard Worker
131*6236dae4SAndroid Build Coastguard Worker if(input_token && input_token->length) {
132*6236dae4SAndroid Build Coastguard Worker if(!ctx) {
133*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_CTX;
134*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
135*6236dae4SAndroid Build Coastguard Worker }
136*6236dae4SAndroid Build Coastguard Worker
137*6236dae4SAndroid Build Coastguard Worker /* Server response, either D (RA==) or C (Qw==) */
138*6236dae4SAndroid Build Coastguard Worker if(((char *) input_token->value)[0] == 'D') {
139*6236dae4SAndroid Build Coastguard Worker /* Done */
140*6236dae4SAndroid Build Coastguard Worker switch(ctx->sent) {
141*6236dae4SAndroid Build Coastguard Worker case KRB5:
142*6236dae4SAndroid Build Coastguard Worker case NTLM3:
143*6236dae4SAndroid Build Coastguard Worker if(ret_flags)
144*6236dae4SAndroid Build Coastguard Worker *ret_flags = ctx->flags;
145*6236dae4SAndroid Build Coastguard Worker if(time_rec)
146*6236dae4SAndroid Build Coastguard Worker *time_rec = GSS_C_INDEFINITE;
147*6236dae4SAndroid Build Coastguard Worker return GSS_S_COMPLETE;
148*6236dae4SAndroid Build Coastguard Worker default:
149*6236dae4SAndroid Build Coastguard Worker *min = GSS_SERVER_ERR;
150*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
151*6236dae4SAndroid Build Coastguard Worker }
152*6236dae4SAndroid Build Coastguard Worker }
153*6236dae4SAndroid Build Coastguard Worker
154*6236dae4SAndroid Build Coastguard Worker if(((char *) input_token->value)[0] != 'C') {
155*6236dae4SAndroid Build Coastguard Worker /* We only support Done or Continue */
156*6236dae4SAndroid Build Coastguard Worker *min = GSS_SERVER_ERR;
157*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
158*6236dae4SAndroid Build Coastguard Worker }
159*6236dae4SAndroid Build Coastguard Worker
160*6236dae4SAndroid Build Coastguard Worker /* Continue */
161*6236dae4SAndroid Build Coastguard Worker switch(ctx->sent) {
162*6236dae4SAndroid Build Coastguard Worker case KRB5:
163*6236dae4SAndroid Build Coastguard Worker /* We sent KRB5 and it failed, let's try NTLM */
164*6236dae4SAndroid Build Coastguard Worker if(ctx->have_ntlm) {
165*6236dae4SAndroid Build Coastguard Worker ctx->sent = NTLM1;
166*6236dae4SAndroid Build Coastguard Worker break;
167*6236dae4SAndroid Build Coastguard Worker }
168*6236dae4SAndroid Build Coastguard Worker else {
169*6236dae4SAndroid Build Coastguard Worker *min = GSS_SERVER_ERR;
170*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
171*6236dae4SAndroid Build Coastguard Worker }
172*6236dae4SAndroid Build Coastguard Worker case NTLM1:
173*6236dae4SAndroid Build Coastguard Worker ctx->sent = NTLM3;
174*6236dae4SAndroid Build Coastguard Worker break;
175*6236dae4SAndroid Build Coastguard Worker default:
176*6236dae4SAndroid Build Coastguard Worker *min = GSS_SERVER_ERR;
177*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
178*6236dae4SAndroid Build Coastguard Worker }
179*6236dae4SAndroid Build Coastguard Worker }
180*6236dae4SAndroid Build Coastguard Worker else {
181*6236dae4SAndroid Build Coastguard Worker if(ctx) {
182*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_CTX;
183*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
184*6236dae4SAndroid Build Coastguard Worker }
185*6236dae4SAndroid Build Coastguard Worker
186*6236dae4SAndroid Build Coastguard Worker ctx = (gss_ctx_id_t) calloc(1, sizeof(*ctx));
187*6236dae4SAndroid Build Coastguard Worker if(!ctx) {
188*6236dae4SAndroid Build Coastguard Worker *min = GSS_NO_MEMORY;
189*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
190*6236dae4SAndroid Build Coastguard Worker }
191*6236dae4SAndroid Build Coastguard Worker
192*6236dae4SAndroid Build Coastguard Worker if(strstr(creds, "KRB5"))
193*6236dae4SAndroid Build Coastguard Worker ctx->have_krb5 = 1;
194*6236dae4SAndroid Build Coastguard Worker
195*6236dae4SAndroid Build Coastguard Worker if(strstr(creds, "NTLM"))
196*6236dae4SAndroid Build Coastguard Worker ctx->have_ntlm = 1;
197*6236dae4SAndroid Build Coastguard Worker
198*6236dae4SAndroid Build Coastguard Worker if(ctx->have_krb5)
199*6236dae4SAndroid Build Coastguard Worker ctx->sent = KRB5;
200*6236dae4SAndroid Build Coastguard Worker else if(ctx->have_ntlm)
201*6236dae4SAndroid Build Coastguard Worker ctx->sent = NTLM1;
202*6236dae4SAndroid Build Coastguard Worker else {
203*6236dae4SAndroid Build Coastguard Worker free(ctx);
204*6236dae4SAndroid Build Coastguard Worker *min = GSS_NO_MECH;
205*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
206*6236dae4SAndroid Build Coastguard Worker }
207*6236dae4SAndroid Build Coastguard Worker
208*6236dae4SAndroid Build Coastguard Worker strcpy(ctx->creds, creds);
209*6236dae4SAndroid Build Coastguard Worker ctx->flags = req_flags;
210*6236dae4SAndroid Build Coastguard Worker }
211*6236dae4SAndroid Build Coastguard Worker
212*6236dae4SAndroid Build Coastguard Worker token = malloc(length);
213*6236dae4SAndroid Build Coastguard Worker if(!token) {
214*6236dae4SAndroid Build Coastguard Worker free(ctx);
215*6236dae4SAndroid Build Coastguard Worker *min = GSS_NO_MEMORY;
216*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
217*6236dae4SAndroid Build Coastguard Worker }
218*6236dae4SAndroid Build Coastguard Worker
219*6236dae4SAndroid Build Coastguard Worker /* Token format: creds:target:type:padding */
220*6236dae4SAndroid Build Coastguard Worker /* Note: this is using the *real* snprintf() and not the curl provided
221*6236dae4SAndroid Build Coastguard Worker one */
222*6236dae4SAndroid Build Coastguard Worker used = (size_t) snprintf(token, length, "%s:%s:%d:", creds,
223*6236dae4SAndroid Build Coastguard Worker (char *) target_name, ctx->sent);
224*6236dae4SAndroid Build Coastguard Worker
225*6236dae4SAndroid Build Coastguard Worker if(used >= length) {
226*6236dae4SAndroid Build Coastguard Worker free(token);
227*6236dae4SAndroid Build Coastguard Worker free(ctx);
228*6236dae4SAndroid Build Coastguard Worker *min = GSS_NO_MEMORY;
229*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
230*6236dae4SAndroid Build Coastguard Worker }
231*6236dae4SAndroid Build Coastguard Worker
232*6236dae4SAndroid Build Coastguard Worker /* Overwrite null terminator */
233*6236dae4SAndroid Build Coastguard Worker memset(token + used, 'A', length - used);
234*6236dae4SAndroid Build Coastguard Worker
235*6236dae4SAndroid Build Coastguard Worker *context_handle = ctx;
236*6236dae4SAndroid Build Coastguard Worker
237*6236dae4SAndroid Build Coastguard Worker output_token->value = token;
238*6236dae4SAndroid Build Coastguard Worker output_token->length = length;
239*6236dae4SAndroid Build Coastguard Worker
240*6236dae4SAndroid Build Coastguard Worker return GSS_S_CONTINUE_NEEDED;
241*6236dae4SAndroid Build Coastguard Worker }
242*6236dae4SAndroid Build Coastguard Worker
gss_delete_sec_context(OM_uint32 * min,gss_ctx_id_t * context_handle,gss_buffer_t output_token)243*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_delete_sec_context(OM_uint32 *min,
244*6236dae4SAndroid Build Coastguard Worker gss_ctx_id_t *context_handle,
245*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_token)
246*6236dae4SAndroid Build Coastguard Worker {
247*6236dae4SAndroid Build Coastguard Worker (void)output_token;
248*6236dae4SAndroid Build Coastguard Worker
249*6236dae4SAndroid Build Coastguard Worker if(!min)
250*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
251*6236dae4SAndroid Build Coastguard Worker
252*6236dae4SAndroid Build Coastguard Worker if(!context_handle) {
253*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_CTX;
254*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
255*6236dae4SAndroid Build Coastguard Worker }
256*6236dae4SAndroid Build Coastguard Worker
257*6236dae4SAndroid Build Coastguard Worker free(*context_handle);
258*6236dae4SAndroid Build Coastguard Worker *context_handle = NULL;
259*6236dae4SAndroid Build Coastguard Worker *min = 0;
260*6236dae4SAndroid Build Coastguard Worker
261*6236dae4SAndroid Build Coastguard Worker return GSS_S_COMPLETE;
262*6236dae4SAndroid Build Coastguard Worker }
263*6236dae4SAndroid Build Coastguard Worker
gss_release_buffer(OM_uint32 * min,gss_buffer_t buffer)264*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_release_buffer(OM_uint32 *min,
265*6236dae4SAndroid Build Coastguard Worker gss_buffer_t buffer)
266*6236dae4SAndroid Build Coastguard Worker {
267*6236dae4SAndroid Build Coastguard Worker if(min)
268*6236dae4SAndroid Build Coastguard Worker *min = 0;
269*6236dae4SAndroid Build Coastguard Worker
270*6236dae4SAndroid Build Coastguard Worker if(buffer && buffer->length) {
271*6236dae4SAndroid Build Coastguard Worker free(buffer->value);
272*6236dae4SAndroid Build Coastguard Worker buffer->length = 0;
273*6236dae4SAndroid Build Coastguard Worker }
274*6236dae4SAndroid Build Coastguard Worker
275*6236dae4SAndroid Build Coastguard Worker return GSS_S_COMPLETE;
276*6236dae4SAndroid Build Coastguard Worker }
277*6236dae4SAndroid Build Coastguard Worker
gss_import_name(OM_uint32 * min,const gss_buffer_t input_name_buffer,const gss_OID input_name_type,gss_name_t * output_name)278*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_import_name(OM_uint32 *min,
279*6236dae4SAndroid Build Coastguard Worker const gss_buffer_t input_name_buffer,
280*6236dae4SAndroid Build Coastguard Worker const gss_OID input_name_type,
281*6236dae4SAndroid Build Coastguard Worker gss_name_t *output_name)
282*6236dae4SAndroid Build Coastguard Worker {
283*6236dae4SAndroid Build Coastguard Worker char *name = NULL;
284*6236dae4SAndroid Build Coastguard Worker (void)input_name_type;
285*6236dae4SAndroid Build Coastguard Worker
286*6236dae4SAndroid Build Coastguard Worker if(!min)
287*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
288*6236dae4SAndroid Build Coastguard Worker
289*6236dae4SAndroid Build Coastguard Worker if(!input_name_buffer || !output_name) {
290*6236dae4SAndroid Build Coastguard Worker *min = GSS_INVALID_ARGS;
291*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
292*6236dae4SAndroid Build Coastguard Worker }
293*6236dae4SAndroid Build Coastguard Worker
294*6236dae4SAndroid Build Coastguard Worker name = my_strndup(input_name_buffer->value, input_name_buffer->length);
295*6236dae4SAndroid Build Coastguard Worker if(!name) {
296*6236dae4SAndroid Build Coastguard Worker *min = GSS_NO_MEMORY;
297*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
298*6236dae4SAndroid Build Coastguard Worker }
299*6236dae4SAndroid Build Coastguard Worker
300*6236dae4SAndroid Build Coastguard Worker *output_name = (gss_name_t) name;
301*6236dae4SAndroid Build Coastguard Worker *min = 0;
302*6236dae4SAndroid Build Coastguard Worker
303*6236dae4SAndroid Build Coastguard Worker return GSS_S_COMPLETE;
304*6236dae4SAndroid Build Coastguard Worker }
305*6236dae4SAndroid Build Coastguard Worker
gss_release_name(OM_uint32 * min,gss_name_t * input_name)306*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_release_name(OM_uint32 *min,
307*6236dae4SAndroid Build Coastguard Worker gss_name_t *input_name)
308*6236dae4SAndroid Build Coastguard Worker {
309*6236dae4SAndroid Build Coastguard Worker if(min)
310*6236dae4SAndroid Build Coastguard Worker *min = 0;
311*6236dae4SAndroid Build Coastguard Worker
312*6236dae4SAndroid Build Coastguard Worker if(input_name)
313*6236dae4SAndroid Build Coastguard Worker free(*input_name);
314*6236dae4SAndroid Build Coastguard Worker
315*6236dae4SAndroid Build Coastguard Worker return GSS_S_COMPLETE;
316*6236dae4SAndroid Build Coastguard Worker }
317*6236dae4SAndroid Build Coastguard Worker
gss_display_status(OM_uint32 * min,OM_uint32 status_value,int status_type,const gss_OID mech_type,OM_uint32 * message_context,gss_buffer_t status_string)318*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_display_status(OM_uint32 *min,
319*6236dae4SAndroid Build Coastguard Worker OM_uint32 status_value,
320*6236dae4SAndroid Build Coastguard Worker int status_type,
321*6236dae4SAndroid Build Coastguard Worker const gss_OID mech_type,
322*6236dae4SAndroid Build Coastguard Worker OM_uint32 *message_context,
323*6236dae4SAndroid Build Coastguard Worker gss_buffer_t status_string)
324*6236dae4SAndroid Build Coastguard Worker {
325*6236dae4SAndroid Build Coastguard Worker const char maj_str[] = "Stub GSS error";
326*6236dae4SAndroid Build Coastguard Worker (void)mech_type;
327*6236dae4SAndroid Build Coastguard Worker if(min)
328*6236dae4SAndroid Build Coastguard Worker *min = 0;
329*6236dae4SAndroid Build Coastguard Worker
330*6236dae4SAndroid Build Coastguard Worker if(message_context)
331*6236dae4SAndroid Build Coastguard Worker *message_context = 0;
332*6236dae4SAndroid Build Coastguard Worker
333*6236dae4SAndroid Build Coastguard Worker if(status_string) {
334*6236dae4SAndroid Build Coastguard Worker status_string->value = NULL;
335*6236dae4SAndroid Build Coastguard Worker status_string->length = 0;
336*6236dae4SAndroid Build Coastguard Worker
337*6236dae4SAndroid Build Coastguard Worker if(status_value >= GSS_LAST)
338*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
339*6236dae4SAndroid Build Coastguard Worker
340*6236dae4SAndroid Build Coastguard Worker switch(status_type) {
341*6236dae4SAndroid Build Coastguard Worker case GSS_C_GSS_CODE:
342*6236dae4SAndroid Build Coastguard Worker status_string->value = strdup(maj_str);
343*6236dae4SAndroid Build Coastguard Worker break;
344*6236dae4SAndroid Build Coastguard Worker case GSS_C_MECH_CODE:
345*6236dae4SAndroid Build Coastguard Worker status_string->value = strdup(min_err_table[status_value]);
346*6236dae4SAndroid Build Coastguard Worker break;
347*6236dae4SAndroid Build Coastguard Worker default:
348*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
349*6236dae4SAndroid Build Coastguard Worker }
350*6236dae4SAndroid Build Coastguard Worker
351*6236dae4SAndroid Build Coastguard Worker if(status_string->value)
352*6236dae4SAndroid Build Coastguard Worker status_string->length = strlen(status_string->value);
353*6236dae4SAndroid Build Coastguard Worker else
354*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
355*6236dae4SAndroid Build Coastguard Worker }
356*6236dae4SAndroid Build Coastguard Worker
357*6236dae4SAndroid Build Coastguard Worker return GSS_S_COMPLETE;
358*6236dae4SAndroid Build Coastguard Worker }
359*6236dae4SAndroid Build Coastguard Worker
360*6236dae4SAndroid Build Coastguard Worker /* Stubs returning error */
361*6236dae4SAndroid Build Coastguard Worker
gss_display_name(OM_uint32 * min,gss_const_name_t input_name,gss_buffer_t output_name_buffer,gss_OID * output_name_type)362*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_display_name(OM_uint32 *min,
363*6236dae4SAndroid Build Coastguard Worker gss_const_name_t input_name,
364*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_name_buffer,
365*6236dae4SAndroid Build Coastguard Worker gss_OID *output_name_type)
366*6236dae4SAndroid Build Coastguard Worker {
367*6236dae4SAndroid Build Coastguard Worker (void)min;
368*6236dae4SAndroid Build Coastguard Worker (void)input_name;
369*6236dae4SAndroid Build Coastguard Worker (void)output_name_buffer;
370*6236dae4SAndroid Build Coastguard Worker (void)output_name_type;
371*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
372*6236dae4SAndroid Build Coastguard Worker }
373*6236dae4SAndroid Build Coastguard Worker
gss_inquire_context(OM_uint32 * min,gss_const_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_context)374*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_inquire_context(OM_uint32 *min,
375*6236dae4SAndroid Build Coastguard Worker gss_const_ctx_id_t context_handle,
376*6236dae4SAndroid Build Coastguard Worker gss_name_t *src_name,
377*6236dae4SAndroid Build Coastguard Worker gss_name_t *targ_name,
378*6236dae4SAndroid Build Coastguard Worker OM_uint32 *lifetime_rec,
379*6236dae4SAndroid Build Coastguard Worker gss_OID *mech_type,
380*6236dae4SAndroid Build Coastguard Worker OM_uint32 *ctx_flags,
381*6236dae4SAndroid Build Coastguard Worker int *locally_initiated,
382*6236dae4SAndroid Build Coastguard Worker int *open_context)
383*6236dae4SAndroid Build Coastguard Worker {
384*6236dae4SAndroid Build Coastguard Worker (void)min;
385*6236dae4SAndroid Build Coastguard Worker (void)context_handle;
386*6236dae4SAndroid Build Coastguard Worker (void)src_name;
387*6236dae4SAndroid Build Coastguard Worker (void)targ_name;
388*6236dae4SAndroid Build Coastguard Worker (void)lifetime_rec;
389*6236dae4SAndroid Build Coastguard Worker (void)mech_type;
390*6236dae4SAndroid Build Coastguard Worker (void)ctx_flags;
391*6236dae4SAndroid Build Coastguard Worker (void)locally_initiated;
392*6236dae4SAndroid Build Coastguard Worker (void)open_context;
393*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
394*6236dae4SAndroid Build Coastguard Worker }
395*6236dae4SAndroid Build Coastguard Worker
gss_wrap(OM_uint32 * min,gss_const_ctx_id_t context_handle,int conf_req_flag,gss_qop_t qop_req,const gss_buffer_t input_message_buffer,int * conf_state,gss_buffer_t output_message_buffer)396*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_wrap(OM_uint32 *min,
397*6236dae4SAndroid Build Coastguard Worker gss_const_ctx_id_t context_handle,
398*6236dae4SAndroid Build Coastguard Worker int conf_req_flag,
399*6236dae4SAndroid Build Coastguard Worker gss_qop_t qop_req,
400*6236dae4SAndroid Build Coastguard Worker const gss_buffer_t input_message_buffer,
401*6236dae4SAndroid Build Coastguard Worker int *conf_state,
402*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_message_buffer)
403*6236dae4SAndroid Build Coastguard Worker {
404*6236dae4SAndroid Build Coastguard Worker (void)min;
405*6236dae4SAndroid Build Coastguard Worker (void)context_handle;
406*6236dae4SAndroid Build Coastguard Worker (void)conf_req_flag;
407*6236dae4SAndroid Build Coastguard Worker (void)qop_req;
408*6236dae4SAndroid Build Coastguard Worker (void)input_message_buffer;
409*6236dae4SAndroid Build Coastguard Worker (void)conf_state;
410*6236dae4SAndroid Build Coastguard Worker (void)output_message_buffer;
411*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
412*6236dae4SAndroid Build Coastguard Worker }
413*6236dae4SAndroid Build Coastguard Worker
gss_unwrap(OM_uint32 * min,gss_const_ctx_id_t context_handle,const gss_buffer_t input_message_buffer,gss_buffer_t output_message_buffer,int * conf_state,gss_qop_t * qop_state)414*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_unwrap(OM_uint32 *min,
415*6236dae4SAndroid Build Coastguard Worker gss_const_ctx_id_t context_handle,
416*6236dae4SAndroid Build Coastguard Worker const gss_buffer_t input_message_buffer,
417*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_message_buffer,
418*6236dae4SAndroid Build Coastguard Worker int *conf_state,
419*6236dae4SAndroid Build Coastguard Worker gss_qop_t *qop_state)
420*6236dae4SAndroid Build Coastguard Worker {
421*6236dae4SAndroid Build Coastguard Worker (void)min;
422*6236dae4SAndroid Build Coastguard Worker (void)context_handle;
423*6236dae4SAndroid Build Coastguard Worker (void)input_message_buffer;
424*6236dae4SAndroid Build Coastguard Worker (void)output_message_buffer;
425*6236dae4SAndroid Build Coastguard Worker (void)conf_state;
426*6236dae4SAndroid Build Coastguard Worker (void)qop_state;
427*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
428*6236dae4SAndroid Build Coastguard Worker }
429*6236dae4SAndroid Build Coastguard Worker
gss_seal(OM_uint32 * min,gss_ctx_id_t context_handle,int conf_req_flag,int qop_req,gss_buffer_t input_message_buffer,int * conf_state,gss_buffer_t output_message_buffer)430*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_seal(OM_uint32 *min,
431*6236dae4SAndroid Build Coastguard Worker gss_ctx_id_t context_handle,
432*6236dae4SAndroid Build Coastguard Worker int conf_req_flag,
433*6236dae4SAndroid Build Coastguard Worker int qop_req,
434*6236dae4SAndroid Build Coastguard Worker gss_buffer_t input_message_buffer,
435*6236dae4SAndroid Build Coastguard Worker int *conf_state,
436*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_message_buffer)
437*6236dae4SAndroid Build Coastguard Worker {
438*6236dae4SAndroid Build Coastguard Worker (void)min;
439*6236dae4SAndroid Build Coastguard Worker (void)context_handle;
440*6236dae4SAndroid Build Coastguard Worker (void)conf_req_flag;
441*6236dae4SAndroid Build Coastguard Worker (void)qop_req;
442*6236dae4SAndroid Build Coastguard Worker (void)input_message_buffer;
443*6236dae4SAndroid Build Coastguard Worker (void)conf_state;
444*6236dae4SAndroid Build Coastguard Worker (void)output_message_buffer;
445*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
446*6236dae4SAndroid Build Coastguard Worker }
447*6236dae4SAndroid Build Coastguard Worker
gss_unseal(OM_uint32 * min,gss_ctx_id_t context_handle,gss_buffer_t input_message_buffer,gss_buffer_t output_message_buffer,int * conf_state,int * qop_state)448*6236dae4SAndroid Build Coastguard Worker OM_uint32 gss_unseal(OM_uint32 *min,
449*6236dae4SAndroid Build Coastguard Worker gss_ctx_id_t context_handle,
450*6236dae4SAndroid Build Coastguard Worker gss_buffer_t input_message_buffer,
451*6236dae4SAndroid Build Coastguard Worker gss_buffer_t output_message_buffer,
452*6236dae4SAndroid Build Coastguard Worker int *conf_state,
453*6236dae4SAndroid Build Coastguard Worker int *qop_state)
454*6236dae4SAndroid Build Coastguard Worker {
455*6236dae4SAndroid Build Coastguard Worker (void)min;
456*6236dae4SAndroid Build Coastguard Worker (void)context_handle;
457*6236dae4SAndroid Build Coastguard Worker (void)input_message_buffer;
458*6236dae4SAndroid Build Coastguard Worker (void)output_message_buffer;
459*6236dae4SAndroid Build Coastguard Worker (void)conf_state;
460*6236dae4SAndroid Build Coastguard Worker (void)qop_state;
461*6236dae4SAndroid Build Coastguard Worker return GSS_S_FAILURE;
462*6236dae4SAndroid Build Coastguard Worker }
463