gss_inquire_context.c revision 178828
155714Skris/*- 255714Skris * Copyright (c) 2005 Doug Rabson 355714Skris * All rights reserved. 455714Skris * 555714Skris * Redistribution and use in source and binary forms, with or without 655714Skris * modification, are permitted provided that the following conditions 755714Skris * are met: 855714Skris * 1. Redistributions of source code must retain the above copyright 955714Skris * notice, this list of conditions and the following disclaimer. 1055714Skris * 2. Redistributions in binary form must reproduce the above copyright 1155714Skris * notice, this list of conditions and the following disclaimer in the 1255714Skris * documentation and/or other materials provided with the distribution. 1355714Skris * 1455714Skris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1555714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1655714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1755714Skris * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1855714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1955714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2055714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2155714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2255714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2355714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2455714Skris * SUCH DAMAGE. 2555714Skris * 2655714Skris * $FreeBSD: head/lib/libgssapi/gss_inquire_context.c 178828 2008-05-07 13:53:12Z dfr $ 2755714Skris */ 2855714Skris 2955714Skris#include <gssapi/gssapi.h> 3055714Skris 3155714Skris#include "mech_switch.h" 3255714Skris#include "context.h" 3355714Skris#include "name.h" 3455714Skris 3555714SkrisOM_uint32 3655714Skrisgss_inquire_context(OM_uint32 *minor_status, 3755714Skris const gss_ctx_id_t context_handle, 3855714Skris gss_name_t *src_name, 3955714Skris gss_name_t *targ_name, 4055714Skris OM_uint32 *lifetime_rec, 4155714Skris gss_OID *mech_type, 4255714Skris OM_uint32 *ctx_flags, 4355714Skris int *locally_initiated, 4455714Skris int *open) 4555714Skris{ 4655714Skris OM_uint32 major_status; 4755714Skris struct _gss_context *ctx = (struct _gss_context *) context_handle; 4855714Skris struct _gss_mech_switch *m = ctx->gc_mech; 4955714Skris struct _gss_name *name; 5055714Skris gss_name_t src_mn, targ_mn; 5155714Skris 5255714Skris if (locally_initiated) 5355714Skris *locally_initiated = 0; 5455714Skris if (open) 5555714Skris *open = 0; 5655714Skris if (lifetime_rec) 5755714Skris *lifetime_rec = 0; 5855714Skris 5955714Skris if (src_name) 6055714Skris *src_name = GSS_C_NO_NAME; 6155714Skris if (targ_name) 6255714Skris *targ_name = GSS_C_NO_NAME; 6355714Skris if (mech_type) 6455714Skris *mech_type = GSS_C_NO_OID; 6555714Skris src_mn = targ_mn = GSS_C_NO_NAME; 6655714Skris 6755714Skris major_status = m->gm_inquire_context(minor_status, 6855714Skris ctx->gc_ctx, 6955714Skris src_name ? &src_mn : NULL, 7055714Skris targ_name ? &targ_mn : NULL, 7155714Skris lifetime_rec, 7255714Skris mech_type, 7355714Skris ctx_flags, 7455714Skris locally_initiated, 7555714Skris open); 7655714Skris 7755714Skris if (major_status != GSS_S_COMPLETE) { 7855714Skris _gss_mg_error(m, major_status, *minor_status); 7955714Skris return (major_status); 8055714Skris } 8155714Skris 8255714Skris if (src_name) { 8355714Skris name = _gss_make_name(m, src_mn); 8455714Skris if (!name) { 8555714Skris if (mech_type) 8655714Skris *mech_type = GSS_C_NO_OID; 8755714Skris m->gm_release_name(minor_status, &src_mn); 8855714Skris *minor_status = 0; 8955714Skris return (GSS_S_FAILURE); 9055714Skris } 9155714Skris *src_name = (gss_name_t) name; 9255714Skris } 9355714Skris 9455714Skris if (targ_name) { 9555714Skris name = _gss_make_name(m, targ_mn); 9655714Skris if (!name) { 9755714Skris if (mech_type) 9855714Skris *mech_type = GSS_C_NO_OID; 9955714Skris if (src_name) 10055714Skris gss_release_name(minor_status, src_name); 10155714Skris m->gm_release_name(minor_status, &src_mn); 10255714Skris minor_status = 0; 10355714Skris return (GSS_S_FAILURE); 10455714Skris } 10555714Skris *targ_name = (gss_name_t) name; 10655714Skris } 10755714Skris 10855714Skris return (GSS_S_COMPLETE); 10955714Skris} 11055714Skris