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