1176771Sraj/*- 2192532Sraj * Copyright (c) 2005 Doug Rabson 3176771Sraj * All rights reserved. 4176771Sraj * 5176771Sraj * Redistribution and use in source and binary forms, with or without 6176771Sraj * modification, are permitted provided that the following conditions 7176771Sraj * are met: 8176771Sraj * 1. Redistributions of source code must retain the above copyright 9176771Sraj * notice, this list of conditions and the following disclaimer. 10176771Sraj * 2. Redistributions in binary form must reproduce the above copyright 11176771Sraj * notice, this list of conditions and the following disclaimer in the 12176771Sraj * documentation and/or other materials provided with the distribution. 13176771Sraj * 14176771Sraj * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15176771Sraj * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16176771Sraj * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17176771Sraj * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18176771Sraj * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19176771Sraj * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20176771Sraj * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21176771Sraj * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22176771Sraj * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23176771Sraj * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24176771Sraj * SUCH DAMAGE. 25176771Sraj * 26176771Sraj * $FreeBSD: src/lib/libgssapi/gss_release_name.c,v 1.1 2005/12/29 14:40:20 dfr Exp $ 27176771Sraj */ 28176771Sraj 29176771Sraj#include "mech_locl.h" 30176771Sraj 31176771Sraj/** 32176771Sraj * Free a name 33176771Sraj * 34176771Sraj * import_name can point to NULL or be NULL, or a pointer to a 35176771Sraj * gss_name_t structure. If it was a pointer to gss_name_t, the 36176771Sraj * pointer will be set to NULL on success and failure. 37176771Sraj * 38176771Sraj * @param minor_status minor status code 39187151Sraj * @param input_name name to free 40187151Sraj * 41187151Sraj * @returns a gss_error code, see gss_display_status() about printing 42190701Smarcel * the error code. 43187151Sraj * 44187151Sraj * @ingroup gssapi 45187151Sraj */ 46187151SrajGSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL 47187151Srajgss_release_name(OM_uint32 *minor_status, 48187151Sraj gss_name_t *input_name) 49176771Sraj{ 50176771Sraj struct _gss_name *name; 51176771Sraj 52176771Sraj *minor_status = 0; 53176771Sraj 54176771Sraj if (input_name == NULL || *input_name == NULL) 55176771Sraj return GSS_S_COMPLETE; 56176771Sraj 57187149Sraj name = (struct _gss_name *) *input_name; 58176771Sraj 59176771Sraj if (name->gn_type.elements) 60176771Sraj free(name->gn_type.elements); 61176771Sraj while (HEIM_SLIST_FIRST(&name->gn_mn)) { 62176771Sraj struct _gss_mechanism_name *mn; 63224611Smarcel mn = HEIM_SLIST_FIRST(&name->gn_mn); 64176771Sraj HEIM_SLIST_REMOVE_HEAD(&name->gn_mn, gmn_link); 65176771Sraj mn->gmn_mech->gm_release_name(minor_status, 66176771Sraj &mn->gmn_name); 67222813Sattilio free(mn); 68192532Sraj } 69176771Sraj gss_release_buffer(minor_status, &name->gn_value); 70176771Sraj free(name); 71176771Sraj *input_name = GSS_C_NO_NAME; 72176771Sraj 73176771Sraj return (GSS_S_COMPLETE); 74176771Sraj} 75176771Sraj