xref: /netbsd-src/crypto/external/bsd/heimdal/dist/lib/gssapi/spnego/external.c (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
1 /*	$NetBSD: external.c,v 1.1.1.2 2014/04/24 12:45:29 pettai Exp $	*/
2 
3 /*
4  * Copyright (c) 2004, PADL Software Pty Ltd.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * 3. Neither the name of PADL Software nor the names of its contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY PADL SOFTWARE AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL PADL SOFTWARE OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
34 
35 #include "spnego_locl.h"
36 #include <gssapi_mech.h>
37 
38 /*
39  * RFC2478, SPNEGO:
40  *  The security mechanism of the initial
41  *  negotiation token is identified by the Object Identifier
42  *  iso.org.dod.internet.security.mechanism.snego (1.3.6.1.5.5.2).
43  */
44 static gss_mo_desc spnego_mo[] = {
45     {
46 	GSS_C_MA_SASL_MECH_NAME,
47 	GSS_MO_MA,
48 	"SASL mech name",
49 	rk_UNCONST("SPNEGO"),
50 	_gss_mo_get_ctx_as_string,
51 	NULL
52     },
53     {
54 	GSS_C_MA_MECH_NAME,
55 	GSS_MO_MA,
56 	"Mechanism name",
57 	rk_UNCONST("SPNEGO"),
58 	_gss_mo_get_ctx_as_string,
59 	NULL
60     },
61     {
62 	GSS_C_MA_MECH_DESCRIPTION,
63 	GSS_MO_MA,
64 	"Mechanism description",
65 	rk_UNCONST("Heimdal SPNEGO Mechanism"),
66 	_gss_mo_get_ctx_as_string,
67 	NULL
68     },
69     {
70 	GSS_C_MA_MECH_NEGO,
71 	GSS_MO_MA
72     },
73     {
74 	GSS_C_MA_MECH_PSEUDO,
75 	GSS_MO_MA
76     }
77 };
78 
79 static gssapi_mech_interface_desc spnego_mech = {
80     GMI_VERSION,
81     "spnego",
82     {6, rk_UNCONST("\x2b\x06\x01\x05\x05\x02") },
83     0,
84     _gss_spnego_acquire_cred,
85     _gss_spnego_release_cred,
86     _gss_spnego_init_sec_context,
87     _gss_spnego_accept_sec_context,
88     _gss_spnego_process_context_token,
89     _gss_spnego_delete_sec_context,
90     _gss_spnego_context_time,
91     _gss_spnego_get_mic,
92     _gss_spnego_verify_mic,
93     _gss_spnego_wrap,
94     _gss_spnego_unwrap,
95     NULL, /* gm_display_status */
96     NULL, /* gm_indicate_mechs */
97     _gss_spnego_compare_name,
98     _gss_spnego_display_name,
99     _gss_spnego_import_name,
100     _gss_spnego_export_name,
101     _gss_spnego_release_name,
102     _gss_spnego_inquire_cred,
103     _gss_spnego_inquire_context,
104     _gss_spnego_wrap_size_limit,
105     gss_add_cred,
106     _gss_spnego_inquire_cred_by_mech,
107     _gss_spnego_export_sec_context,
108     _gss_spnego_import_sec_context,
109     NULL /* _gss_spnego_inquire_names_for_mech */,
110     _gss_spnego_inquire_mechs_for_name,
111     _gss_spnego_canonicalize_name,
112     _gss_spnego_duplicate_name,
113     _gss_spnego_inquire_sec_context_by_oid,
114     _gss_spnego_inquire_cred_by_oid,
115     _gss_spnego_set_sec_context_option,
116     _gss_spnego_set_cred_option,
117     _gss_spnego_pseudo_random,
118     _gss_spnego_wrap_iov,
119     _gss_spnego_unwrap_iov,
120     _gss_spnego_wrap_iov_length,
121     NULL,
122     _gss_spnego_export_cred,
123     _gss_spnego_import_cred,
124     NULL,
125     NULL,
126     NULL,
127     NULL,
128     NULL,
129     NULL,
130     NULL,
131     spnego_mo,
132     sizeof(spnego_mo) / sizeof(spnego_mo[0]),
133     NULL,
134     NULL,
135     NULL,
136     NULL,
137     NULL,
138     NULL,
139 };
140 
141 gssapi_mech_interface
142 __gss_spnego_initialize(void)
143 {
144 	return &spnego_mech;
145 }
146