Line data Source code
1 : /*
2 : * Copyright (c) 1997, 2003 Kungliga Tekniska Högskolan
3 : * (Royal Institute of Technology, Stockholm, Sweden).
4 : * All rights reserved.
5 : *
6 : * Redistribution and use in source and binary forms, with or without
7 : * modification, are permitted provided that the following conditions
8 : * are met:
9 : *
10 : * 1. Redistributions of source code must retain the above copyright
11 : * notice, this list of conditions and the following disclaimer.
12 : *
13 : * 2. Redistributions in binary form must reproduce the above copyright
14 : * notice, this list of conditions and the following disclaimer in the
15 : * documentation and/or other materials provided with the distribution.
16 : *
17 : * 3. Neither the name of the Institute nor the names of its contributors
18 : * may be used to endorse or promote products derived from this software
19 : * without specific prior written permission.
20 : *
21 : * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 : * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 : * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 : * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 : * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 : * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 : * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 : * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 : * SUCH DAMAGE.
32 : */
33 :
34 : #include "gsskrb5_locl.h"
35 :
36 0 : OM_uint32 GSSAPI_CALLCONV _gsskrb5_inquire_context (
37 : OM_uint32 * minor_status,
38 : gss_const_ctx_id_t context_handle,
39 : gss_name_t * src_name,
40 : gss_name_t * targ_name,
41 : OM_uint32 * lifetime_rec,
42 : gss_OID * mech_type,
43 : OM_uint32 * ctx_flags,
44 : int * locally_initiated,
45 : int * open_context
46 : )
47 : {
48 0 : krb5_context context;
49 0 : OM_uint32 ret;
50 0 : gsskrb5_ctx ctx = (gsskrb5_ctx)context_handle;
51 0 : gss_name_t name;
52 :
53 0 : if (src_name)
54 0 : *src_name = GSS_C_NO_NAME;
55 0 : if (targ_name)
56 0 : *targ_name = GSS_C_NO_NAME;
57 :
58 0 : GSSAPI_KRB5_INIT (&context);
59 :
60 0 : HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
61 :
62 0 : if (src_name) {
63 0 : name = (gss_name_t)ctx->source;
64 0 : ret = _gsskrb5_duplicate_name (minor_status, name, src_name);
65 0 : if (ret)
66 0 : goto failed;
67 : }
68 :
69 0 : if (targ_name) {
70 0 : name = (gss_name_t)ctx->target;
71 0 : ret = _gsskrb5_duplicate_name (minor_status, name, targ_name);
72 0 : if (ret)
73 0 : goto failed;
74 : }
75 :
76 0 : if (lifetime_rec) {
77 0 : ret = _gsskrb5_lifetime_left(minor_status,
78 : context,
79 0 : ctx->endtime,
80 : lifetime_rec);
81 0 : if (ret)
82 0 : goto failed;
83 : }
84 :
85 0 : if (mech_type)
86 0 : *mech_type = GSS_KRB5_MECHANISM;
87 :
88 0 : if (ctx_flags)
89 0 : *ctx_flags = ctx->flags;
90 :
91 0 : if (locally_initiated)
92 0 : *locally_initiated = ctx->more_flags & LOCAL;
93 :
94 0 : if (open_context)
95 0 : *open_context = ctx->more_flags & OPEN;
96 :
97 0 : *minor_status = 0;
98 :
99 0 : HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
100 0 : return GSS_S_COMPLETE;
101 :
102 0 : failed:
103 0 : if (src_name)
104 0 : _gsskrb5_release_name(NULL, src_name);
105 0 : if (targ_name)
106 0 : _gsskrb5_release_name(NULL, targ_name);
107 :
108 : HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
109 0 : return ret;
110 : }
|