155682Smarkm/* 2103423Snectar * Copyright (c) 1997 - 2002 Kungliga Tekniska H�gskolan 355682Smarkm * (Royal Institute of Technology, Stockholm, Sweden). 455682Smarkm * All rights reserved. 555682Smarkm * 655682Smarkm * Redistribution and use in source and binary forms, with or without 755682Smarkm * modification, are permitted provided that the following conditions 855682Smarkm * are met: 955682Smarkm * 1055682Smarkm * 1. Redistributions of source code must retain the above copyright 1155682Smarkm * notice, this list of conditions and the following disclaimer. 1255682Smarkm * 1355682Smarkm * 2. Redistributions in binary form must reproduce the above copyright 1455682Smarkm * notice, this list of conditions and the following disclaimer in the 1555682Smarkm * documentation and/or other materials provided with the distribution. 1655682Smarkm * 1755682Smarkm * 3. Neither the name of the Institute nor the names of its contributors 1855682Smarkm * may be used to endorse or promote products derived from this software 1955682Smarkm * without specific prior written permission. 2055682Smarkm * 2155682Smarkm * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 2255682Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2355682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2455682Smarkm * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 2555682Smarkm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2655682Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2755682Smarkm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2855682Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2955682Smarkm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3055682Smarkm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3155682Smarkm * SUCH DAMAGE. 3255682Smarkm */ 3355682Smarkm 3455682Smarkm#include "krb5_locl.h" 3555682Smarkm 36178825SdfrRCSID("$Id: auth_context.c 21745 2007-07-31 16:11:25Z lha $"); 3755682Smarkm 38178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 3955682Smarkmkrb5_auth_con_init(krb5_context context, 4055682Smarkm krb5_auth_context *auth_context) 4155682Smarkm{ 4255682Smarkm krb5_auth_context p; 4355682Smarkm 4455682Smarkm ALLOC(p, 1); 4578527Sassar if(!p) { 4678527Sassar krb5_set_error_string(context, "malloc: out of memory"); 4755682Smarkm return ENOMEM; 4878527Sassar } 4955682Smarkm memset(p, 0, sizeof(*p)); 5055682Smarkm ALLOC(p->authenticator, 1); 5155682Smarkm if (!p->authenticator) { 5278527Sassar krb5_set_error_string(context, "malloc: out of memory"); 5355682Smarkm free(p); 5455682Smarkm return ENOMEM; 5555682Smarkm } 5655682Smarkm memset (p->authenticator, 0, sizeof(*p->authenticator)); 5755682Smarkm p->flags = KRB5_AUTH_CONTEXT_DO_TIME; 5855682Smarkm 5955682Smarkm p->local_address = NULL; 6055682Smarkm p->remote_address = NULL; 6155682Smarkm p->local_port = 0; 6255682Smarkm p->remote_port = 0; 6355682Smarkm p->keytype = KEYTYPE_NULL; 6455682Smarkm p->cksumtype = CKSUMTYPE_NONE; 6555682Smarkm *auth_context = p; 6655682Smarkm return 0; 6755682Smarkm} 6855682Smarkm 69178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 7055682Smarkmkrb5_auth_con_free(krb5_context context, 7155682Smarkm krb5_auth_context auth_context) 7255682Smarkm{ 7372445Sassar if (auth_context != NULL) { 7472445Sassar krb5_free_authenticator(context, &auth_context->authenticator); 7572445Sassar if(auth_context->local_address){ 7672445Sassar free_HostAddress(auth_context->local_address); 7772445Sassar free(auth_context->local_address); 7872445Sassar } 7972445Sassar if(auth_context->remote_address){ 8072445Sassar free_HostAddress(auth_context->remote_address); 8172445Sassar free(auth_context->remote_address); 8272445Sassar } 8372445Sassar krb5_free_keyblock(context, auth_context->keyblock); 8472445Sassar krb5_free_keyblock(context, auth_context->remote_subkey); 8572445Sassar krb5_free_keyblock(context, auth_context->local_subkey); 8672445Sassar free (auth_context); 8755682Smarkm } 8855682Smarkm return 0; 8955682Smarkm} 9055682Smarkm 91178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 9255682Smarkmkrb5_auth_con_setflags(krb5_context context, 9355682Smarkm krb5_auth_context auth_context, 9455682Smarkm int32_t flags) 9555682Smarkm{ 9655682Smarkm auth_context->flags = flags; 9755682Smarkm return 0; 9855682Smarkm} 9955682Smarkm 10055682Smarkm 101178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 10255682Smarkmkrb5_auth_con_getflags(krb5_context context, 10355682Smarkm krb5_auth_context auth_context, 10455682Smarkm int32_t *flags) 10555682Smarkm{ 10655682Smarkm *flags = auth_context->flags; 10755682Smarkm return 0; 10855682Smarkm} 10955682Smarkm 110178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 111178825Sdfrkrb5_auth_con_addflags(krb5_context context, 112178825Sdfr krb5_auth_context auth_context, 113178825Sdfr int32_t addflags, 114178825Sdfr int32_t *flags) 115178825Sdfr{ 116178825Sdfr if (flags) 117178825Sdfr *flags = auth_context->flags; 118178825Sdfr auth_context->flags |= addflags; 119178825Sdfr return 0; 120178825Sdfr} 12155682Smarkm 122178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 123178825Sdfrkrb5_auth_con_removeflags(krb5_context context, 124178825Sdfr krb5_auth_context auth_context, 125178825Sdfr int32_t removeflags, 126178825Sdfr int32_t *flags) 127178825Sdfr{ 128178825Sdfr if (flags) 129178825Sdfr *flags = auth_context->flags; 130178825Sdfr auth_context->flags &= ~removeflags; 131178825Sdfr return 0; 132178825Sdfr} 133178825Sdfr 134178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 13555682Smarkmkrb5_auth_con_setaddrs(krb5_context context, 13655682Smarkm krb5_auth_context auth_context, 13755682Smarkm krb5_address *local_addr, 13855682Smarkm krb5_address *remote_addr) 13955682Smarkm{ 14055682Smarkm if (local_addr) { 14155682Smarkm if (auth_context->local_address) 14255682Smarkm krb5_free_address (context, auth_context->local_address); 14355682Smarkm else 144178825Sdfr if ((auth_context->local_address = malloc(sizeof(krb5_address))) == NULL) 145178825Sdfr return ENOMEM; 14655682Smarkm krb5_copy_address(context, local_addr, auth_context->local_address); 14755682Smarkm } 14855682Smarkm if (remote_addr) { 14955682Smarkm if (auth_context->remote_address) 15055682Smarkm krb5_free_address (context, auth_context->remote_address); 15155682Smarkm else 152178825Sdfr if ((auth_context->remote_address = malloc(sizeof(krb5_address))) == NULL) 153178825Sdfr return ENOMEM; 15455682Smarkm krb5_copy_address(context, remote_addr, auth_context->remote_address); 15555682Smarkm } 15655682Smarkm return 0; 15755682Smarkm} 15855682Smarkm 159178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 16072445Sassarkrb5_auth_con_genaddrs(krb5_context context, 16172445Sassar krb5_auth_context auth_context, 16272445Sassar int fd, int flags) 16355682Smarkm{ 16455682Smarkm krb5_error_code ret; 16555682Smarkm krb5_address local_k_address, remote_k_address; 16655682Smarkm krb5_address *lptr = NULL, *rptr = NULL; 16755682Smarkm struct sockaddr_storage ss_local, ss_remote; 16855682Smarkm struct sockaddr *local = (struct sockaddr *)&ss_local; 16955682Smarkm struct sockaddr *remote = (struct sockaddr *)&ss_remote; 17072445Sassar socklen_t len; 17155682Smarkm 17272445Sassar if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) { 17372445Sassar if (auth_context->local_address == NULL) { 17472445Sassar len = sizeof(ss_local); 17572445Sassar if(getsockname(fd, local, &len) < 0) { 17672445Sassar ret = errno; 17778527Sassar krb5_set_error_string (context, "getsockname: %s", 17878527Sassar strerror(ret)); 17972445Sassar goto out; 18072445Sassar } 181102644Snectar ret = krb5_sockaddr2address (context, local, &local_k_address); 182102644Snectar if(ret) goto out; 18372445Sassar if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) { 18478527Sassar krb5_sockaddr2port (context, local, &auth_context->local_port); 18572445Sassar } else 18672445Sassar auth_context->local_port = 0; 18772445Sassar lptr = &local_k_address; 18855682Smarkm } 18955682Smarkm } 19072445Sassar if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) { 19155682Smarkm len = sizeof(ss_remote); 19255682Smarkm if(getpeername(fd, remote, &len) < 0) { 19355682Smarkm ret = errno; 19478527Sassar krb5_set_error_string (context, "getpeername: %s", strerror(ret)); 19555682Smarkm goto out; 19655682Smarkm } 197102644Snectar ret = krb5_sockaddr2address (context, remote, &remote_k_address); 198102644Snectar if(ret) goto out; 19972445Sassar if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) { 20078527Sassar krb5_sockaddr2port (context, remote, &auth_context->remote_port); 20172445Sassar } else 20272445Sassar auth_context->remote_port = 0; 20355682Smarkm rptr = &remote_k_address; 20455682Smarkm } 20555682Smarkm ret = krb5_auth_con_setaddrs (context, 20655682Smarkm auth_context, 20755682Smarkm lptr, 20855682Smarkm rptr); 20972445Sassar out: 21055682Smarkm if (lptr) 21155682Smarkm krb5_free_address (context, lptr); 21255682Smarkm if (rptr) 21355682Smarkm krb5_free_address (context, rptr); 21455682Smarkm return ret; 21572445Sassar 21655682Smarkm} 21755682Smarkm 218178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 21972445Sassarkrb5_auth_con_setaddrs_from_fd (krb5_context context, 22072445Sassar krb5_auth_context auth_context, 22172445Sassar void *p_fd) 22272445Sassar{ 22372445Sassar int fd = *(int*)p_fd; 22472445Sassar int flags = 0; 22572445Sassar if(auth_context->local_address == NULL) 22672445Sassar flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR; 22772445Sassar if(auth_context->remote_address == NULL) 22872445Sassar flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR; 22972445Sassar return krb5_auth_con_genaddrs(context, auth_context, fd, flags); 23072445Sassar} 23172445Sassar 232178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 23355682Smarkmkrb5_auth_con_getaddrs(krb5_context context, 23455682Smarkm krb5_auth_context auth_context, 23555682Smarkm krb5_address **local_addr, 23655682Smarkm krb5_address **remote_addr) 23755682Smarkm{ 23855682Smarkm if(*local_addr) 23955682Smarkm krb5_free_address (context, *local_addr); 24055682Smarkm *local_addr = malloc (sizeof(**local_addr)); 24178527Sassar if (*local_addr == NULL) { 24278527Sassar krb5_set_error_string(context, "malloc: out of memory"); 24355682Smarkm return ENOMEM; 24478527Sassar } 24555682Smarkm krb5_copy_address(context, 24655682Smarkm auth_context->local_address, 24755682Smarkm *local_addr); 24855682Smarkm 24955682Smarkm if(*remote_addr) 25055682Smarkm krb5_free_address (context, *remote_addr); 25155682Smarkm *remote_addr = malloc (sizeof(**remote_addr)); 25278527Sassar if (*remote_addr == NULL) { 25378527Sassar krb5_set_error_string(context, "malloc: out of memory"); 25478527Sassar krb5_free_address (context, *local_addr); 25578527Sassar *local_addr = NULL; 25655682Smarkm return ENOMEM; 25778527Sassar } 25855682Smarkm krb5_copy_address(context, 25955682Smarkm auth_context->remote_address, 26055682Smarkm *remote_addr); 26155682Smarkm return 0; 26255682Smarkm} 26355682Smarkm 26455682Smarkmstatic krb5_error_code 26555682Smarkmcopy_key(krb5_context context, 26655682Smarkm krb5_keyblock *in, 26755682Smarkm krb5_keyblock **out) 26855682Smarkm{ 26955682Smarkm if(in) 27055682Smarkm return krb5_copy_keyblock(context, in, out); 27155682Smarkm *out = NULL; /* is this right? */ 27255682Smarkm return 0; 27355682Smarkm} 27455682Smarkm 275178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 27655682Smarkmkrb5_auth_con_getkey(krb5_context context, 27755682Smarkm krb5_auth_context auth_context, 27855682Smarkm krb5_keyblock **keyblock) 27955682Smarkm{ 28055682Smarkm return copy_key(context, auth_context->keyblock, keyblock); 28155682Smarkm} 28255682Smarkm 283178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 28455682Smarkmkrb5_auth_con_getlocalsubkey(krb5_context context, 28555682Smarkm krb5_auth_context auth_context, 28655682Smarkm krb5_keyblock **keyblock) 28755682Smarkm{ 28855682Smarkm return copy_key(context, auth_context->local_subkey, keyblock); 28955682Smarkm} 29055682Smarkm 291178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 29255682Smarkmkrb5_auth_con_getremotesubkey(krb5_context context, 29355682Smarkm krb5_auth_context auth_context, 29455682Smarkm krb5_keyblock **keyblock) 29555682Smarkm{ 29655682Smarkm return copy_key(context, auth_context->remote_subkey, keyblock); 29755682Smarkm} 29855682Smarkm 299178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 30055682Smarkmkrb5_auth_con_setkey(krb5_context context, 30155682Smarkm krb5_auth_context auth_context, 30255682Smarkm krb5_keyblock *keyblock) 30355682Smarkm{ 30455682Smarkm if(auth_context->keyblock) 30555682Smarkm krb5_free_keyblock(context, auth_context->keyblock); 30655682Smarkm return copy_key(context, keyblock, &auth_context->keyblock); 30755682Smarkm} 30855682Smarkm 309178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 31055682Smarkmkrb5_auth_con_setlocalsubkey(krb5_context context, 31155682Smarkm krb5_auth_context auth_context, 31255682Smarkm krb5_keyblock *keyblock) 31355682Smarkm{ 31455682Smarkm if(auth_context->local_subkey) 31555682Smarkm krb5_free_keyblock(context, auth_context->local_subkey); 31655682Smarkm return copy_key(context, keyblock, &auth_context->local_subkey); 31755682Smarkm} 31855682Smarkm 319178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 320103423Snectarkrb5_auth_con_generatelocalsubkey(krb5_context context, 321103423Snectar krb5_auth_context auth_context, 322103423Snectar krb5_keyblock *key) 323103423Snectar{ 324103423Snectar krb5_error_code ret; 325103423Snectar krb5_keyblock *subkey; 326103423Snectar 327178825Sdfr ret = krb5_generate_subkey_extended (context, key, 328178825Sdfr auth_context->keytype, 329178825Sdfr &subkey); 330103423Snectar if(ret) 331103423Snectar return ret; 332103423Snectar if(auth_context->local_subkey) 333103423Snectar krb5_free_keyblock(context, auth_context->local_subkey); 334103423Snectar auth_context->local_subkey = subkey; 335103423Snectar return 0; 336103423Snectar} 337103423Snectar 338103423Snectar 339178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 34055682Smarkmkrb5_auth_con_setremotesubkey(krb5_context context, 34155682Smarkm krb5_auth_context auth_context, 34255682Smarkm krb5_keyblock *keyblock) 34355682Smarkm{ 34455682Smarkm if(auth_context->remote_subkey) 34555682Smarkm krb5_free_keyblock(context, auth_context->remote_subkey); 34655682Smarkm return copy_key(context, keyblock, &auth_context->remote_subkey); 34755682Smarkm} 34855682Smarkm 349178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 35090926Snectarkrb5_auth_con_setcksumtype(krb5_context context, 35190926Snectar krb5_auth_context auth_context, 35290926Snectar krb5_cksumtype cksumtype) 35355682Smarkm{ 35455682Smarkm auth_context->cksumtype = cksumtype; 35555682Smarkm return 0; 35655682Smarkm} 35755682Smarkm 358178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 35990926Snectarkrb5_auth_con_getcksumtype(krb5_context context, 36090926Snectar krb5_auth_context auth_context, 36190926Snectar krb5_cksumtype *cksumtype) 36255682Smarkm{ 36355682Smarkm *cksumtype = auth_context->cksumtype; 36455682Smarkm return 0; 36555682Smarkm} 36655682Smarkm 367178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 36890926Snectarkrb5_auth_con_setkeytype (krb5_context context, 36990926Snectar krb5_auth_context auth_context, 37090926Snectar krb5_keytype keytype) 37155682Smarkm{ 37255682Smarkm auth_context->keytype = keytype; 37355682Smarkm return 0; 37455682Smarkm} 37555682Smarkm 376178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 37790926Snectarkrb5_auth_con_getkeytype (krb5_context context, 37890926Snectar krb5_auth_context auth_context, 37990926Snectar krb5_keytype *keytype) 38055682Smarkm{ 38155682Smarkm *keytype = auth_context->keytype; 38255682Smarkm return 0; 38355682Smarkm} 38455682Smarkm 38555682Smarkm#if 0 386178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 38790926Snectarkrb5_auth_con_setenctype(krb5_context context, 38890926Snectar krb5_auth_context auth_context, 38990926Snectar krb5_enctype etype) 39055682Smarkm{ 39155682Smarkm if(auth_context->keyblock) 39255682Smarkm krb5_free_keyblock(context, auth_context->keyblock); 39355682Smarkm ALLOC(auth_context->keyblock, 1); 39455682Smarkm if(auth_context->keyblock == NULL) 39555682Smarkm return ENOMEM; 39655682Smarkm auth_context->keyblock->keytype = etype; 39755682Smarkm return 0; 39855682Smarkm} 39955682Smarkm 400178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 40190926Snectarkrb5_auth_con_getenctype(krb5_context context, 40290926Snectar krb5_auth_context auth_context, 40390926Snectar krb5_enctype *etype) 40455682Smarkm{ 40555682Smarkm krb5_abortx(context, "unimplemented krb5_auth_getenctype called"); 40655682Smarkm} 40755682Smarkm#endif 40855682Smarkm 409178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 41090926Snectarkrb5_auth_con_getlocalseqnumber(krb5_context context, 41155682Smarkm krb5_auth_context auth_context, 41255682Smarkm int32_t *seqnumber) 41355682Smarkm{ 41455682Smarkm *seqnumber = auth_context->local_seqnumber; 41555682Smarkm return 0; 41655682Smarkm} 41755682Smarkm 418178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 41990926Snectarkrb5_auth_con_setlocalseqnumber (krb5_context context, 42055682Smarkm krb5_auth_context auth_context, 42155682Smarkm int32_t seqnumber) 42255682Smarkm{ 42355682Smarkm auth_context->local_seqnumber = seqnumber; 42455682Smarkm return 0; 42555682Smarkm} 42655682Smarkm 427178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 42855682Smarkmkrb5_auth_getremoteseqnumber(krb5_context context, 42955682Smarkm krb5_auth_context auth_context, 43055682Smarkm int32_t *seqnumber) 43155682Smarkm{ 43255682Smarkm *seqnumber = auth_context->remote_seqnumber; 43355682Smarkm return 0; 43455682Smarkm} 43555682Smarkm 436178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 43790926Snectarkrb5_auth_con_setremoteseqnumber (krb5_context context, 43855682Smarkm krb5_auth_context auth_context, 43955682Smarkm int32_t seqnumber) 44055682Smarkm{ 44155682Smarkm auth_context->remote_seqnumber = seqnumber; 44255682Smarkm return 0; 44355682Smarkm} 44455682Smarkm 44555682Smarkm 446178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 44790926Snectarkrb5_auth_con_getauthenticator(krb5_context context, 44855682Smarkm krb5_auth_context auth_context, 44955682Smarkm krb5_authenticator *authenticator) 45055682Smarkm{ 45155682Smarkm *authenticator = malloc(sizeof(**authenticator)); 45278527Sassar if (*authenticator == NULL) { 45378527Sassar krb5_set_error_string(context, "malloc: out of memory"); 45455682Smarkm return ENOMEM; 45578527Sassar } 45655682Smarkm 45755682Smarkm copy_Authenticator(auth_context->authenticator, 45855682Smarkm *authenticator); 45955682Smarkm return 0; 46055682Smarkm} 46155682Smarkm 46255682Smarkm 463178825Sdfrvoid KRB5_LIB_FUNCTION 46455682Smarkmkrb5_free_authenticator(krb5_context context, 46555682Smarkm krb5_authenticator *authenticator) 46655682Smarkm{ 46755682Smarkm free_Authenticator (*authenticator); 46855682Smarkm free (*authenticator); 46955682Smarkm *authenticator = NULL; 47055682Smarkm} 47155682Smarkm 47255682Smarkm 473178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 47455682Smarkmkrb5_auth_con_setuserkey(krb5_context context, 47555682Smarkm krb5_auth_context auth_context, 47655682Smarkm krb5_keyblock *keyblock) 47755682Smarkm{ 47855682Smarkm if(auth_context->keyblock) 47955682Smarkm krb5_free_keyblock(context, auth_context->keyblock); 48055682Smarkm return krb5_copy_keyblock(context, keyblock, &auth_context->keyblock); 48155682Smarkm} 48255682Smarkm 483178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 48472445Sassarkrb5_auth_con_getrcache(krb5_context context, 48572445Sassar krb5_auth_context auth_context, 48672445Sassar krb5_rcache *rcache) 48772445Sassar{ 48872445Sassar *rcache = auth_context->rcache; 48972445Sassar return 0; 49072445Sassar} 49172445Sassar 492178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 49372445Sassarkrb5_auth_con_setrcache(krb5_context context, 49472445Sassar krb5_auth_context auth_context, 49572445Sassar krb5_rcache rcache) 49672445Sassar{ 49772445Sassar auth_context->rcache = rcache; 49872445Sassar return 0; 49972445Sassar} 50072445Sassar 50155682Smarkm#if 0 /* not implemented */ 50255682Smarkm 503178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 50455682Smarkmkrb5_auth_con_initivector(krb5_context context, 50555682Smarkm krb5_auth_context auth_context) 50655682Smarkm{ 50755682Smarkm krb5_abortx(context, "unimplemented krb5_auth_con_initivector called"); 50855682Smarkm} 50955682Smarkm 51055682Smarkm 511178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION 51255682Smarkmkrb5_auth_con_setivector(krb5_context context, 51355682Smarkm krb5_auth_context auth_context, 51455682Smarkm krb5_pointer ivector) 51555682Smarkm{ 51655682Smarkm krb5_abortx(context, "unimplemented krb5_auth_con_setivector called"); 51755682Smarkm} 51855682Smarkm 51955682Smarkm#endif /* not implemented */ 520