1178825Sdfr/*
2178825Sdfr * Copyright (c) 2004, PADL Software Pty Ltd.
3178825Sdfr * All rights reserved.
4178825Sdfr *
5178825Sdfr * Redistribution and use in source and binary forms, with or without
6178825Sdfr * modification, are permitted provided that the following conditions
7178825Sdfr * are met:
8178825Sdfr *
9178825Sdfr * 1. Redistributions of source code must retain the above copyright
10178825Sdfr *    notice, this list of conditions and the following disclaimer.
11178825Sdfr *
12178825Sdfr * 2. Redistributions in binary form must reproduce the above copyright
13178825Sdfr *    notice, this list of conditions and the following disclaimer in the
14178825Sdfr *    documentation and/or other materials provided with the distribution.
15178825Sdfr *
16178825Sdfr * 3. Neither the name of PADL Software nor the names of its contributors
17178825Sdfr *    may be used to endorse or promote products derived from this software
18178825Sdfr *    without specific prior written permission.
19178825Sdfr *
20178825Sdfr * THIS SOFTWARE IS PROVIDED BY PADL SOFTWARE AND CONTRIBUTORS ``AS IS'' AND
21178825Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22178825Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23178825Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL PADL SOFTWARE OR CONTRIBUTORS BE LIABLE
24178825Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25178825Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26178825Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27178825Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28178825Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29178825Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30178825Sdfr * SUCH DAMAGE.
31178825Sdfr */
32178825Sdfr
33233294Sstas#include "spnego_locl.h"
34178825Sdfr#include <gssapi_mech.h>
35178825Sdfr
36178825Sdfr/*
37178825Sdfr * RFC2478, SPNEGO:
38178825Sdfr *  The security mechanism of the initial
39178825Sdfr *  negotiation token is identified by the Object Identifier
40178825Sdfr *  iso.org.dod.internet.security.mechanism.snego (1.3.6.1.5.5.2).
41178825Sdfr */
42233294Sstas#if 0
43233294Sstasstatic gss_mo_desc spnego_mo[] = {
44233294Sstas    {
45233294Sstas	GSS_C_MA_SASL_MECH_NAME,
46233294Sstas	GSS_MO_MA,
47233294Sstas	"SASL mech name",
48233294Sstas	rk_UNCONST("SPNEGO"),
49233294Sstas	_gss_mo_get_ctx_as_string,
50233294Sstas	NULL
51233294Sstas    },
52233294Sstas    {
53233294Sstas	GSS_C_MA_MECH_NAME,
54233294Sstas	GSS_MO_MA,
55233294Sstas	"Mechanism name",
56233294Sstas	rk_UNCONST("SPNEGO"),
57233294Sstas	_gss_mo_get_ctx_as_string,
58233294Sstas	NULL
59233294Sstas    },
60233294Sstas    {
61233294Sstas	GSS_C_MA_MECH_DESCRIPTION,
62233294Sstas	GSS_MO_MA,
63233294Sstas	"Mechanism description",
64233294Sstas	rk_UNCONST("Heimdal SPNEGO Mechanism"),
65233294Sstas	_gss_mo_get_ctx_as_string,
66233294Sstas	NULL
67233294Sstas    },
68233294Sstas    {
69233294Sstas	GSS_C_MA_MECH_NEGO,
70233294Sstas	GSS_MO_MA
71233294Sstas    },
72233294Sstas    {
73233294Sstas	GSS_C_MA_MECH_PSEUDO,
74233294Sstas	GSS_MO_MA
75233294Sstas    }
76233294Sstas};
77233294Sstas#endif
78178825Sdfr
79178825Sdfrstatic gssapi_mech_interface_desc spnego_mech = {
80178825Sdfr    GMI_VERSION,
81178825Sdfr    "spnego",
82233294Sstas    {6, rk_UNCONST("\x2b\x06\x01\x05\x05\x02") },
83233294Sstas    0,
84178825Sdfr    _gss_spnego_acquire_cred,
85178825Sdfr    _gss_spnego_release_cred,
86178825Sdfr    _gss_spnego_init_sec_context,
87178825Sdfr    _gss_spnego_accept_sec_context,
88178825Sdfr    _gss_spnego_process_context_token,
89178825Sdfr    _gss_spnego_internal_delete_sec_context,
90178825Sdfr    _gss_spnego_context_time,
91178825Sdfr    _gss_spnego_get_mic,
92178825Sdfr    _gss_spnego_verify_mic,
93178825Sdfr    _gss_spnego_wrap,
94178825Sdfr    _gss_spnego_unwrap,
95233294Sstas    NULL, /* gm_display_status */
96233294Sstas    NULL, /* gm_indicate_mechs */
97178825Sdfr    _gss_spnego_compare_name,
98178825Sdfr    _gss_spnego_display_name,
99178825Sdfr    _gss_spnego_import_name,
100178825Sdfr    _gss_spnego_export_name,
101178825Sdfr    _gss_spnego_release_name,
102178825Sdfr    _gss_spnego_inquire_cred,
103178825Sdfr    _gss_spnego_inquire_context,
104178825Sdfr    _gss_spnego_wrap_size_limit,
105233294Sstas    gss_add_cred,
106178825Sdfr    _gss_spnego_inquire_cred_by_mech,
107178825Sdfr    _gss_spnego_export_sec_context,
108178825Sdfr    _gss_spnego_import_sec_context,
109233294Sstas    NULL /* _gss_spnego_inquire_names_for_mech */,
110178825Sdfr    _gss_spnego_inquire_mechs_for_name,
111178825Sdfr    _gss_spnego_canonicalize_name,
112233294Sstas    _gss_spnego_duplicate_name,
113233294Sstas    _gss_spnego_inquire_sec_context_by_oid,
114233294Sstas    _gss_spnego_inquire_cred_by_oid,
115233294Sstas    _gss_spnego_set_sec_context_option,
116233294Sstas    _gss_spnego_set_cred_option,
117233294Sstas    _gss_spnego_pseudo_random,
118233294Sstas#if 0
119233294Sstas    _gss_spnego_wrap_iov,
120233294Sstas    _gss_spnego_unwrap_iov,
121233294Sstas    _gss_spnego_wrap_iov_length,
122233294Sstas#else
123233294Sstas    NULL,
124233294Sstas    NULL,
125233294Sstas    NULL,
126233294Sstas#endif
127233294Sstas    NULL,
128233294Sstas#if 0
129233294Sstas    _gss_spnego_export_cred,
130233294Sstas    _gss_spnego_import_cred,
131233294Sstas#else
132233294Sstas    NULL,
133233294Sstas    NULL,
134233294Sstas#endif
135233294Sstas    NULL,
136233294Sstas    NULL,
137233294Sstas    NULL,
138233294Sstas    NULL,
139233294Sstas    NULL,
140233294Sstas    NULL,
141233294Sstas    NULL,
142233294Sstas#if 0
143233294Sstas    spnego_mo,
144233294Sstas    sizeof(spnego_mo) / sizeof(spnego_mo[0]),
145233294Sstas#else
146233294Sstas    NULL,
147233294Sstas    0,
148233294Sstas#endif
149233294Sstas    NULL,
150233294Sstas    NULL,
151233294Sstas    NULL,
152233294Sstas    NULL,
153233294Sstas    NULL,
154233294Sstas    NULL,
155178825Sdfr};
156178825Sdfr
157178825Sdfrgssapi_mech_interface
158178825Sdfr__gss_spnego_initialize(void)
159178825Sdfr{
160178825Sdfr	return &spnego_mech;
161178825Sdfr}
162