150477Speter/*	$NetBSD: gss_display_name_ext.c,v 1.2 2017/01/28 21:31:46 christos Exp $	*/
240269Srnordier
340326Srnordier/*
440326Srnordier * Copyright (c) 2010, PADL Software Pty Ltd.
540326Srnordier * All rights reserved.
640326Srnordier *
740326Srnordier * Redistribution and use in source and binary forms, with or without
840326Srnordier * modification, are permitted provided that the following conditions
980751Sjhb * are met:
1040404Srnordier *
1140326Srnordier * 1. Redistributions of source code must retain the above copyright
1280751Sjhb *    notice, this list of conditions and the following disclaimer.
1380751Sjhb *
1448919Srnordier * 2. Redistributions in binary form must reproduce the above copyright
1562138Sjhb *    notice, this list of conditions and the following disclaimer in the
1648919Srnordier *    documentation and/or other materials provided with the distribution.
1742480Srnordier *
1842480Srnordier * 3. Neither the name of PADL Software nor the names of its contributors
1940541Srnordier *    may be used to endorse or promote products derived from this software
2040541Srnordier *    without specific prior written permission.
2140269Srnordier *
2240269Srnordier * THIS SOFTWARE IS PROVIDED BY PADL SOFTWARE AND CONTRIBUTORS ``AS IS'' AND
2340269Srnordier * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2440269Srnordier * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2540269Srnordier * ARE DISCLAIMED.  IN NO EVENT SHALL PADL SOFTWARE OR CONTRIBUTORS BE LIABLE
2640269Srnordier * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2740269Srnordier * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2840269Srnordier * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2940269Srnordier * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3096327Sjhb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3196306Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3296327Sjhb * SUCH DAMAGE.
3396306Sobrien */
3440269Srnordier
3540269Srnordier#include "mech_locl.h"
3640269Srnordier
3740269SrnordierGSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
3840269Srnordiergss_display_name_ext(OM_uint32 *minor_status,
3940269Srnordier		     gss_name_t input_name,
4040269Srnordier		     gss_OID display_as_name_type,
4140269Srnordier		     gss_buffer_t display_name)
4240269Srnordier{
4340308Srnordier    OM_uint32 major_status = GSS_S_UNAVAILABLE;
4440269Srnordier    struct _gss_name *name = (struct _gss_name *) input_name;
4540269Srnordier    struct _gss_mechanism_name *mn;
4640269Srnordier
4740269Srnordier    *minor_status = 0;
4860821Sjhb    _mg_buffer_zero(display_name);
4960821Sjhb
5040269Srnordier    if (input_name == GSS_C_NO_NAME)
5180751Sjhb        return GSS_S_BAD_NAME;
5280751Sjhb
5380751Sjhb    HEIM_SLIST_FOREACH(mn, &name->gn_mn, gmn_link) {
5480751Sjhb        gssapi_mech_interface m = mn->gmn_mech;
5580751Sjhb
5659150Sjhb        if (!m->gm_display_name_ext)
5740269Srnordier            continue;
5840314Srnordier
5940314Srnordier        major_status = m->gm_display_name_ext(minor_status,
6040314Srnordier                                              mn->gmn_name,
6140314Srnordier                                              display_as_name_type,
6240269Srnordier                                              display_name);
6340269Srnordier        if (GSS_ERROR(major_status))
6440269Srnordier            _gss_mg_error(m, major_status, *minor_status);
6540269Srnordier        else
6640269Srnordier            break;
6740308Srnordier    }
6840269Srnordier
6940404Srnordier    return major_status;
7040269Srnordier}
7140404Srnordier