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 368373020dSJacques Vidrine RCSID("$Id: auth_context.c,v 1.58 2002/08/15 08:23:07 joda 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 } 1568373020dSJacques Vidrine ret = krb5_sockaddr2address (context, local, &local_k_address); 1578373020dSJacques Vidrine if(ret) goto out; 1585e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) { 159adb0ddaeSAssar Westerlund krb5_sockaddr2port (context, local, &auth_context->local_port); 1605e9cd1aeSAssar Westerlund } else 1615e9cd1aeSAssar Westerlund auth_context->local_port = 0; 162b528cefcSMark Murray lptr = &local_k_address; 163b528cefcSMark Murray } 1645e9cd1aeSAssar Westerlund } 1655e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) { 166b528cefcSMark Murray len = sizeof(ss_remote); 167b528cefcSMark Murray if(getpeername(fd, remote, &len) < 0) { 168b528cefcSMark Murray ret = errno; 169adb0ddaeSAssar Westerlund krb5_set_error_string (context, "getpeername: %s", strerror(ret)); 170b528cefcSMark Murray goto out; 171b528cefcSMark Murray } 1728373020dSJacques Vidrine ret = krb5_sockaddr2address (context, remote, &remote_k_address); 1738373020dSJacques Vidrine if(ret) goto out; 1745e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) { 175adb0ddaeSAssar Westerlund krb5_sockaddr2port (context, remote, &auth_context->remote_port); 1765e9cd1aeSAssar Westerlund } else 1775e9cd1aeSAssar Westerlund auth_context->remote_port = 0; 178b528cefcSMark Murray rptr = &remote_k_address; 179b528cefcSMark Murray } 180b528cefcSMark Murray ret = krb5_auth_con_setaddrs (context, 181b528cefcSMark Murray auth_context, 182b528cefcSMark Murray lptr, 183b528cefcSMark Murray rptr); 184b528cefcSMark Murray out: 185b528cefcSMark Murray if (lptr) 186b528cefcSMark Murray krb5_free_address (context, lptr); 187b528cefcSMark Murray if (rptr) 188b528cefcSMark Murray krb5_free_address (context, rptr); 189b528cefcSMark Murray return ret; 1905e9cd1aeSAssar Westerlund 1915e9cd1aeSAssar Westerlund } 1925e9cd1aeSAssar Westerlund 1935e9cd1aeSAssar Westerlund krb5_error_code 1945e9cd1aeSAssar Westerlund krb5_auth_con_setaddrs_from_fd (krb5_context context, 1955e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 1965e9cd1aeSAssar Westerlund void *p_fd) 1975e9cd1aeSAssar Westerlund { 1985e9cd1aeSAssar Westerlund int fd = *(int*)p_fd; 1995e9cd1aeSAssar Westerlund int flags = 0; 2005e9cd1aeSAssar Westerlund if(auth_context->local_address == NULL) 2015e9cd1aeSAssar Westerlund flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR; 2025e9cd1aeSAssar Westerlund if(auth_context->remote_address == NULL) 2035e9cd1aeSAssar Westerlund flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR; 2045e9cd1aeSAssar Westerlund return krb5_auth_con_genaddrs(context, auth_context, fd, flags); 205b528cefcSMark Murray } 206b528cefcSMark Murray 207b528cefcSMark Murray krb5_error_code 208b528cefcSMark Murray krb5_auth_con_getaddrs(krb5_context context, 209b528cefcSMark Murray krb5_auth_context auth_context, 210b528cefcSMark Murray krb5_address **local_addr, 211b528cefcSMark Murray krb5_address **remote_addr) 212b528cefcSMark Murray { 213b528cefcSMark Murray if(*local_addr) 214b528cefcSMark Murray krb5_free_address (context, *local_addr); 215b528cefcSMark Murray *local_addr = malloc (sizeof(**local_addr)); 216adb0ddaeSAssar Westerlund if (*local_addr == NULL) { 217adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 218b528cefcSMark Murray return ENOMEM; 219adb0ddaeSAssar Westerlund } 220b528cefcSMark Murray krb5_copy_address(context, 221b528cefcSMark Murray auth_context->local_address, 222b528cefcSMark Murray *local_addr); 223b528cefcSMark Murray 224b528cefcSMark Murray if(*remote_addr) 225b528cefcSMark Murray krb5_free_address (context, *remote_addr); 226b528cefcSMark Murray *remote_addr = malloc (sizeof(**remote_addr)); 227adb0ddaeSAssar Westerlund if (*remote_addr == NULL) { 228adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 229adb0ddaeSAssar Westerlund krb5_free_address (context, *local_addr); 230adb0ddaeSAssar Westerlund *local_addr = NULL; 231b528cefcSMark Murray return ENOMEM; 232adb0ddaeSAssar Westerlund } 233b528cefcSMark Murray krb5_copy_address(context, 234b528cefcSMark Murray auth_context->remote_address, 235b528cefcSMark Murray *remote_addr); 236b528cefcSMark Murray return 0; 237b528cefcSMark Murray } 238b528cefcSMark Murray 239b528cefcSMark Murray static krb5_error_code 240b528cefcSMark Murray copy_key(krb5_context context, 241b528cefcSMark Murray krb5_keyblock *in, 242b528cefcSMark Murray krb5_keyblock **out) 243b528cefcSMark Murray { 244b528cefcSMark Murray if(in) 245b528cefcSMark Murray return krb5_copy_keyblock(context, in, out); 246b528cefcSMark Murray *out = NULL; /* is this right? */ 247b528cefcSMark Murray return 0; 248b528cefcSMark Murray } 249b528cefcSMark Murray 250b528cefcSMark Murray krb5_error_code 251b528cefcSMark Murray krb5_auth_con_getkey(krb5_context context, 252b528cefcSMark Murray krb5_auth_context auth_context, 253b528cefcSMark Murray krb5_keyblock **keyblock) 254b528cefcSMark Murray { 255b528cefcSMark Murray return copy_key(context, auth_context->keyblock, keyblock); 256b528cefcSMark Murray } 257b528cefcSMark Murray 258b528cefcSMark Murray krb5_error_code 259b528cefcSMark Murray krb5_auth_con_getlocalsubkey(krb5_context context, 260b528cefcSMark Murray krb5_auth_context auth_context, 261b528cefcSMark Murray krb5_keyblock **keyblock) 262b528cefcSMark Murray { 263b528cefcSMark Murray return copy_key(context, auth_context->local_subkey, keyblock); 264b528cefcSMark Murray } 265b528cefcSMark Murray 266b528cefcSMark Murray krb5_error_code 267b528cefcSMark Murray krb5_auth_con_getremotesubkey(krb5_context context, 268b528cefcSMark Murray krb5_auth_context auth_context, 269b528cefcSMark Murray krb5_keyblock **keyblock) 270b528cefcSMark Murray { 271b528cefcSMark Murray return copy_key(context, auth_context->remote_subkey, keyblock); 272b528cefcSMark Murray } 273b528cefcSMark Murray 274b528cefcSMark Murray krb5_error_code 275b528cefcSMark Murray krb5_auth_con_setkey(krb5_context context, 276b528cefcSMark Murray krb5_auth_context auth_context, 277b528cefcSMark Murray krb5_keyblock *keyblock) 278b528cefcSMark Murray { 279b528cefcSMark Murray if(auth_context->keyblock) 280b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 281b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->keyblock); 282b528cefcSMark Murray } 283b528cefcSMark Murray 284b528cefcSMark Murray krb5_error_code 285b528cefcSMark Murray krb5_auth_con_setlocalsubkey(krb5_context context, 286b528cefcSMark Murray krb5_auth_context auth_context, 287b528cefcSMark Murray krb5_keyblock *keyblock) 288b528cefcSMark Murray { 289b528cefcSMark Murray if(auth_context->local_subkey) 290b528cefcSMark Murray krb5_free_keyblock(context, auth_context->local_subkey); 291b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->local_subkey); 292b528cefcSMark Murray } 293b528cefcSMark Murray 294b528cefcSMark Murray krb5_error_code 295b528cefcSMark Murray krb5_auth_con_setremotesubkey(krb5_context context, 296b528cefcSMark Murray krb5_auth_context auth_context, 297b528cefcSMark Murray krb5_keyblock *keyblock) 298b528cefcSMark Murray { 299b528cefcSMark Murray if(auth_context->remote_subkey) 300b528cefcSMark Murray krb5_free_keyblock(context, auth_context->remote_subkey); 301b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->remote_subkey); 302b528cefcSMark Murray } 303b528cefcSMark Murray 304b528cefcSMark Murray krb5_error_code 3054137ff4cSJacques Vidrine krb5_auth_con_setcksumtype(krb5_context context, 306b528cefcSMark Murray krb5_auth_context auth_context, 307b528cefcSMark Murray krb5_cksumtype cksumtype) 308b528cefcSMark Murray { 309b528cefcSMark Murray auth_context->cksumtype = cksumtype; 310b528cefcSMark Murray return 0; 311b528cefcSMark Murray } 312b528cefcSMark Murray 313b528cefcSMark Murray krb5_error_code 3144137ff4cSJacques Vidrine krb5_auth_con_getcksumtype(krb5_context context, 315b528cefcSMark Murray krb5_auth_context auth_context, 316b528cefcSMark Murray krb5_cksumtype *cksumtype) 317b528cefcSMark Murray { 318b528cefcSMark Murray *cksumtype = auth_context->cksumtype; 319b528cefcSMark Murray return 0; 320b528cefcSMark Murray } 321b528cefcSMark Murray 322b528cefcSMark Murray krb5_error_code 3234137ff4cSJacques Vidrine krb5_auth_con_setkeytype (krb5_context context, 324b528cefcSMark Murray krb5_auth_context auth_context, 325b528cefcSMark Murray krb5_keytype keytype) 326b528cefcSMark Murray { 327b528cefcSMark Murray auth_context->keytype = keytype; 328b528cefcSMark Murray return 0; 329b528cefcSMark Murray } 330b528cefcSMark Murray 331b528cefcSMark Murray krb5_error_code 3324137ff4cSJacques Vidrine krb5_auth_con_getkeytype (krb5_context context, 333b528cefcSMark Murray krb5_auth_context auth_context, 334b528cefcSMark Murray krb5_keytype *keytype) 335b528cefcSMark Murray { 336b528cefcSMark Murray *keytype = auth_context->keytype; 337b528cefcSMark Murray return 0; 338b528cefcSMark Murray } 339b528cefcSMark Murray 340b528cefcSMark Murray #if 0 341b528cefcSMark Murray krb5_error_code 3424137ff4cSJacques Vidrine krb5_auth_con_setenctype(krb5_context context, 343b528cefcSMark Murray krb5_auth_context auth_context, 344b528cefcSMark Murray krb5_enctype etype) 345b528cefcSMark Murray { 346b528cefcSMark Murray if(auth_context->keyblock) 347b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 348b528cefcSMark Murray ALLOC(auth_context->keyblock, 1); 349b528cefcSMark Murray if(auth_context->keyblock == NULL) 350b528cefcSMark Murray return ENOMEM; 351b528cefcSMark Murray auth_context->keyblock->keytype = etype; 352b528cefcSMark Murray return 0; 353b528cefcSMark Murray } 354b528cefcSMark Murray 355b528cefcSMark Murray krb5_error_code 3564137ff4cSJacques Vidrine krb5_auth_con_getenctype(krb5_context context, 357b528cefcSMark Murray krb5_auth_context auth_context, 358b528cefcSMark Murray krb5_enctype *etype) 359b528cefcSMark Murray { 360b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_getenctype called"); 361b528cefcSMark Murray } 362b528cefcSMark Murray #endif 363b528cefcSMark Murray 364b528cefcSMark Murray krb5_error_code 3654137ff4cSJacques Vidrine krb5_auth_con_getlocalseqnumber(krb5_context context, 366b528cefcSMark Murray krb5_auth_context auth_context, 367b528cefcSMark Murray int32_t *seqnumber) 368b528cefcSMark Murray { 369b528cefcSMark Murray *seqnumber = auth_context->local_seqnumber; 370b528cefcSMark Murray return 0; 371b528cefcSMark Murray } 372b528cefcSMark Murray 373b528cefcSMark Murray krb5_error_code 3744137ff4cSJacques Vidrine krb5_auth_con_setlocalseqnumber (krb5_context context, 375b528cefcSMark Murray krb5_auth_context auth_context, 376b528cefcSMark Murray int32_t seqnumber) 377b528cefcSMark Murray { 378b528cefcSMark Murray auth_context->local_seqnumber = seqnumber; 379b528cefcSMark Murray return 0; 380b528cefcSMark Murray } 381b528cefcSMark Murray 382b528cefcSMark Murray krb5_error_code 383b528cefcSMark Murray krb5_auth_getremoteseqnumber(krb5_context context, 384b528cefcSMark Murray krb5_auth_context auth_context, 385b528cefcSMark Murray int32_t *seqnumber) 386b528cefcSMark Murray { 387b528cefcSMark Murray *seqnumber = auth_context->remote_seqnumber; 388b528cefcSMark Murray return 0; 389b528cefcSMark Murray } 390b528cefcSMark Murray 391b528cefcSMark Murray krb5_error_code 3924137ff4cSJacques Vidrine krb5_auth_con_setremoteseqnumber (krb5_context context, 393b528cefcSMark Murray krb5_auth_context auth_context, 394b528cefcSMark Murray int32_t seqnumber) 395b528cefcSMark Murray { 396b528cefcSMark Murray auth_context->remote_seqnumber = seqnumber; 397b528cefcSMark Murray return 0; 398b528cefcSMark Murray } 399b528cefcSMark Murray 400b528cefcSMark Murray 401b528cefcSMark Murray krb5_error_code 4024137ff4cSJacques Vidrine krb5_auth_con_getauthenticator(krb5_context context, 403b528cefcSMark Murray krb5_auth_context auth_context, 404b528cefcSMark Murray krb5_authenticator *authenticator) 405b528cefcSMark Murray { 406b528cefcSMark Murray *authenticator = malloc(sizeof(**authenticator)); 407adb0ddaeSAssar Westerlund if (*authenticator == NULL) { 408adb0ddaeSAssar Westerlund krb5_set_error_string(context, "malloc: out of memory"); 409b528cefcSMark Murray return ENOMEM; 410adb0ddaeSAssar Westerlund } 411b528cefcSMark Murray 412b528cefcSMark Murray copy_Authenticator(auth_context->authenticator, 413b528cefcSMark Murray *authenticator); 414b528cefcSMark Murray return 0; 415b528cefcSMark Murray } 416b528cefcSMark Murray 417b528cefcSMark Murray 418b528cefcSMark Murray void 419b528cefcSMark Murray krb5_free_authenticator(krb5_context context, 420b528cefcSMark Murray krb5_authenticator *authenticator) 421b528cefcSMark Murray { 422b528cefcSMark Murray free_Authenticator (*authenticator); 423b528cefcSMark Murray free (*authenticator); 424b528cefcSMark Murray *authenticator = NULL; 425b528cefcSMark Murray } 426b528cefcSMark Murray 427b528cefcSMark Murray 428b528cefcSMark Murray krb5_error_code 429b528cefcSMark Murray krb5_auth_con_setuserkey(krb5_context context, 430b528cefcSMark Murray krb5_auth_context auth_context, 431b528cefcSMark Murray krb5_keyblock *keyblock) 432b528cefcSMark Murray { 433b528cefcSMark Murray if(auth_context->keyblock) 434b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 435b528cefcSMark Murray return krb5_copy_keyblock(context, keyblock, &auth_context->keyblock); 436b528cefcSMark Murray } 437b528cefcSMark Murray 4385e9cd1aeSAssar Westerlund krb5_error_code 4395e9cd1aeSAssar Westerlund krb5_auth_con_getrcache(krb5_context context, 4405e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 4415e9cd1aeSAssar Westerlund krb5_rcache *rcache) 4425e9cd1aeSAssar Westerlund { 4435e9cd1aeSAssar Westerlund *rcache = auth_context->rcache; 4445e9cd1aeSAssar Westerlund return 0; 4455e9cd1aeSAssar Westerlund } 4465e9cd1aeSAssar Westerlund 4475e9cd1aeSAssar Westerlund krb5_error_code 4485e9cd1aeSAssar Westerlund krb5_auth_con_setrcache(krb5_context context, 4495e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 4505e9cd1aeSAssar Westerlund krb5_rcache rcache) 4515e9cd1aeSAssar Westerlund { 4525e9cd1aeSAssar Westerlund auth_context->rcache = rcache; 4535e9cd1aeSAssar Westerlund return 0; 4545e9cd1aeSAssar Westerlund } 4555e9cd1aeSAssar Westerlund 456b528cefcSMark Murray #if 0 /* not implemented */ 457b528cefcSMark Murray 458b528cefcSMark Murray krb5_error_code 459b528cefcSMark Murray krb5_auth_con_initivector(krb5_context context, 460b528cefcSMark Murray krb5_auth_context auth_context) 461b528cefcSMark Murray { 462b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_con_initivector called"); 463b528cefcSMark Murray } 464b528cefcSMark Murray 465b528cefcSMark Murray 466b528cefcSMark Murray krb5_error_code 467b528cefcSMark Murray krb5_auth_con_setivector(krb5_context context, 468b528cefcSMark Murray krb5_auth_context auth_context, 469b528cefcSMark Murray krb5_pointer ivector) 470b528cefcSMark Murray { 471b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_con_setivector called"); 472b528cefcSMark Murray } 473b528cefcSMark Murray 474b528cefcSMark Murray #endif /* not implemented */ 475