1b528cefcSMark Murray /* 2adb0ddaeSAssar Westerlund * Copyright (c) 1997 - 2001 Kungliga Tekniska H�gskolan 3b528cefcSMark Murray * (Royal Institute of Technology, Stockholm, Sweden). 4b528cefcSMark Murray * All rights reserved. 5b528cefcSMark Murray * 6b528cefcSMark Murray * Redistribution and use in source and binary forms, with or without 7b528cefcSMark Murray * modification, are permitted provided that the following conditions 8b528cefcSMark Murray * are met: 9b528cefcSMark Murray * 10b528cefcSMark Murray * 1. Redistributions of source code must retain the above copyright 11b528cefcSMark Murray * notice, this list of conditions and the following disclaimer. 12b528cefcSMark Murray * 13b528cefcSMark Murray * 2. Redistributions in binary form must reproduce the above copyright 14b528cefcSMark Murray * notice, this list of conditions and the following disclaimer in the 15b528cefcSMark Murray * documentation and/or other materials provided with the distribution. 16b528cefcSMark Murray * 17b528cefcSMark Murray * 3. Neither the name of the Institute nor the names of its contributors 18b528cefcSMark Murray * may be used to endorse or promote products derived from this software 19b528cefcSMark Murray * without specific prior written permission. 20b528cefcSMark Murray * 21b528cefcSMark Murray * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22b528cefcSMark Murray * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23b528cefcSMark Murray * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24b528cefcSMark Murray * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25b528cefcSMark Murray * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26b528cefcSMark Murray * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27b528cefcSMark Murray * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28b528cefcSMark Murray * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29b528cefcSMark Murray * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30b528cefcSMark Murray * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31b528cefcSMark Murray * SUCH DAMAGE. 32b528cefcSMark Murray */ 33b528cefcSMark Murray 34b528cefcSMark Murray #include "krb5_locl.h" 35b528cefcSMark Murray 36adb0ddaeSAssar Westerlund RCSID("$Id: auth_context.c,v 1.56 2001/05/14 06:14:44 assar Exp $"); 37b528cefcSMark Murray 38b528cefcSMark Murray krb5_error_code 39b528cefcSMark Murray krb5_auth_con_init(krb5_context context, 40b528cefcSMark Murray krb5_auth_context *auth_context) 41b528cefcSMark Murray { 42b528cefcSMark Murray krb5_auth_context p; 43b528cefcSMark Murray 44b528cefcSMark Murray ALLOC(p, 1); 45adb0ddaeSAssar Westerlund if(!p) { 46adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 47b528cefcSMark Murray return ENOMEM; 48adb0ddaeSAssar Westerlund } 49b528cefcSMark Murray memset(p, 0, sizeof(*p)); 50b528cefcSMark Murray ALLOC(p->authenticator, 1); 51b528cefcSMark Murray if (!p->authenticator) { 52adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 53b528cefcSMark Murray free(p); 54b528cefcSMark Murray return ENOMEM; 55b528cefcSMark Murray } 56b528cefcSMark Murray memset (p->authenticator, 0, sizeof(*p->authenticator)); 57b528cefcSMark Murray p->flags = KRB5_AUTH_CONTEXT_DO_TIME; 58b528cefcSMark Murray 59b528cefcSMark Murray p->local_address = NULL; 60b528cefcSMark Murray p->remote_address = NULL; 61b528cefcSMark Murray p->local_port = 0; 62b528cefcSMark Murray p->remote_port = 0; 63b528cefcSMark Murray p->keytype = KEYTYPE_NULL; 64b528cefcSMark Murray p->cksumtype = CKSUMTYPE_NONE; 65b528cefcSMark Murray *auth_context = p; 66b528cefcSMark Murray return 0; 67b528cefcSMark Murray } 68b528cefcSMark Murray 69b528cefcSMark Murray krb5_error_code 70b528cefcSMark Murray krb5_auth_con_free(krb5_context context, 71b528cefcSMark Murray krb5_auth_context auth_context) 72b528cefcSMark Murray { 735e9cd1aeSAssar Westerlund if (auth_context != NULL) { 74b528cefcSMark Murray krb5_free_authenticator(context, &auth_context->authenticator); 75b528cefcSMark Murray if(auth_context->local_address){ 76b528cefcSMark Murray free_HostAddress(auth_context->local_address); 77b528cefcSMark Murray free(auth_context->local_address); 78b528cefcSMark Murray } 79b528cefcSMark Murray if(auth_context->remote_address){ 80b528cefcSMark Murray free_HostAddress(auth_context->remote_address); 81b528cefcSMark Murray free(auth_context->remote_address); 82b528cefcSMark Murray } 83b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 84b528cefcSMark Murray krb5_free_keyblock(context, auth_context->remote_subkey); 85b528cefcSMark Murray krb5_free_keyblock(context, auth_context->local_subkey); 86b528cefcSMark Murray free (auth_context); 875e9cd1aeSAssar Westerlund } 88b528cefcSMark Murray return 0; 89b528cefcSMark Murray } 90b528cefcSMark Murray 91b528cefcSMark Murray krb5_error_code 92b528cefcSMark Murray krb5_auth_con_setflags(krb5_context context, 93b528cefcSMark Murray krb5_auth_context auth_context, 94b528cefcSMark Murray int32_t flags) 95b528cefcSMark Murray { 96b528cefcSMark Murray auth_context->flags = flags; 97b528cefcSMark Murray return 0; 98b528cefcSMark Murray } 99b528cefcSMark Murray 100b528cefcSMark Murray 101b528cefcSMark Murray krb5_error_code 102b528cefcSMark Murray krb5_auth_con_getflags(krb5_context context, 103b528cefcSMark Murray krb5_auth_context auth_context, 104b528cefcSMark Murray int32_t *flags) 105b528cefcSMark Murray { 106b528cefcSMark Murray *flags = auth_context->flags; 107b528cefcSMark Murray return 0; 108b528cefcSMark Murray } 109b528cefcSMark Murray 110b528cefcSMark Murray 111b528cefcSMark Murray krb5_error_code 112b528cefcSMark Murray krb5_auth_con_setaddrs(krb5_context context, 113b528cefcSMark Murray krb5_auth_context auth_context, 114b528cefcSMark Murray krb5_address *local_addr, 115b528cefcSMark Murray krb5_address *remote_addr) 116b528cefcSMark Murray { 117b528cefcSMark Murray if (local_addr) { 118b528cefcSMark Murray if (auth_context->local_address) 119b528cefcSMark Murray krb5_free_address (context, auth_context->local_address); 120b528cefcSMark Murray else 121b528cefcSMark Murray auth_context->local_address = malloc(sizeof(krb5_address)); 122b528cefcSMark Murray krb5_copy_address(context, local_addr, auth_context->local_address); 123b528cefcSMark Murray } 124b528cefcSMark Murray if (remote_addr) { 125b528cefcSMark Murray if (auth_context->remote_address) 126b528cefcSMark Murray krb5_free_address (context, auth_context->remote_address); 127b528cefcSMark Murray else 128b528cefcSMark Murray auth_context->remote_address = malloc(sizeof(krb5_address)); 129b528cefcSMark Murray krb5_copy_address(context, remote_addr, auth_context->remote_address); 130b528cefcSMark Murray } 131b528cefcSMark Murray return 0; 132b528cefcSMark Murray } 133b528cefcSMark Murray 134b528cefcSMark Murray krb5_error_code 1355e9cd1aeSAssar Westerlund krb5_auth_con_genaddrs(krb5_context context, 136b528cefcSMark Murray krb5_auth_context auth_context, 1375e9cd1aeSAssar Westerlund int fd, int flags) 138b528cefcSMark Murray { 139b528cefcSMark Murray krb5_error_code ret; 140b528cefcSMark Murray krb5_address local_k_address, remote_k_address; 141b528cefcSMark Murray krb5_address *lptr = NULL, *rptr = NULL; 142b528cefcSMark Murray struct sockaddr_storage ss_local, ss_remote; 143b528cefcSMark Murray struct sockaddr *local = (struct sockaddr *)&ss_local; 144b528cefcSMark Murray struct sockaddr *remote = (struct sockaddr *)&ss_remote; 1455e9cd1aeSAssar Westerlund socklen_t len; 146b528cefcSMark Murray 1475e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) { 148b528cefcSMark Murray if (auth_context->local_address == NULL) { 149b528cefcSMark Murray len = sizeof(ss_local); 150b528cefcSMark Murray if(getsockname(fd, local, &len) < 0) { 151b528cefcSMark Murray ret = errno; 152adb0ddaeSAssar Westerlund krb5_set_error_string (context, "getsockname: %s", 153adb0ddaeSAssar Westerlund strerror(ret)); 154b528cefcSMark Murray goto out; 155b528cefcSMark Murray } 156adb0ddaeSAssar Westerlund krb5_sockaddr2address (context, local, &local_k_address); 1575e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) { 158adb0ddaeSAssar Westerlund krb5_sockaddr2port (context, local, &auth_context->local_port); 1595e9cd1aeSAssar Westerlund } else 1605e9cd1aeSAssar Westerlund auth_context->local_port = 0; 161b528cefcSMark Murray lptr = &local_k_address; 162b528cefcSMark Murray } 1635e9cd1aeSAssar Westerlund } 1645e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) { 165b528cefcSMark Murray len = sizeof(ss_remote); 166b528cefcSMark Murray if(getpeername(fd, remote, &len) < 0) { 167b528cefcSMark Murray ret = errno; 168adb0ddaeSAssar Westerlund krb5_set_error_string (context, "getpeername: %s", strerror(ret)); 169b528cefcSMark Murray goto out; 170b528cefcSMark Murray } 171adb0ddaeSAssar Westerlund krb5_sockaddr2address (context, remote, &remote_k_address); 1725e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) { 173adb0ddaeSAssar Westerlund krb5_sockaddr2port (context, remote, &auth_context->remote_port); 1745e9cd1aeSAssar Westerlund } else 1755e9cd1aeSAssar Westerlund auth_context->remote_port = 0; 176b528cefcSMark Murray rptr = &remote_k_address; 177b528cefcSMark Murray } 178b528cefcSMark Murray ret = krb5_auth_con_setaddrs (context, 179b528cefcSMark Murray auth_context, 180b528cefcSMark Murray lptr, 181b528cefcSMark Murray rptr); 182b528cefcSMark Murray out: 183b528cefcSMark Murray if (lptr) 184b528cefcSMark Murray krb5_free_address (context, lptr); 185b528cefcSMark Murray if (rptr) 186b528cefcSMark Murray krb5_free_address (context, rptr); 187b528cefcSMark Murray return ret; 1885e9cd1aeSAssar Westerlund 1895e9cd1aeSAssar Westerlund } 1905e9cd1aeSAssar Westerlund 1915e9cd1aeSAssar Westerlund krb5_error_code 1925e9cd1aeSAssar Westerlund krb5_auth_con_setaddrs_from_fd (krb5_context context, 1935e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 1945e9cd1aeSAssar Westerlund void *p_fd) 1955e9cd1aeSAssar Westerlund { 1965e9cd1aeSAssar Westerlund int fd = *(int*)p_fd; 1975e9cd1aeSAssar Westerlund int flags = 0; 1985e9cd1aeSAssar Westerlund if(auth_context->local_address == NULL) 1995e9cd1aeSAssar Westerlund flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR; 2005e9cd1aeSAssar Westerlund if(auth_context->remote_address == NULL) 2015e9cd1aeSAssar Westerlund flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR; 2025e9cd1aeSAssar Westerlund return krb5_auth_con_genaddrs(context, auth_context, fd, flags); 203b528cefcSMark Murray } 204b528cefcSMark Murray 205b528cefcSMark Murray krb5_error_code 206b528cefcSMark Murray krb5_auth_con_getaddrs(krb5_context context, 207b528cefcSMark Murray krb5_auth_context auth_context, 208b528cefcSMark Murray krb5_address **local_addr, 209b528cefcSMark Murray krb5_address **remote_addr) 210b528cefcSMark Murray { 211b528cefcSMark Murray if(*local_addr) 212b528cefcSMark Murray krb5_free_address (context, *local_addr); 213b528cefcSMark Murray *local_addr = malloc (sizeof(**local_addr)); 214adb0ddaeSAssar Westerlund if (*local_addr == NULL) { 215adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 216b528cefcSMark Murray return ENOMEM; 217adb0ddaeSAssar Westerlund } 218b528cefcSMark Murray krb5_copy_address(context, 219b528cefcSMark Murray auth_context->local_address, 220b528cefcSMark Murray *local_addr); 221b528cefcSMark Murray 222b528cefcSMark Murray if(*remote_addr) 223b528cefcSMark Murray krb5_free_address (context, *remote_addr); 224b528cefcSMark Murray *remote_addr = malloc (sizeof(**remote_addr)); 225adb0ddaeSAssar Westerlund if (*remote_addr == NULL) { 226adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 227adb0ddaeSAssar Westerlund krb5_free_address (context, *local_addr); 228adb0ddaeSAssar Westerlund *local_addr = NULL; 229b528cefcSMark Murray return ENOMEM; 230adb0ddaeSAssar Westerlund } 231b528cefcSMark Murray krb5_copy_address(context, 232b528cefcSMark Murray auth_context->remote_address, 233b528cefcSMark Murray *remote_addr); 234b528cefcSMark Murray return 0; 235b528cefcSMark Murray } 236b528cefcSMark Murray 237b528cefcSMark Murray static krb5_error_code 238b528cefcSMark Murray copy_key(krb5_context context, 239b528cefcSMark Murray krb5_keyblock *in, 240b528cefcSMark Murray krb5_keyblock **out) 241b528cefcSMark Murray { 242b528cefcSMark Murray if(in) 243b528cefcSMark Murray return krb5_copy_keyblock(context, in, out); 244b528cefcSMark Murray *out = NULL; /* is this right? */ 245b528cefcSMark Murray return 0; 246b528cefcSMark Murray } 247b528cefcSMark Murray 248b528cefcSMark Murray krb5_error_code 249b528cefcSMark Murray krb5_auth_con_getkey(krb5_context context, 250b528cefcSMark Murray krb5_auth_context auth_context, 251b528cefcSMark Murray krb5_keyblock **keyblock) 252b528cefcSMark Murray { 253b528cefcSMark Murray return copy_key(context, auth_context->keyblock, keyblock); 254b528cefcSMark Murray } 255b528cefcSMark Murray 256b528cefcSMark Murray krb5_error_code 257b528cefcSMark Murray krb5_auth_con_getlocalsubkey(krb5_context context, 258b528cefcSMark Murray krb5_auth_context auth_context, 259b528cefcSMark Murray krb5_keyblock **keyblock) 260b528cefcSMark Murray { 261b528cefcSMark Murray return copy_key(context, auth_context->local_subkey, keyblock); 262b528cefcSMark Murray } 263b528cefcSMark Murray 264b528cefcSMark Murray krb5_error_code 265b528cefcSMark Murray krb5_auth_con_getremotesubkey(krb5_context context, 266b528cefcSMark Murray krb5_auth_context auth_context, 267b528cefcSMark Murray krb5_keyblock **keyblock) 268b528cefcSMark Murray { 269b528cefcSMark Murray return copy_key(context, auth_context->remote_subkey, keyblock); 270b528cefcSMark Murray } 271b528cefcSMark Murray 272b528cefcSMark Murray krb5_error_code 273b528cefcSMark Murray krb5_auth_con_setkey(krb5_context context, 274b528cefcSMark Murray krb5_auth_context auth_context, 275b528cefcSMark Murray krb5_keyblock *keyblock) 276b528cefcSMark Murray { 277b528cefcSMark Murray if(auth_context->keyblock) 278b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 279b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->keyblock); 280b528cefcSMark Murray } 281b528cefcSMark Murray 282b528cefcSMark Murray krb5_error_code 283b528cefcSMark Murray krb5_auth_con_setlocalsubkey(krb5_context context, 284b528cefcSMark Murray krb5_auth_context auth_context, 285b528cefcSMark Murray krb5_keyblock *keyblock) 286b528cefcSMark Murray { 287b528cefcSMark Murray if(auth_context->local_subkey) 288b528cefcSMark Murray krb5_free_keyblock(context, auth_context->local_subkey); 289b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->local_subkey); 290b528cefcSMark Murray } 291b528cefcSMark Murray 292b528cefcSMark Murray krb5_error_code 293b528cefcSMark Murray krb5_auth_con_setremotesubkey(krb5_context context, 294b528cefcSMark Murray krb5_auth_context auth_context, 295b528cefcSMark Murray krb5_keyblock *keyblock) 296b528cefcSMark Murray { 297b528cefcSMark Murray if(auth_context->remote_subkey) 298b528cefcSMark Murray krb5_free_keyblock(context, auth_context->remote_subkey); 299b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->remote_subkey); 300b528cefcSMark Murray } 301b528cefcSMark Murray 302b528cefcSMark Murray krb5_error_code 303b528cefcSMark Murray krb5_auth_setcksumtype(krb5_context context, 304b528cefcSMark Murray krb5_auth_context auth_context, 305b528cefcSMark Murray krb5_cksumtype cksumtype) 306b528cefcSMark Murray { 307b528cefcSMark Murray auth_context->cksumtype = cksumtype; 308b528cefcSMark Murray return 0; 309b528cefcSMark Murray } 310b528cefcSMark Murray 311b528cefcSMark Murray krb5_error_code 312b528cefcSMark Murray krb5_auth_getcksumtype(krb5_context context, 313b528cefcSMark Murray krb5_auth_context auth_context, 314b528cefcSMark Murray krb5_cksumtype *cksumtype) 315b528cefcSMark Murray { 316b528cefcSMark Murray *cksumtype = auth_context->cksumtype; 317b528cefcSMark Murray return 0; 318b528cefcSMark Murray } 319b528cefcSMark Murray 320b528cefcSMark Murray krb5_error_code 321b528cefcSMark Murray krb5_auth_setkeytype (krb5_context context, 322b528cefcSMark Murray krb5_auth_context auth_context, 323b528cefcSMark Murray krb5_keytype keytype) 324b528cefcSMark Murray { 325b528cefcSMark Murray auth_context->keytype = keytype; 326b528cefcSMark Murray return 0; 327b528cefcSMark Murray } 328b528cefcSMark Murray 329b528cefcSMark Murray krb5_error_code 330b528cefcSMark Murray krb5_auth_getkeytype (krb5_context context, 331b528cefcSMark Murray krb5_auth_context auth_context, 332b528cefcSMark Murray krb5_keytype *keytype) 333b528cefcSMark Murray { 334b528cefcSMark Murray *keytype = auth_context->keytype; 335b528cefcSMark Murray return 0; 336b528cefcSMark Murray } 337b528cefcSMark Murray 338b528cefcSMark Murray #if 0 339b528cefcSMark Murray krb5_error_code 340b528cefcSMark Murray krb5_auth_setenctype(krb5_context context, 341b528cefcSMark Murray krb5_auth_context auth_context, 342b528cefcSMark Murray krb5_enctype etype) 343b528cefcSMark Murray { 344b528cefcSMark Murray if(auth_context->keyblock) 345b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 346b528cefcSMark Murray ALLOC(auth_context->keyblock, 1); 347b528cefcSMark Murray if(auth_context->keyblock == NULL) 348b528cefcSMark Murray return ENOMEM; 349b528cefcSMark Murray auth_context->keyblock->keytype = etype; 350b528cefcSMark Murray return 0; 351b528cefcSMark Murray } 352b528cefcSMark Murray 353b528cefcSMark Murray krb5_error_code 354b528cefcSMark Murray krb5_auth_getenctype(krb5_context context, 355b528cefcSMark Murray krb5_auth_context auth_context, 356b528cefcSMark Murray krb5_enctype *etype) 357b528cefcSMark Murray { 358b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_getenctype called"); 359b528cefcSMark Murray } 360b528cefcSMark Murray #endif 361b528cefcSMark Murray 362b528cefcSMark Murray krb5_error_code 363b528cefcSMark Murray krb5_auth_getlocalseqnumber(krb5_context context, 364b528cefcSMark Murray krb5_auth_context auth_context, 365b528cefcSMark Murray int32_t *seqnumber) 366b528cefcSMark Murray { 367b528cefcSMark Murray *seqnumber = auth_context->local_seqnumber; 368b528cefcSMark Murray return 0; 369b528cefcSMark Murray } 370b528cefcSMark Murray 371b528cefcSMark Murray krb5_error_code 372b528cefcSMark Murray krb5_auth_setlocalseqnumber (krb5_context context, 373b528cefcSMark Murray krb5_auth_context auth_context, 374b528cefcSMark Murray int32_t seqnumber) 375b528cefcSMark Murray { 376b528cefcSMark Murray auth_context->local_seqnumber = seqnumber; 377b528cefcSMark Murray return 0; 378b528cefcSMark Murray } 379b528cefcSMark Murray 380b528cefcSMark Murray krb5_error_code 381b528cefcSMark Murray krb5_auth_getremoteseqnumber(krb5_context context, 382b528cefcSMark Murray krb5_auth_context auth_context, 383b528cefcSMark Murray int32_t *seqnumber) 384b528cefcSMark Murray { 385b528cefcSMark Murray *seqnumber = auth_context->remote_seqnumber; 386b528cefcSMark Murray return 0; 387b528cefcSMark Murray } 388b528cefcSMark Murray 389b528cefcSMark Murray krb5_error_code 390b528cefcSMark Murray krb5_auth_setremoteseqnumber (krb5_context context, 391b528cefcSMark Murray krb5_auth_context auth_context, 392b528cefcSMark Murray int32_t seqnumber) 393b528cefcSMark Murray { 394b528cefcSMark Murray auth_context->remote_seqnumber = seqnumber; 395b528cefcSMark Murray return 0; 396b528cefcSMark Murray } 397b528cefcSMark Murray 398b528cefcSMark Murray 399b528cefcSMark Murray krb5_error_code 400b528cefcSMark Murray krb5_auth_getauthenticator(krb5_context context, 401b528cefcSMark Murray krb5_auth_context auth_context, 402b528cefcSMark Murray krb5_authenticator *authenticator) 403b528cefcSMark Murray { 404b528cefcSMark Murray *authenticator = malloc(sizeof(**authenticator)); 405adb0ddaeSAssar Westerlund if (*authenticator == NULL) { 406adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 407b528cefcSMark Murray return ENOMEM; 408adb0ddaeSAssar Westerlund } 409b528cefcSMark Murray 410b528cefcSMark Murray copy_Authenticator(auth_context->authenticator, 411b528cefcSMark Murray *authenticator); 412b528cefcSMark Murray return 0; 413b528cefcSMark Murray } 414b528cefcSMark Murray 415b528cefcSMark Murray 416b528cefcSMark Murray void 417b528cefcSMark Murray krb5_free_authenticator(krb5_context context, 418b528cefcSMark Murray krb5_authenticator *authenticator) 419b528cefcSMark Murray { 420b528cefcSMark Murray free_Authenticator (*authenticator); 421b528cefcSMark Murray free (*authenticator); 422b528cefcSMark Murray *authenticator = NULL; 423b528cefcSMark Murray } 424b528cefcSMark Murray 425b528cefcSMark Murray 426b528cefcSMark Murray krb5_error_code 427b528cefcSMark Murray krb5_auth_con_setuserkey(krb5_context context, 428b528cefcSMark Murray krb5_auth_context auth_context, 429b528cefcSMark Murray krb5_keyblock *keyblock) 430b528cefcSMark Murray { 431b528cefcSMark Murray if(auth_context->keyblock) 432b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 433b528cefcSMark Murray return krb5_copy_keyblock(context, keyblock, &auth_context->keyblock); 434b528cefcSMark Murray } 435b528cefcSMark Murray 4365e9cd1aeSAssar Westerlund krb5_error_code 4375e9cd1aeSAssar Westerlund krb5_auth_con_getrcache(krb5_context context, 4385e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 4395e9cd1aeSAssar Westerlund krb5_rcache *rcache) 4405e9cd1aeSAssar Westerlund { 4415e9cd1aeSAssar Westerlund *rcache = auth_context->rcache; 4425e9cd1aeSAssar Westerlund return 0; 4435e9cd1aeSAssar Westerlund } 4445e9cd1aeSAssar Westerlund 4455e9cd1aeSAssar Westerlund krb5_error_code 4465e9cd1aeSAssar Westerlund krb5_auth_con_setrcache(krb5_context context, 4475e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 4485e9cd1aeSAssar Westerlund krb5_rcache rcache) 4495e9cd1aeSAssar Westerlund { 4505e9cd1aeSAssar Westerlund auth_context->rcache = rcache; 4515e9cd1aeSAssar Westerlund return 0; 4525e9cd1aeSAssar Westerlund } 4535e9cd1aeSAssar Westerlund 454b528cefcSMark Murray #if 0 /* not implemented */ 455b528cefcSMark Murray 456b528cefcSMark Murray krb5_error_code 457b528cefcSMark Murray krb5_auth_con_initivector(krb5_context context, 458b528cefcSMark Murray krb5_auth_context auth_context) 459b528cefcSMark Murray { 460b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_con_initivector called"); 461b528cefcSMark Murray } 462b528cefcSMark Murray 463b528cefcSMark Murray 464b528cefcSMark Murray krb5_error_code 465b528cefcSMark Murray krb5_auth_con_setivector(krb5_context context, 466b528cefcSMark Murray krb5_auth_context auth_context, 467b528cefcSMark Murray krb5_pointer ivector) 468b528cefcSMark Murray { 469b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_con_setivector called"); 470b528cefcSMark Murray } 471b528cefcSMark Murray 472b528cefcSMark Murray #endif /* not implemented */ 473