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