auth_context.c revision 178825
1255376Sdes/*
2141098Sdes * Copyright (c) 1997 - 2002 Kungliga Tekniska H�gskolan
3117610Sdes * (Royal Institute of Technology, Stockholm, Sweden).
4255376Sdes * All rights reserved.
5255376Sdes *
6117610Sdes * Redistribution and use in source and binary forms, with or without
7117610Sdes * modification, are permitted provided that the following conditions
8117610Sdes * are met:
9117610Sdes *
10117610Sdes * 1. Redistributions of source code must retain the above copyright
11117610Sdes *    notice, this list of conditions and the following disclaimer.
12117610Sdes *
13117610Sdes * 2. Redistributions in binary form must reproduce the above copyright
14117610Sdes *    notice, this list of conditions and the following disclaimer in the
15117610Sdes *    documentation and/or other materials provided with the distribution.
16147455Sdes *
17255376Sdes * 3. Neither the name of the Institute nor the names of its contributors
18117610Sdes *    may be used to endorse or promote products derived from this software
19255376Sdes *    without specific prior written permission.
20255376Sdes *
21255376Sdes * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22255376Sdes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23255376Sdes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24255376Sdes * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25255376Sdes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26255376Sdes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27255376Sdes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28255376Sdes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29255376Sdes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30255376Sdes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31255376Sdes * SUCH DAMAGE.
32255376Sdes */
33255376Sdes
34255376Sdes#include "krb5_locl.h"
35255376Sdes
36255376SdesRCSID("$Id: auth_context.c 21745 2007-07-31 16:11:25Z lha $");
37255376Sdes
38255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
39255376Sdeskrb5_auth_con_init(krb5_context context,
40255376Sdes		   krb5_auth_context *auth_context)
41255376Sdes{
42255376Sdes    krb5_auth_context p;
43255376Sdes
44255376Sdes    ALLOC(p, 1);
45255376Sdes    if(!p) {
46255376Sdes	krb5_set_error_string(context, "malloc: out of memory");
47255376Sdes	return ENOMEM;
48255376Sdes    }
49255376Sdes    memset(p, 0, sizeof(*p));
50255376Sdes    ALLOC(p->authenticator, 1);
51255376Sdes    if (!p->authenticator) {
52255376Sdes	krb5_set_error_string(context, "malloc: out of memory");
53255376Sdes	free(p);
54255376Sdes	return ENOMEM;
55255376Sdes    }
56255376Sdes    memset (p->authenticator, 0, sizeof(*p->authenticator));
57255376Sdes    p->flags = KRB5_AUTH_CONTEXT_DO_TIME;
58255376Sdes
59255376Sdes    p->local_address  = NULL;
60255376Sdes    p->remote_address = NULL;
61255376Sdes    p->local_port     = 0;
62255376Sdes    p->remote_port    = 0;
63255376Sdes    p->keytype        = KEYTYPE_NULL;
64117610Sdes    p->cksumtype      = CKSUMTYPE_NONE;
65228692Sdes    *auth_context     = p;
66117610Sdes    return 0;
67228692Sdes}
68141098Sdes
69141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
70141098Sdeskrb5_auth_con_free(krb5_context context,
71141098Sdes		   krb5_auth_context auth_context)
72117610Sdes{
73141098Sdes    if (auth_context != NULL) {
74117610Sdes	krb5_free_authenticator(context, &auth_context->authenticator);
75117610Sdes	if(auth_context->local_address){
76117610Sdes	    free_HostAddress(auth_context->local_address);
77117610Sdes	    free(auth_context->local_address);
78117610Sdes	}
79117610Sdes	if(auth_context->remote_address){
80117610Sdes	    free_HostAddress(auth_context->remote_address);
81117610Sdes	    free(auth_context->remote_address);
82228692Sdes	}
83228692Sdes	krb5_free_keyblock(context, auth_context->keyblock);
84141098Sdes	krb5_free_keyblock(context, auth_context->remote_subkey);
85255376Sdes	krb5_free_keyblock(context, auth_context->local_subkey);
86141098Sdes	free (auth_context);
87271947Sdes    }
88141098Sdes    return 0;
89141098Sdes}
90174832Sdes
91141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
92141098Sdeskrb5_auth_con_setflags(krb5_context context,
93228692Sdes		       krb5_auth_context auth_context,
94255376Sdes		       int32_t flags)
95255376Sdes{
96255376Sdes    auth_context->flags = flags;
97255376Sdes    return 0;
98255376Sdes}
99255376Sdes
100255376Sdes
101255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
102255376Sdeskrb5_auth_con_getflags(krb5_context context,
103255376Sdes		       krb5_auth_context auth_context,
104255376Sdes		       int32_t *flags)
105255376Sdes{
106141098Sdes    *flags = auth_context->flags;
107141098Sdes    return 0;
108255376Sdes}
109255376Sdes
110255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
111255376Sdeskrb5_auth_con_addflags(krb5_context context,
112255376Sdes		       krb5_auth_context auth_context,
113255376Sdes		       int32_t addflags,
114255376Sdes		       int32_t *flags)
115255376Sdes{
116255376Sdes    if (flags)
117255376Sdes	*flags = auth_context->flags;
118255376Sdes    auth_context->flags |= addflags;
119255376Sdes    return 0;
120255376Sdes}
121228692Sdes
122228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
123255376Sdeskrb5_auth_con_removeflags(krb5_context context,
124255376Sdes			  krb5_auth_context auth_context,
125255376Sdes			  int32_t removeflags,
126255376Sdes			  int32_t *flags)
127255376Sdes{
128228692Sdes    if (flags)
129255376Sdes	*flags = auth_context->flags;
130255376Sdes    auth_context->flags &= ~removeflags;
131255376Sdes    return 0;
132255376Sdes}
133255376Sdes
134255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
135255376Sdeskrb5_auth_con_setaddrs(krb5_context context,
136255376Sdes		       krb5_auth_context auth_context,
137255376Sdes		       krb5_address *local_addr,
138255376Sdes		       krb5_address *remote_addr)
139255376Sdes{
140255376Sdes    if (local_addr) {
141255376Sdes	if (auth_context->local_address)
142255376Sdes	    krb5_free_address (context, auth_context->local_address);
143255376Sdes	else
144255376Sdes	    if ((auth_context->local_address = malloc(sizeof(krb5_address))) == NULL)
145255376Sdes		return ENOMEM;
146141098Sdes	krb5_copy_address(context, local_addr, auth_context->local_address);
147141098Sdes    }
148236109Sdes    if (remote_addr) {
149141098Sdes	if (auth_context->remote_address)
150228692Sdes	    krb5_free_address (context, auth_context->remote_address);
151228692Sdes	else
152228692Sdes	    if ((auth_context->remote_address = malloc(sizeof(krb5_address))) == NULL)
153228692Sdes		return ENOMEM;
154228692Sdes	krb5_copy_address(context, remote_addr, auth_context->remote_address);
155228692Sdes    }
156228692Sdes    return 0;
157228692Sdes}
158228692Sdes
159228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
160228692Sdeskrb5_auth_con_genaddrs(krb5_context context,
161228692Sdes		       krb5_auth_context auth_context,
162228692Sdes		       int fd, int flags)
163228692Sdes{
164228692Sdes    krb5_error_code ret;
165228692Sdes    krb5_address local_k_address, remote_k_address;
166228692Sdes    krb5_address *lptr = NULL, *rptr = NULL;
167228692Sdes    struct sockaddr_storage ss_local, ss_remote;
168228692Sdes    struct sockaddr *local  = (struct sockaddr *)&ss_local;
169228692Sdes    struct sockaddr *remote = (struct sockaddr *)&ss_remote;
170228692Sdes    socklen_t len;
171228692Sdes
172228692Sdes    if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) {
173228692Sdes	if (auth_context->local_address == NULL) {
174228692Sdes	    len = sizeof(ss_local);
175141098Sdes	    if(getsockname(fd, local, &len) < 0) {
176117610Sdes		ret = errno;
177255376Sdes		krb5_set_error_string (context, "getsockname: %s",
178141098Sdes				       strerror(ret));
179141098Sdes		goto out;
180141098Sdes	    }
181141098Sdes	    ret = krb5_sockaddr2address (context, local, &local_k_address);
182117610Sdes	    if(ret) goto out;
183117610Sdes	    if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) {
184141098Sdes		krb5_sockaddr2port (context, local, &auth_context->local_port);
185117610Sdes	    } else
186141098Sdes		auth_context->local_port = 0;
187117610Sdes	    lptr = &local_k_address;
188255376Sdes	}
189117610Sdes    }
190141098Sdes    if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) {
191141098Sdes	len = sizeof(ss_remote);
192117610Sdes	if(getpeername(fd, remote, &len) < 0) {
193228692Sdes	    ret = errno;
194117610Sdes	    krb5_set_error_string (context, "getpeername: %s", strerror(ret));
195228692Sdes	    goto out;
196228692Sdes	}
197141098Sdes	ret = krb5_sockaddr2address (context, remote, &remote_k_address);
198141098Sdes	if(ret) goto out;
199141098Sdes	if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) {
200141098Sdes	    krb5_sockaddr2port (context, remote, &auth_context->remote_port);
201117610Sdes	} else
202228692Sdes	    auth_context->remote_port = 0;
203174832Sdes	rptr = &remote_k_address;
204228692Sdes    }
205141098Sdes    ret = krb5_auth_con_setaddrs (context,
206141098Sdes				  auth_context,
207141098Sdes				  lptr,
208117610Sdes				  rptr);
209228692Sdes  out:
210141098Sdes    if (lptr)
211141098Sdes	krb5_free_address (context, lptr);
212141098Sdes    if (rptr)
213117610Sdes	krb5_free_address (context, rptr);
214117610Sdes    return ret;
215228692Sdes
216117610Sdes}
217141098Sdes
218141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
219228692Sdeskrb5_auth_con_setaddrs_from_fd (krb5_context context,
220228692Sdes				krb5_auth_context auth_context,
221228692Sdes				void *p_fd)
222228692Sdes{
223228692Sdes    int fd = *(int*)p_fd;
224117610Sdes    int flags = 0;
225117610Sdes    if(auth_context->local_address == NULL)
226228692Sdes	flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR;
227228692Sdes    if(auth_context->remote_address == NULL)
228117610Sdes	flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR;
229141098Sdes    return krb5_auth_con_genaddrs(context, auth_context, fd, flags);
230141098Sdes}
231141098Sdes
232141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
233228692Sdeskrb5_auth_con_getaddrs(krb5_context context,
234141098Sdes		       krb5_auth_context auth_context,
235141098Sdes		       krb5_address **local_addr,
236117610Sdes		       krb5_address **remote_addr)
237174832Sdes{
238141098Sdes    if(*local_addr)
239141098Sdes	krb5_free_address (context, *local_addr);
240141098Sdes    *local_addr = malloc (sizeof(**local_addr));
241117610Sdes    if (*local_addr == NULL) {
242228692Sdes	krb5_set_error_string(context, "malloc: out of memory");
243228692Sdes	return ENOMEM;
244228692Sdes    }
245228692Sdes    krb5_copy_address(context,
246228692Sdes		      auth_context->local_address,
247141098Sdes		      *local_addr);
248228692Sdes
249117610Sdes    if(*remote_addr)
250141098Sdes	krb5_free_address (context, *remote_addr);
251117610Sdes    *remote_addr = malloc (sizeof(**remote_addr));
252174832Sdes    if (*remote_addr == NULL) {
253174832Sdes	krb5_set_error_string(context, "malloc: out of memory");
254141098Sdes	krb5_free_address (context, *local_addr);
255141098Sdes	*local_addr = NULL;
256141098Sdes	return ENOMEM;
257141098Sdes    }
258141098Sdes    krb5_copy_address(context,
259141098Sdes		      auth_context->remote_address,
260228692Sdes		      *remote_addr);
261141098Sdes    return 0;
262174832Sdes}
263174832Sdes
264174832Sdesstatic krb5_error_code
265141098Sdescopy_key(krb5_context context,
266141098Sdes	 krb5_keyblock *in,
267141098Sdes	 krb5_keyblock **out)
268141098Sdes{
269141098Sdes    if(in)
270141098Sdes	return krb5_copy_keyblock(context, in, out);
271174832Sdes    *out = NULL; /* is this right? */
272141098Sdes    return 0;
273141098Sdes}
274117610Sdes
275141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
276141098Sdeskrb5_auth_con_getkey(krb5_context context,
277174832Sdes		     krb5_auth_context auth_context,
278141098Sdes		     krb5_keyblock **keyblock)
279141098Sdes{
280141098Sdes    return copy_key(context, auth_context->keyblock, keyblock);
281141098Sdes}
282174832Sdes
283141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
284141098Sdeskrb5_auth_con_getlocalsubkey(krb5_context context,
285174832Sdes			     krb5_auth_context auth_context,
286141098Sdes			     krb5_keyblock **keyblock)
287141098Sdes{
288228692Sdes    return copy_key(context, auth_context->local_subkey, keyblock);
289141098Sdes}
290141098Sdes
291228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
292228692Sdeskrb5_auth_con_getremotesubkey(krb5_context context,
293228692Sdes			      krb5_auth_context auth_context,
294236109Sdes			      krb5_keyblock **keyblock)
295117610Sdes{
296117610Sdes    return copy_key(context, auth_context->remote_subkey, keyblock);
297117610Sdes}
298141098Sdes
299141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
300141098Sdeskrb5_auth_con_setkey(krb5_context context,
301141098Sdes		     krb5_auth_context auth_context,
302228692Sdes		     krb5_keyblock *keyblock)
303228692Sdes{
304141098Sdes    if(auth_context->keyblock)
305141098Sdes	krb5_free_keyblock(context, auth_context->keyblock);
306141098Sdes    return copy_key(context, keyblock, &auth_context->keyblock);
307228692Sdes}
308228692Sdes
309228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
310141098Sdeskrb5_auth_con_setlocalsubkey(krb5_context context,
311141098Sdes			     krb5_auth_context auth_context,
312141098Sdes			     krb5_keyblock *keyblock)
313141098Sdes{
314141098Sdes    if(auth_context->local_subkey)
315141098Sdes	krb5_free_keyblock(context, auth_context->local_subkey);
316141098Sdes    return copy_key(context, keyblock, &auth_context->local_subkey);
317141098Sdes}
318141098Sdes
319117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
320141098Sdeskrb5_auth_con_generatelocalsubkey(krb5_context context,
321141098Sdes				  krb5_auth_context auth_context,
322141098Sdes				  krb5_keyblock *key)
323141098Sdes{
324141098Sdes    krb5_error_code ret;
325141098Sdes    krb5_keyblock *subkey;
326141098Sdes
327228692Sdes    ret = krb5_generate_subkey_extended (context, key,
328141098Sdes					 auth_context->keytype,
329117610Sdes					 &subkey);
330117610Sdes    if(ret)
331117610Sdes	return ret;
332117610Sdes    if(auth_context->local_subkey)
333117610Sdes	krb5_free_keyblock(context, auth_context->local_subkey);
334117610Sdes    auth_context->local_subkey = subkey;
335117610Sdes    return 0;
336255376Sdes}
337255376Sdes
338255376Sdes
339255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
340255376Sdeskrb5_auth_con_setremotesubkey(krb5_context context,
341255376Sdes			      krb5_auth_context auth_context,
342255376Sdes			      krb5_keyblock *keyblock)
343255376Sdes{
344255376Sdes    if(auth_context->remote_subkey)
345255376Sdes	krb5_free_keyblock(context, auth_context->remote_subkey);
346255376Sdes    return copy_key(context, keyblock, &auth_context->remote_subkey);
347255376Sdes}
348117610Sdes
349117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
350255376Sdeskrb5_auth_con_setcksumtype(krb5_context context,
351255376Sdes			   krb5_auth_context auth_context,
352255376Sdes			   krb5_cksumtype cksumtype)
353255376Sdes{
354255376Sdes    auth_context->cksumtype = cksumtype;
355117610Sdes    return 0;
356117610Sdes}
357117610Sdes
358117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
359117610Sdeskrb5_auth_con_getcksumtype(krb5_context context,
360117610Sdes			   krb5_auth_context auth_context,
361117610Sdes			   krb5_cksumtype *cksumtype)
362228692Sdes{
363174832Sdes    *cksumtype = auth_context->cksumtype;
364117610Sdes    return 0;
365117610Sdes}
366117610Sdes
367117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
368117610Sdeskrb5_auth_con_setkeytype (krb5_context context,
369255376Sdes			  krb5_auth_context auth_context,
370255376Sdes			  krb5_keytype keytype)
371255376Sdes{
372255376Sdes    auth_context->keytype = keytype;
373117610Sdes    return 0;
374255376Sdes}
375228692Sdes
376117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
377141098Sdeskrb5_auth_con_getkeytype (krb5_context context,
378141098Sdes			  krb5_auth_context auth_context,
379141098Sdes			  krb5_keytype *keytype)
380141098Sdes{
381141098Sdes    *keytype = auth_context->keytype;
382141098Sdes    return 0;
383141098Sdes}
384117610Sdes
385117610Sdes#if 0
386141098Sdeskrb5_error_code KRB5_LIB_FUNCTION
387228692Sdeskrb5_auth_con_setenctype(krb5_context context,
388117610Sdes			 krb5_auth_context auth_context,
389117610Sdes			 krb5_enctype etype)
390255376Sdes{
391228692Sdes    if(auth_context->keyblock)
392228692Sdes	krb5_free_keyblock(context, auth_context->keyblock);
393141098Sdes    ALLOC(auth_context->keyblock, 1);
394228692Sdes    if(auth_context->keyblock == NULL)
395228692Sdes	return ENOMEM;
396228692Sdes    auth_context->keyblock->keytype = etype;
397228692Sdes    return 0;
398228692Sdes}
399228692Sdes
400228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
401141098Sdeskrb5_auth_con_getenctype(krb5_context context,
402255376Sdes			 krb5_auth_context auth_context,
403255376Sdes			 krb5_enctype *etype)
404255376Sdes{
405255376Sdes    krb5_abortx(context, "unimplemented krb5_auth_getenctype called");
406255376Sdes}
407228692Sdes#endif
408141098Sdes
409228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
410117610Sdeskrb5_auth_con_getlocalseqnumber(krb5_context context,
411117610Sdes			    krb5_auth_context auth_context,
412141098Sdes			    int32_t *seqnumber)
413228692Sdes{
414228692Sdes  *seqnumber = auth_context->local_seqnumber;
415255376Sdes  return 0;
416117610Sdes}
417255376Sdes
418255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
419255376Sdeskrb5_auth_con_setlocalseqnumber (krb5_context context,
420255376Sdes			     krb5_auth_context auth_context,
421255376Sdes			     int32_t seqnumber)
422255376Sdes{
423255376Sdes  auth_context->local_seqnumber = seqnumber;
424255376Sdes  return 0;
425255376Sdes}
426255376Sdes
427255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
428255376Sdeskrb5_auth_getremoteseqnumber(krb5_context context,
429255376Sdes			     krb5_auth_context auth_context,
430255376Sdes			     int32_t *seqnumber)
431117610Sdes{
432141098Sdes  *seqnumber = auth_context->remote_seqnumber;
433117610Sdes  return 0;
434117610Sdes}
435228692Sdes
436228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
437228692Sdeskrb5_auth_con_setremoteseqnumber (krb5_context context,
438228692Sdes			      krb5_auth_context auth_context,
439228692Sdes			      int32_t seqnumber)
440228692Sdes{
441228692Sdes  auth_context->remote_seqnumber = seqnumber;
442228692Sdes  return 0;
443228692Sdes}
444228692Sdes
445228692Sdes
446228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
447141098Sdeskrb5_auth_con_getauthenticator(krb5_context context,
448117610Sdes			   krb5_auth_context auth_context,
449228692Sdes			   krb5_authenticator *authenticator)
450228692Sdes{
451228692Sdes    *authenticator = malloc(sizeof(**authenticator));
452228692Sdes    if (*authenticator == NULL) {
453141098Sdes	krb5_set_error_string(context, "malloc: out of memory");
454228692Sdes	return ENOMEM;
455228692Sdes    }
456141098Sdes
457228692Sdes    copy_Authenticator(auth_context->authenticator,
458117610Sdes		       *authenticator);
459228692Sdes    return 0;
460228692Sdes}
461117610Sdes
462117610Sdes
463117610Sdesvoid KRB5_LIB_FUNCTION
464228692Sdeskrb5_free_authenticator(krb5_context context,
465117610Sdes			krb5_authenticator *authenticator)
466255376Sdes{
467255376Sdes    free_Authenticator (*authenticator);
468255376Sdes    free (*authenticator);
469255376Sdes    *authenticator = NULL;
470228692Sdes}
471228692Sdes
472228692Sdes
473228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
474228692Sdeskrb5_auth_con_setuserkey(krb5_context context,
475228692Sdes			 krb5_auth_context auth_context,
476228692Sdes			 krb5_keyblock *keyblock)
477228692Sdes{
478228692Sdes    if(auth_context->keyblock)
479117610Sdes	krb5_free_keyblock(context, auth_context->keyblock);
480228692Sdes    return krb5_copy_keyblock(context, keyblock, &auth_context->keyblock);
481228692Sdes}
482228692Sdes
483228692Sdeskrb5_error_code KRB5_LIB_FUNCTION
484228692Sdeskrb5_auth_con_getrcache(krb5_context context,
485117610Sdes			krb5_auth_context auth_context,
486117610Sdes			krb5_rcache *rcache)
487117610Sdes{
488117610Sdes    *rcache = auth_context->rcache;
489117610Sdes    return 0;
490117610Sdes}
491117610Sdes
492117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
493117610Sdeskrb5_auth_con_setrcache(krb5_context context,
494117610Sdes			krb5_auth_context auth_context,
495117610Sdes			krb5_rcache rcache)
496117610Sdes{
497117610Sdes    auth_context->rcache = rcache;
498117610Sdes    return 0;
499117610Sdes}
500117610Sdes
501117610Sdes#if 0 /* not implemented */
502117610Sdes
503117610Sdeskrb5_error_code KRB5_LIB_FUNCTION
504255376Sdeskrb5_auth_con_initivector(krb5_context context,
505255376Sdes			  krb5_auth_context auth_context)
506255376Sdes{
507255376Sdes    krb5_abortx(context, "unimplemented krb5_auth_con_initivector called");
508255376Sdes}
509255376Sdes
510255376Sdes
511255376Sdeskrb5_error_code KRB5_LIB_FUNCTION
512255376Sdeskrb5_auth_con_setivector(krb5_context context,
513117610Sdes			 krb5_auth_context auth_context,
514117610Sdes			 krb5_pointer ivector)
515117610Sdes{
516117610Sdes    krb5_abortx(context, "unimplemented krb5_auth_con_setivector called");
517117610Sdes}
518174832Sdes
519228692Sdes#endif /* not implemented */
520117610Sdes