xref: /freebsd/crypto/heimdal/lib/krb5/auth_context.c (revision c19800e8)
1b528cefcSMark Murray /*
20cadf2f4SJacques Vidrine  * 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 
36c19800e8SDoug Rabson KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_init(krb5_context context,krb5_auth_context * auth_context)37b528cefcSMark Murray krb5_auth_con_init(krb5_context context,
38c19800e8SDoug Rabson 		   krb5_auth_context *auth_context)
39b528cefcSMark Murray {
40b528cefcSMark Murray     krb5_auth_context p;
41b528cefcSMark Murray 
42b528cefcSMark Murray     ALLOC(p, 1);
43b528cefcSMark Murray     if(!p) {
44b528cefcSMark Murray 	krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
45adb0ddaeSAssar Westerlund 	return ENOMEM;
46adb0ddaeSAssar Westerlund     }
47b528cefcSMark Murray     memset(p, 0, sizeof(*p));
48adb0ddaeSAssar Westerlund     ALLOC(p->authenticator, 1);
49b528cefcSMark Murray     if (!p->authenticator) {
50b528cefcSMark Murray 	krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
51b528cefcSMark Murray 	free(p);
52adb0ddaeSAssar Westerlund 	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;
61b528cefcSMark Murray     p->keytype        = ENCTYPE_NULL;
62b528cefcSMark Murray     p->cksumtype      = CKSUMTYPE_NONE;
63b528cefcSMark Murray     *auth_context     = p;
64b528cefcSMark Murray     return 0;
65b528cefcSMark Murray }
66b528cefcSMark Murray 
67b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_free(krb5_context context,krb5_auth_context auth_context)68b528cefcSMark Murray krb5_auth_con_free(krb5_context context,
69c19800e8SDoug Rabson 		   krb5_auth_context auth_context)
70b528cefcSMark Murray {
71b528cefcSMark Murray     if (auth_context != NULL) {
72b528cefcSMark Murray 	krb5_free_authenticator(context, &auth_context->authenticator);
735e9cd1aeSAssar Westerlund 	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);
85b528cefcSMark Murray     }
86b528cefcSMark Murray     return 0;
875e9cd1aeSAssar Westerlund }
88b528cefcSMark Murray 
89b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setflags(krb5_context context,krb5_auth_context auth_context,int32_t flags)90b528cefcSMark Murray krb5_auth_con_setflags(krb5_context context,
91c19800e8SDoug Rabson 		       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 
99b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getflags(krb5_context context,krb5_auth_context auth_context,int32_t * flags)100b528cefcSMark Murray krb5_auth_con_getflags(krb5_context context,
101c19800e8SDoug Rabson 		       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 
108b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_addflags(krb5_context context,krb5_auth_context auth_context,int32_t addflags,int32_t * flags)109b528cefcSMark Murray 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 }
119c19800e8SDoug Rabson 
120c19800e8SDoug Rabson KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_removeflags(krb5_context context,krb5_auth_context auth_context,int32_t removeflags,int32_t * flags)121b528cefcSMark Murray 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 
132c19800e8SDoug Rabson KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setaddrs(krb5_context context,krb5_auth_context auth_context,krb5_address * local_addr,krb5_address * remote_addr)133c19800e8SDoug Rabson krb5_auth_con_setaddrs(krb5_context context,
134c19800e8SDoug Rabson 		       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
142b528cefcSMark Murray 	    if ((auth_context->local_address = malloc(sizeof(krb5_address))) == NULL)
143b528cefcSMark Murray 		return ENOMEM;
144c19800e8SDoug Rabson 	krb5_copy_address(context, local_addr, auth_context->local_address);
145c19800e8SDoug Rabson     }
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
150b528cefcSMark Murray 	    if ((auth_context->remote_address = malloc(sizeof(krb5_address))) == NULL)
151b528cefcSMark Murray 		return ENOMEM;
152c19800e8SDoug Rabson 	krb5_copy_address(context, remote_addr, auth_context->remote_address);
153c19800e8SDoug Rabson     }
154b528cefcSMark Murray     return 0;
155b528cefcSMark Murray }
156b528cefcSMark Murray 
157b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_genaddrs(krb5_context context,krb5_auth_context auth_context,krb5_socket_t fd,int flags)158b528cefcSMark Murray krb5_auth_con_genaddrs(krb5_context context,
159c19800e8SDoug Rabson 		       krb5_auth_context auth_context,
1605e9cd1aeSAssar Westerlund 		       krb5_socket_t fd, int flags)
161b528cefcSMark Murray {
1625e9cd1aeSAssar Westerlund     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;
168b528cefcSMark Murray     socklen_t len;
169b528cefcSMark Murray 
1705e9cd1aeSAssar Westerlund     if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) {
171b528cefcSMark Murray 	if (auth_context->local_address == NULL) {
1725e9cd1aeSAssar Westerlund 	    len = sizeof(ss_local);
173b528cefcSMark Murray 	    if(rk_IS_SOCKET_ERROR(getsockname(fd, local, &len))) {
174b528cefcSMark Murray 		char buf[128];
175b528cefcSMark Murray 		ret = rk_SOCK_ERRNO;
176b528cefcSMark Murray 		rk_strerror_r(ret, buf, sizeof(buf));
177adb0ddaeSAssar Westerlund 		krb5_set_error_message(context, ret, "getsockname: %s", buf);
178adb0ddaeSAssar Westerlund 		goto out;
179b528cefcSMark Murray 	    }
180b528cefcSMark Murray 	    ret = krb5_sockaddr2address (context, local, &local_k_address);
1818373020dSJacques Vidrine 	    if(ret) goto out;
1828373020dSJacques Vidrine 	    if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) {
1835e9cd1aeSAssar Westerlund 		krb5_sockaddr2port (context, local, &auth_context->local_port);
184adb0ddaeSAssar Westerlund 	    } else
1855e9cd1aeSAssar Westerlund 		auth_context->local_port = 0;
1865e9cd1aeSAssar Westerlund 	    lptr = &local_k_address;
187b528cefcSMark Murray 	}
188b528cefcSMark Murray     }
1895e9cd1aeSAssar Westerlund     if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) {
1905e9cd1aeSAssar Westerlund 	len = sizeof(ss_remote);
191b528cefcSMark Murray 	if(rk_IS_SOCKET_ERROR(getpeername(fd, remote, &len))) {
192b528cefcSMark Murray 	    char buf[128];
193b528cefcSMark Murray 	    ret = rk_SOCK_ERRNO;
194adb0ddaeSAssar Westerlund 	    rk_strerror_r(ret, buf, sizeof(buf));
195b528cefcSMark Murray 	    krb5_set_error_message(context, ret, "getpeername: %s", buf);
196b528cefcSMark Murray 	    goto out;
1978373020dSJacques Vidrine 	}
1988373020dSJacques Vidrine 	ret = krb5_sockaddr2address (context, remote, &remote_k_address);
1995e9cd1aeSAssar Westerlund 	if(ret) goto out;
200adb0ddaeSAssar Westerlund 	if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) {
2015e9cd1aeSAssar Westerlund 	    krb5_sockaddr2port (context, remote, &auth_context->remote_port);
2025e9cd1aeSAssar Westerlund 	} else
203b528cefcSMark Murray 	    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);
2155e9cd1aeSAssar Westerlund     return ret;
2165e9cd1aeSAssar Westerlund 
2175e9cd1aeSAssar Westerlund }
218c19800e8SDoug Rabson 
2195e9cd1aeSAssar Westerlund KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setaddrs_from_fd(krb5_context context,krb5_auth_context auth_context,void * p_fd)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 {
2245e9cd1aeSAssar Westerlund     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;
230b528cefcSMark Murray     return krb5_auth_con_genaddrs(context, auth_context, fd, flags);
231b528cefcSMark Murray }
232c19800e8SDoug Rabson 
233b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getaddrs(krb5_context context,krb5_auth_context auth_context,krb5_address ** local_addr,krb5_address ** remote_addr)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);
241adb0ddaeSAssar Westerlund     *local_addr = malloc (sizeof(**local_addr));
242adb0ddaeSAssar Westerlund     if (*local_addr == NULL) {
243b528cefcSMark Murray 	krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
244adb0ddaeSAssar Westerlund 	return ENOMEM;
245b528cefcSMark Murray     }
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);
252adb0ddaeSAssar Westerlund     *remote_addr = malloc (sizeof(**remote_addr));
253adb0ddaeSAssar Westerlund     if (*remote_addr == NULL) {
254adb0ddaeSAssar Westerlund 	krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
255adb0ddaeSAssar Westerlund 	krb5_free_address (context, *local_addr);
256b528cefcSMark Murray 	*local_addr = NULL;
257adb0ddaeSAssar Westerlund 	return ENOMEM;
258b528cefcSMark Murray     }
259b528cefcSMark Murray     krb5_copy_address(context,
260b528cefcSMark Murray 		      auth_context->remote_address,
261b528cefcSMark Murray 		      *remote_addr);
262b528cefcSMark Murray     return 0;
263b528cefcSMark Murray }
264b528cefcSMark Murray 
265b528cefcSMark Murray /* coverity[+alloc : arg-*2] */
266b528cefcSMark Murray static krb5_error_code
copy_key(krb5_context context,krb5_keyblock * in,krb5_keyblock ** out)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;
275c19800e8SDoug Rabson }
276b528cefcSMark Murray 
277b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock ** keyblock)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);
283c19800e8SDoug Rabson }
284b528cefcSMark Murray 
285b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getlocalsubkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock ** keyblock)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);
291c19800e8SDoug Rabson }
292b528cefcSMark Murray 
293b528cefcSMark Murray /* coverity[+alloc : arg-*2] */
294b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getremotesubkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock ** keyblock)295b528cefcSMark Murray krb5_auth_con_getremotesubkey(krb5_context context,
296b528cefcSMark Murray 			      krb5_auth_context auth_context,
297b528cefcSMark Murray 			      krb5_keyblock **keyblock)
298b528cefcSMark Murray {
299c19800e8SDoug Rabson     return copy_key(context, auth_context->remote_subkey, keyblock);
300b528cefcSMark Murray }
301b528cefcSMark Murray 
302b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock * keyblock)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);
309c19800e8SDoug Rabson     return copy_key(context, keyblock, &auth_context->keyblock);
310b528cefcSMark Murray }
311b528cefcSMark Murray 
312b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setlocalsubkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock * keyblock)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);
319c19800e8SDoug Rabson     return copy_key(context, keyblock, &auth_context->local_subkey);
3200cadf2f4SJacques Vidrine }
3210cadf2f4SJacques Vidrine 
3220cadf2f4SJacques Vidrine KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_generatelocalsubkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock * key)3230cadf2f4SJacques Vidrine krb5_auth_con_generatelocalsubkey(krb5_context context,
3240cadf2f4SJacques Vidrine 				  krb5_auth_context auth_context,
3250cadf2f4SJacques Vidrine 				  krb5_keyblock *key)
3260cadf2f4SJacques Vidrine {
327c19800e8SDoug Rabson     krb5_error_code ret;
328c19800e8SDoug Rabson     krb5_keyblock *subkey;
329c19800e8SDoug Rabson 
3300cadf2f4SJacques Vidrine     ret = krb5_generate_subkey_extended (context, key,
3310cadf2f4SJacques Vidrine 					 auth_context->keytype,
3320cadf2f4SJacques Vidrine 					 &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;
339c19800e8SDoug Rabson }
340b528cefcSMark Murray 
341b528cefcSMark Murray 
342b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setremotesubkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock * keyblock)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);
349c19800e8SDoug Rabson     return copy_key(context, keyblock, &auth_context->remote_subkey);
3504137ff4cSJacques Vidrine }
351b528cefcSMark Murray 
352b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setcksumtype(krb5_context context,krb5_auth_context auth_context,krb5_cksumtype cksumtype)353b528cefcSMark Murray 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;
358c19800e8SDoug Rabson     return 0;
3594137ff4cSJacques Vidrine }
360b528cefcSMark Murray 
361b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getcksumtype(krb5_context context,krb5_auth_context auth_context,krb5_cksumtype * cksumtype)362b528cefcSMark Murray 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;
367c19800e8SDoug Rabson     return 0;
3684137ff4cSJacques Vidrine }
369b528cefcSMark Murray 
370b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setkeytype(krb5_context context,krb5_auth_context auth_context,krb5_keytype keytype)371b528cefcSMark Murray 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;
376c19800e8SDoug Rabson     return 0;
3774137ff4cSJacques Vidrine }
378b528cefcSMark Murray 
379b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getkeytype(krb5_context context,krb5_auth_context auth_context,krb5_keytype * keytype)380b528cefcSMark Murray 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;
386c19800e8SDoug Rabson }
3874137ff4cSJacques Vidrine 
388b528cefcSMark Murray #if 0
389b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
390b528cefcSMark Murray 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;
400c19800e8SDoug Rabson     return 0;
4014137ff4cSJacques Vidrine }
402b528cefcSMark Murray 
403b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
404b528cefcSMark Murray 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");
409c19800e8SDoug Rabson }
4104137ff4cSJacques Vidrine #endif
411b528cefcSMark Murray 
412b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getlocalseqnumber(krb5_context context,krb5_auth_context auth_context,int32_t * seqnumber)413b528cefcSMark Murray 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;
418c19800e8SDoug Rabson   return 0;
4194137ff4cSJacques Vidrine }
420b528cefcSMark Murray 
421b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setlocalseqnumber(krb5_context context,krb5_auth_context auth_context,int32_t seqnumber)422b528cefcSMark Murray 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;
427c19800e8SDoug Rabson   return 0;
428b528cefcSMark Murray }
429b528cefcSMark Murray 
430b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getremoteseqnumber(krb5_context context,krb5_auth_context auth_context,int32_t * seqnumber)431b528cefcSMark Murray 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;
436c19800e8SDoug Rabson   return 0;
4374137ff4cSJacques Vidrine }
438b528cefcSMark Murray 
439b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setremoteseqnumber(krb5_context context,krb5_auth_context auth_context,int32_t seqnumber)440b528cefcSMark Murray 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;
446c19800e8SDoug Rabson }
4474137ff4cSJacques Vidrine 
448b528cefcSMark Murray 
449b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getauthenticator(krb5_context context,krb5_auth_context auth_context,krb5_authenticator * authenticator)450b528cefcSMark Murray krb5_auth_con_getauthenticator(krb5_context context,
451b528cefcSMark Murray 			   krb5_auth_context auth_context,
452adb0ddaeSAssar Westerlund 			   krb5_authenticator *authenticator)
453adb0ddaeSAssar Westerlund {
454b528cefcSMark Murray     *authenticator = malloc(sizeof(**authenticator));
455adb0ddaeSAssar Westerlund     if (*authenticator == NULL) {
456b528cefcSMark Murray 	krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
457b528cefcSMark Murray 	return ENOMEM;
458b528cefcSMark Murray     }
459b528cefcSMark Murray 
460b528cefcSMark Murray     copy_Authenticator(auth_context->authenticator,
461b528cefcSMark Murray 		       *authenticator);
462b528cefcSMark Murray     return 0;
463c19800e8SDoug Rabson }
464b528cefcSMark Murray 
465b528cefcSMark Murray 
466b528cefcSMark Murray KRB5_LIB_FUNCTION void KRB5_LIB_CALL
krb5_free_authenticator(krb5_context context,krb5_authenticator * authenticator)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;
473c19800e8SDoug Rabson }
474b528cefcSMark Murray 
475b528cefcSMark Murray 
476b528cefcSMark Murray KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setuserkey(krb5_context context,krb5_auth_context auth_context,krb5_keyblock * keyblock)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);
483c19800e8SDoug Rabson     return krb5_copy_keyblock(context, keyblock, &auth_context->keyblock);
4845e9cd1aeSAssar Westerlund }
4855e9cd1aeSAssar Westerlund 
4865e9cd1aeSAssar Westerlund KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_getrcache(krb5_context context,krb5_auth_context auth_context,krb5_rcache * rcache)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;
492c19800e8SDoug Rabson     return 0;
4935e9cd1aeSAssar Westerlund }
4945e9cd1aeSAssar Westerlund 
4955e9cd1aeSAssar Westerlund KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_auth_con_setrcache(krb5_context context,krb5_auth_context auth_context,krb5_rcache rcache)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;
501b528cefcSMark Murray     return 0;
502b528cefcSMark Murray }
503c19800e8SDoug Rabson 
504b528cefcSMark Murray #if 0 /* not implemented */
505b528cefcSMark Murray 
506b528cefcSMark Murray 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");
511c19800e8SDoug Rabson }
512b528cefcSMark Murray 
513b528cefcSMark Murray 
514b528cefcSMark Murray 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");
520 }
521 
522 #endif /* not implemented */
523