1b528cefcSMark Murray /* 2*ae771770SStanislav Sedov * Copyright (c) 1997 - 2002 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 36*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 37b528cefcSMark Murray krb5_auth_con_init(krb5_context context, 38b528cefcSMark Murray krb5_auth_context *auth_context) 39b528cefcSMark Murray { 40b528cefcSMark Murray krb5_auth_context p; 41b528cefcSMark Murray 42b528cefcSMark Murray ALLOC(p, 1); 43adb0ddaeSAssar Westerlund if(!p) { 44*ae771770SStanislav Sedov krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", "")); 45b528cefcSMark Murray return ENOMEM; 46adb0ddaeSAssar Westerlund } 47b528cefcSMark Murray memset(p, 0, sizeof(*p)); 48b528cefcSMark Murray ALLOC(p->authenticator, 1); 49b528cefcSMark Murray if (!p->authenticator) { 50*ae771770SStanislav Sedov krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", "")); 51b528cefcSMark Murray free(p); 52b528cefcSMark Murray return ENOMEM; 53b528cefcSMark Murray } 54b528cefcSMark Murray memset (p->authenticator, 0, sizeof(*p->authenticator)); 55b528cefcSMark Murray p->flags = KRB5_AUTH_CONTEXT_DO_TIME; 56b528cefcSMark Murray 57b528cefcSMark Murray p->local_address = NULL; 58b528cefcSMark Murray p->remote_address = NULL; 59b528cefcSMark Murray p->local_port = 0; 60b528cefcSMark Murray p->remote_port = 0; 61*ae771770SStanislav Sedov p->keytype = ENCTYPE_NULL; 62b528cefcSMark Murray p->cksumtype = CKSUMTYPE_NONE; 63b528cefcSMark Murray *auth_context = p; 64b528cefcSMark Murray return 0; 65b528cefcSMark Murray } 66b528cefcSMark Murray 67*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 68b528cefcSMark Murray krb5_auth_con_free(krb5_context context, 69b528cefcSMark Murray krb5_auth_context auth_context) 70b528cefcSMark Murray { 715e9cd1aeSAssar Westerlund if (auth_context != NULL) { 72b528cefcSMark Murray krb5_free_authenticator(context, &auth_context->authenticator); 73b528cefcSMark Murray if(auth_context->local_address){ 74b528cefcSMark Murray free_HostAddress(auth_context->local_address); 75b528cefcSMark Murray free(auth_context->local_address); 76b528cefcSMark Murray } 77b528cefcSMark Murray if(auth_context->remote_address){ 78b528cefcSMark Murray free_HostAddress(auth_context->remote_address); 79b528cefcSMark Murray free(auth_context->remote_address); 80b528cefcSMark Murray } 81b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 82b528cefcSMark Murray krb5_free_keyblock(context, auth_context->remote_subkey); 83b528cefcSMark Murray krb5_free_keyblock(context, auth_context->local_subkey); 84b528cefcSMark Murray free (auth_context); 855e9cd1aeSAssar Westerlund } 86b528cefcSMark Murray return 0; 87b528cefcSMark Murray } 88b528cefcSMark Murray 89*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 90b528cefcSMark Murray krb5_auth_con_setflags(krb5_context context, 91b528cefcSMark Murray krb5_auth_context auth_context, 92b528cefcSMark Murray int32_t flags) 93b528cefcSMark Murray { 94b528cefcSMark Murray auth_context->flags = flags; 95b528cefcSMark Murray return 0; 96b528cefcSMark Murray } 97b528cefcSMark Murray 98b528cefcSMark Murray 99*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 100b528cefcSMark Murray krb5_auth_con_getflags(krb5_context context, 101b528cefcSMark Murray krb5_auth_context auth_context, 102b528cefcSMark Murray int32_t *flags) 103b528cefcSMark Murray { 104b528cefcSMark Murray *flags = auth_context->flags; 105b528cefcSMark Murray return 0; 106b528cefcSMark Murray } 107b528cefcSMark Murray 108*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 109c19800e8SDoug Rabson krb5_auth_con_addflags(krb5_context context, 110c19800e8SDoug Rabson krb5_auth_context auth_context, 111c19800e8SDoug Rabson int32_t addflags, 112c19800e8SDoug Rabson int32_t *flags) 113c19800e8SDoug Rabson { 114c19800e8SDoug Rabson if (flags) 115c19800e8SDoug Rabson *flags = auth_context->flags; 116c19800e8SDoug Rabson auth_context->flags |= addflags; 117c19800e8SDoug Rabson return 0; 118c19800e8SDoug Rabson } 119b528cefcSMark Murray 120*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 121c19800e8SDoug Rabson krb5_auth_con_removeflags(krb5_context context, 122c19800e8SDoug Rabson krb5_auth_context auth_context, 123c19800e8SDoug Rabson int32_t removeflags, 124c19800e8SDoug Rabson int32_t *flags) 125c19800e8SDoug Rabson { 126c19800e8SDoug Rabson if (flags) 127c19800e8SDoug Rabson *flags = auth_context->flags; 128c19800e8SDoug Rabson auth_context->flags &= ~removeflags; 129c19800e8SDoug Rabson return 0; 130c19800e8SDoug Rabson } 131c19800e8SDoug Rabson 132*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 133b528cefcSMark Murray krb5_auth_con_setaddrs(krb5_context context, 134b528cefcSMark Murray krb5_auth_context auth_context, 135b528cefcSMark Murray krb5_address *local_addr, 136b528cefcSMark Murray krb5_address *remote_addr) 137b528cefcSMark Murray { 138b528cefcSMark Murray if (local_addr) { 139b528cefcSMark Murray if (auth_context->local_address) 140b528cefcSMark Murray krb5_free_address (context, auth_context->local_address); 141b528cefcSMark Murray else 142c19800e8SDoug Rabson if ((auth_context->local_address = malloc(sizeof(krb5_address))) == NULL) 143c19800e8SDoug Rabson return ENOMEM; 144b528cefcSMark Murray krb5_copy_address(context, local_addr, auth_context->local_address); 145b528cefcSMark Murray } 146b528cefcSMark Murray if (remote_addr) { 147b528cefcSMark Murray if (auth_context->remote_address) 148b528cefcSMark Murray krb5_free_address (context, auth_context->remote_address); 149b528cefcSMark Murray else 150c19800e8SDoug Rabson if ((auth_context->remote_address = malloc(sizeof(krb5_address))) == NULL) 151c19800e8SDoug Rabson return ENOMEM; 152b528cefcSMark Murray krb5_copy_address(context, remote_addr, auth_context->remote_address); 153b528cefcSMark Murray } 154b528cefcSMark Murray return 0; 155b528cefcSMark Murray } 156b528cefcSMark Murray 157*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 1585e9cd1aeSAssar Westerlund krb5_auth_con_genaddrs(krb5_context context, 159b528cefcSMark Murray krb5_auth_context auth_context, 160*ae771770SStanislav Sedov krb5_socket_t fd, int flags) 161b528cefcSMark Murray { 162b528cefcSMark Murray krb5_error_code ret; 163b528cefcSMark Murray krb5_address local_k_address, remote_k_address; 164b528cefcSMark Murray krb5_address *lptr = NULL, *rptr = NULL; 165b528cefcSMark Murray struct sockaddr_storage ss_local, ss_remote; 166b528cefcSMark Murray struct sockaddr *local = (struct sockaddr *)&ss_local; 167b528cefcSMark Murray struct sockaddr *remote = (struct sockaddr *)&ss_remote; 1685e9cd1aeSAssar Westerlund socklen_t len; 169b528cefcSMark Murray 1705e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) { 171b528cefcSMark Murray if (auth_context->local_address == NULL) { 172b528cefcSMark Murray len = sizeof(ss_local); 173*ae771770SStanislav Sedov if(rk_IS_SOCKET_ERROR(getsockname(fd, local, &len))) { 174*ae771770SStanislav Sedov char buf[128]; 175*ae771770SStanislav Sedov ret = rk_SOCK_ERRNO; 176*ae771770SStanislav Sedov rk_strerror_r(ret, buf, sizeof(buf)); 177*ae771770SStanislav Sedov krb5_set_error_message(context, ret, "getsockname: %s", buf); 178b528cefcSMark Murray goto out; 179b528cefcSMark Murray } 1808373020dSJacques Vidrine ret = krb5_sockaddr2address (context, local, &local_k_address); 1818373020dSJacques Vidrine if(ret) goto out; 1825e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) { 183adb0ddaeSAssar Westerlund krb5_sockaddr2port (context, local, &auth_context->local_port); 1845e9cd1aeSAssar Westerlund } else 1855e9cd1aeSAssar Westerlund auth_context->local_port = 0; 186b528cefcSMark Murray lptr = &local_k_address; 187b528cefcSMark Murray } 1885e9cd1aeSAssar Westerlund } 1895e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) { 190b528cefcSMark Murray len = sizeof(ss_remote); 191*ae771770SStanislav Sedov if(rk_IS_SOCKET_ERROR(getpeername(fd, remote, &len))) { 192*ae771770SStanislav Sedov char buf[128]; 193*ae771770SStanislav Sedov ret = rk_SOCK_ERRNO; 194*ae771770SStanislav Sedov rk_strerror_r(ret, buf, sizeof(buf)); 195*ae771770SStanislav Sedov krb5_set_error_message(context, ret, "getpeername: %s", buf); 196b528cefcSMark Murray goto out; 197b528cefcSMark Murray } 1988373020dSJacques Vidrine ret = krb5_sockaddr2address (context, remote, &remote_k_address); 1998373020dSJacques Vidrine if(ret) goto out; 2005e9cd1aeSAssar Westerlund if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) { 201adb0ddaeSAssar Westerlund krb5_sockaddr2port (context, remote, &auth_context->remote_port); 2025e9cd1aeSAssar Westerlund } else 2035e9cd1aeSAssar Westerlund auth_context->remote_port = 0; 204b528cefcSMark Murray rptr = &remote_k_address; 205b528cefcSMark Murray } 206b528cefcSMark Murray ret = krb5_auth_con_setaddrs (context, 207b528cefcSMark Murray auth_context, 208b528cefcSMark Murray lptr, 209b528cefcSMark Murray rptr); 210b528cefcSMark Murray out: 211b528cefcSMark Murray if (lptr) 212b528cefcSMark Murray krb5_free_address (context, lptr); 213b528cefcSMark Murray if (rptr) 214b528cefcSMark Murray krb5_free_address (context, rptr); 215b528cefcSMark Murray return ret; 2165e9cd1aeSAssar Westerlund 2175e9cd1aeSAssar Westerlund } 2185e9cd1aeSAssar Westerlund 219*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 2205e9cd1aeSAssar Westerlund krb5_auth_con_setaddrs_from_fd (krb5_context context, 2215e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 2225e9cd1aeSAssar Westerlund void *p_fd) 2235e9cd1aeSAssar Westerlund { 224*ae771770SStanislav Sedov krb5_socket_t fd = *(krb5_socket_t *)p_fd; 2255e9cd1aeSAssar Westerlund int flags = 0; 2265e9cd1aeSAssar Westerlund if(auth_context->local_address == NULL) 2275e9cd1aeSAssar Westerlund flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR; 2285e9cd1aeSAssar Westerlund if(auth_context->remote_address == NULL) 2295e9cd1aeSAssar Westerlund flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR; 2305e9cd1aeSAssar Westerlund return krb5_auth_con_genaddrs(context, auth_context, fd, flags); 231b528cefcSMark Murray } 232b528cefcSMark Murray 233*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 234b528cefcSMark Murray krb5_auth_con_getaddrs(krb5_context context, 235b528cefcSMark Murray krb5_auth_context auth_context, 236b528cefcSMark Murray krb5_address **local_addr, 237b528cefcSMark Murray krb5_address **remote_addr) 238b528cefcSMark Murray { 239b528cefcSMark Murray if(*local_addr) 240b528cefcSMark Murray krb5_free_address (context, *local_addr); 241b528cefcSMark Murray *local_addr = malloc (sizeof(**local_addr)); 242adb0ddaeSAssar Westerlund if (*local_addr == NULL) { 243*ae771770SStanislav Sedov krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", "")); 244b528cefcSMark Murray return ENOMEM; 245adb0ddaeSAssar Westerlund } 246b528cefcSMark Murray krb5_copy_address(context, 247b528cefcSMark Murray auth_context->local_address, 248b528cefcSMark Murray *local_addr); 249b528cefcSMark Murray 250b528cefcSMark Murray if(*remote_addr) 251b528cefcSMark Murray krb5_free_address (context, *remote_addr); 252b528cefcSMark Murray *remote_addr = malloc (sizeof(**remote_addr)); 253adb0ddaeSAssar Westerlund if (*remote_addr == NULL) { 254*ae771770SStanislav Sedov krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", "")); 255adb0ddaeSAssar Westerlund krb5_free_address (context, *local_addr); 256adb0ddaeSAssar Westerlund *local_addr = NULL; 257b528cefcSMark Murray return ENOMEM; 258adb0ddaeSAssar Westerlund } 259b528cefcSMark Murray krb5_copy_address(context, 260b528cefcSMark Murray auth_context->remote_address, 261b528cefcSMark Murray *remote_addr); 262b528cefcSMark Murray return 0; 263b528cefcSMark Murray } 264b528cefcSMark Murray 265*ae771770SStanislav Sedov /* coverity[+alloc : arg-*2] */ 266b528cefcSMark Murray static krb5_error_code 267b528cefcSMark Murray copy_key(krb5_context context, 268b528cefcSMark Murray krb5_keyblock *in, 269b528cefcSMark Murray krb5_keyblock **out) 270b528cefcSMark Murray { 271b528cefcSMark Murray if(in) 272b528cefcSMark Murray return krb5_copy_keyblock(context, in, out); 273b528cefcSMark Murray *out = NULL; /* is this right? */ 274b528cefcSMark Murray return 0; 275b528cefcSMark Murray } 276b528cefcSMark Murray 277*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 278b528cefcSMark Murray krb5_auth_con_getkey(krb5_context context, 279b528cefcSMark Murray krb5_auth_context auth_context, 280b528cefcSMark Murray krb5_keyblock **keyblock) 281b528cefcSMark Murray { 282b528cefcSMark Murray return copy_key(context, auth_context->keyblock, keyblock); 283b528cefcSMark Murray } 284b528cefcSMark Murray 285*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 286b528cefcSMark Murray krb5_auth_con_getlocalsubkey(krb5_context context, 287b528cefcSMark Murray krb5_auth_context auth_context, 288b528cefcSMark Murray krb5_keyblock **keyblock) 289b528cefcSMark Murray { 290b528cefcSMark Murray return copy_key(context, auth_context->local_subkey, keyblock); 291b528cefcSMark Murray } 292b528cefcSMark Murray 293*ae771770SStanislav Sedov /* coverity[+alloc : arg-*2] */ 294*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 295b528cefcSMark Murray krb5_auth_con_getremotesubkey(krb5_context context, 296b528cefcSMark Murray krb5_auth_context auth_context, 297b528cefcSMark Murray krb5_keyblock **keyblock) 298b528cefcSMark Murray { 299b528cefcSMark Murray return copy_key(context, auth_context->remote_subkey, keyblock); 300b528cefcSMark Murray } 301b528cefcSMark Murray 302*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 303b528cefcSMark Murray krb5_auth_con_setkey(krb5_context context, 304b528cefcSMark Murray krb5_auth_context auth_context, 305b528cefcSMark Murray krb5_keyblock *keyblock) 306b528cefcSMark Murray { 307b528cefcSMark Murray if(auth_context->keyblock) 308b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 309b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->keyblock); 310b528cefcSMark Murray } 311b528cefcSMark Murray 312*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 313b528cefcSMark Murray krb5_auth_con_setlocalsubkey(krb5_context context, 314b528cefcSMark Murray krb5_auth_context auth_context, 315b528cefcSMark Murray krb5_keyblock *keyblock) 316b528cefcSMark Murray { 317b528cefcSMark Murray if(auth_context->local_subkey) 318b528cefcSMark Murray krb5_free_keyblock(context, auth_context->local_subkey); 319b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->local_subkey); 320b528cefcSMark Murray } 321b528cefcSMark Murray 322*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 3230cadf2f4SJacques Vidrine krb5_auth_con_generatelocalsubkey(krb5_context context, 3240cadf2f4SJacques Vidrine krb5_auth_context auth_context, 3250cadf2f4SJacques Vidrine krb5_keyblock *key) 3260cadf2f4SJacques Vidrine { 3270cadf2f4SJacques Vidrine krb5_error_code ret; 3280cadf2f4SJacques Vidrine krb5_keyblock *subkey; 3290cadf2f4SJacques Vidrine 330c19800e8SDoug Rabson ret = krb5_generate_subkey_extended (context, key, 331c19800e8SDoug Rabson auth_context->keytype, 332c19800e8SDoug Rabson &subkey); 3330cadf2f4SJacques Vidrine if(ret) 3340cadf2f4SJacques Vidrine return ret; 3350cadf2f4SJacques Vidrine if(auth_context->local_subkey) 3360cadf2f4SJacques Vidrine krb5_free_keyblock(context, auth_context->local_subkey); 3370cadf2f4SJacques Vidrine auth_context->local_subkey = subkey; 3380cadf2f4SJacques Vidrine return 0; 3390cadf2f4SJacques Vidrine } 3400cadf2f4SJacques Vidrine 3410cadf2f4SJacques Vidrine 342*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 343b528cefcSMark Murray krb5_auth_con_setremotesubkey(krb5_context context, 344b528cefcSMark Murray krb5_auth_context auth_context, 345b528cefcSMark Murray krb5_keyblock *keyblock) 346b528cefcSMark Murray { 347b528cefcSMark Murray if(auth_context->remote_subkey) 348b528cefcSMark Murray krb5_free_keyblock(context, auth_context->remote_subkey); 349b528cefcSMark Murray return copy_key(context, keyblock, &auth_context->remote_subkey); 350b528cefcSMark Murray } 351b528cefcSMark Murray 352*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 3534137ff4cSJacques Vidrine krb5_auth_con_setcksumtype(krb5_context context, 354b528cefcSMark Murray krb5_auth_context auth_context, 355b528cefcSMark Murray krb5_cksumtype cksumtype) 356b528cefcSMark Murray { 357b528cefcSMark Murray auth_context->cksumtype = cksumtype; 358b528cefcSMark Murray return 0; 359b528cefcSMark Murray } 360b528cefcSMark Murray 361*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 3624137ff4cSJacques Vidrine krb5_auth_con_getcksumtype(krb5_context context, 363b528cefcSMark Murray krb5_auth_context auth_context, 364b528cefcSMark Murray krb5_cksumtype *cksumtype) 365b528cefcSMark Murray { 366b528cefcSMark Murray *cksumtype = auth_context->cksumtype; 367b528cefcSMark Murray return 0; 368b528cefcSMark Murray } 369b528cefcSMark Murray 370*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 3714137ff4cSJacques Vidrine krb5_auth_con_setkeytype (krb5_context context, 372b528cefcSMark Murray krb5_auth_context auth_context, 373b528cefcSMark Murray krb5_keytype keytype) 374b528cefcSMark Murray { 375b528cefcSMark Murray auth_context->keytype = keytype; 376b528cefcSMark Murray return 0; 377b528cefcSMark Murray } 378b528cefcSMark Murray 379*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 3804137ff4cSJacques Vidrine krb5_auth_con_getkeytype (krb5_context context, 381b528cefcSMark Murray krb5_auth_context auth_context, 382b528cefcSMark Murray krb5_keytype *keytype) 383b528cefcSMark Murray { 384b528cefcSMark Murray *keytype = auth_context->keytype; 385b528cefcSMark Murray return 0; 386b528cefcSMark Murray } 387b528cefcSMark Murray 388b528cefcSMark Murray #if 0 389*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 3904137ff4cSJacques Vidrine krb5_auth_con_setenctype(krb5_context context, 391b528cefcSMark Murray krb5_auth_context auth_context, 392b528cefcSMark Murray krb5_enctype etype) 393b528cefcSMark Murray { 394b528cefcSMark Murray if(auth_context->keyblock) 395b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 396b528cefcSMark Murray ALLOC(auth_context->keyblock, 1); 397b528cefcSMark Murray if(auth_context->keyblock == NULL) 398b528cefcSMark Murray return ENOMEM; 399b528cefcSMark Murray auth_context->keyblock->keytype = etype; 400b528cefcSMark Murray return 0; 401b528cefcSMark Murray } 402b528cefcSMark Murray 403*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4044137ff4cSJacques Vidrine krb5_auth_con_getenctype(krb5_context context, 405b528cefcSMark Murray krb5_auth_context auth_context, 406b528cefcSMark Murray krb5_enctype *etype) 407b528cefcSMark Murray { 408b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_getenctype called"); 409b528cefcSMark Murray } 410b528cefcSMark Murray #endif 411b528cefcSMark Murray 412*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4134137ff4cSJacques Vidrine krb5_auth_con_getlocalseqnumber(krb5_context context, 414b528cefcSMark Murray krb5_auth_context auth_context, 415b528cefcSMark Murray int32_t *seqnumber) 416b528cefcSMark Murray { 417b528cefcSMark Murray *seqnumber = auth_context->local_seqnumber; 418b528cefcSMark Murray return 0; 419b528cefcSMark Murray } 420b528cefcSMark Murray 421*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4224137ff4cSJacques Vidrine krb5_auth_con_setlocalseqnumber (krb5_context context, 423b528cefcSMark Murray krb5_auth_context auth_context, 424b528cefcSMark Murray int32_t seqnumber) 425b528cefcSMark Murray { 426b528cefcSMark Murray auth_context->local_seqnumber = seqnumber; 427b528cefcSMark Murray return 0; 428b528cefcSMark Murray } 429b528cefcSMark Murray 430*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 431*ae771770SStanislav Sedov krb5_auth_con_getremoteseqnumber(krb5_context context, 432b528cefcSMark Murray krb5_auth_context auth_context, 433b528cefcSMark Murray int32_t *seqnumber) 434b528cefcSMark Murray { 435b528cefcSMark Murray *seqnumber = auth_context->remote_seqnumber; 436b528cefcSMark Murray return 0; 437b528cefcSMark Murray } 438b528cefcSMark Murray 439*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4404137ff4cSJacques Vidrine krb5_auth_con_setremoteseqnumber (krb5_context context, 441b528cefcSMark Murray krb5_auth_context auth_context, 442b528cefcSMark Murray int32_t seqnumber) 443b528cefcSMark Murray { 444b528cefcSMark Murray auth_context->remote_seqnumber = seqnumber; 445b528cefcSMark Murray return 0; 446b528cefcSMark Murray } 447b528cefcSMark Murray 448b528cefcSMark Murray 449*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4504137ff4cSJacques Vidrine krb5_auth_con_getauthenticator(krb5_context context, 451b528cefcSMark Murray krb5_auth_context auth_context, 452b528cefcSMark Murray krb5_authenticator *authenticator) 453b528cefcSMark Murray { 454b528cefcSMark Murray *authenticator = malloc(sizeof(**authenticator)); 455adb0ddaeSAssar Westerlund if (*authenticator == NULL) { 456*ae771770SStanislav Sedov krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", "")); 457b528cefcSMark Murray return ENOMEM; 458adb0ddaeSAssar Westerlund } 459b528cefcSMark Murray 460b528cefcSMark Murray copy_Authenticator(auth_context->authenticator, 461b528cefcSMark Murray *authenticator); 462b528cefcSMark Murray return 0; 463b528cefcSMark Murray } 464b528cefcSMark Murray 465b528cefcSMark Murray 466*ae771770SStanislav Sedov KRB5_LIB_FUNCTION void KRB5_LIB_CALL 467b528cefcSMark Murray krb5_free_authenticator(krb5_context context, 468b528cefcSMark Murray krb5_authenticator *authenticator) 469b528cefcSMark Murray { 470b528cefcSMark Murray free_Authenticator (*authenticator); 471b528cefcSMark Murray free (*authenticator); 472b528cefcSMark Murray *authenticator = NULL; 473b528cefcSMark Murray } 474b528cefcSMark Murray 475b528cefcSMark Murray 476*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 477b528cefcSMark Murray krb5_auth_con_setuserkey(krb5_context context, 478b528cefcSMark Murray krb5_auth_context auth_context, 479b528cefcSMark Murray krb5_keyblock *keyblock) 480b528cefcSMark Murray { 481b528cefcSMark Murray if(auth_context->keyblock) 482b528cefcSMark Murray krb5_free_keyblock(context, auth_context->keyblock); 483b528cefcSMark Murray return krb5_copy_keyblock(context, keyblock, &auth_context->keyblock); 484b528cefcSMark Murray } 485b528cefcSMark Murray 486*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4875e9cd1aeSAssar Westerlund krb5_auth_con_getrcache(krb5_context context, 4885e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 4895e9cd1aeSAssar Westerlund krb5_rcache *rcache) 4905e9cd1aeSAssar Westerlund { 4915e9cd1aeSAssar Westerlund *rcache = auth_context->rcache; 4925e9cd1aeSAssar Westerlund return 0; 4935e9cd1aeSAssar Westerlund } 4945e9cd1aeSAssar Westerlund 495*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 4965e9cd1aeSAssar Westerlund krb5_auth_con_setrcache(krb5_context context, 4975e9cd1aeSAssar Westerlund krb5_auth_context auth_context, 4985e9cd1aeSAssar Westerlund krb5_rcache rcache) 4995e9cd1aeSAssar Westerlund { 5005e9cd1aeSAssar Westerlund auth_context->rcache = rcache; 5015e9cd1aeSAssar Westerlund return 0; 5025e9cd1aeSAssar Westerlund } 5035e9cd1aeSAssar Westerlund 504b528cefcSMark Murray #if 0 /* not implemented */ 505b528cefcSMark Murray 506*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 507b528cefcSMark Murray krb5_auth_con_initivector(krb5_context context, 508b528cefcSMark Murray krb5_auth_context auth_context) 509b528cefcSMark Murray { 510b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_con_initivector called"); 511b528cefcSMark Murray } 512b528cefcSMark Murray 513b528cefcSMark Murray 514*ae771770SStanislav Sedov KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL 515b528cefcSMark Murray krb5_auth_con_setivector(krb5_context context, 516b528cefcSMark Murray krb5_auth_context auth_context, 517b528cefcSMark Murray krb5_pointer ivector) 518b528cefcSMark Murray { 519b528cefcSMark Murray krb5_abortx(context, "unimplemented krb5_auth_con_setivector called"); 520b528cefcSMark Murray } 521b528cefcSMark Murray 522b528cefcSMark Murray #endif /* not implemented */ 523