1 /*
2  * Copyright 1993 by OpenVision Technologies, Inc.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software
5  * and its documentation for any purpose is hereby granted without fee,
6  * provided that the above copyright notice appears in all copies and
7  * that both that copyright notice and this permission notice appear in
8  * supporting documentation, and that the name of OpenVision not be used
9  * in advertising or publicity pertaining to distribution of the software
10  * without specific, written prior permission. OpenVision makes no
11  * representations about the suitability of this software for any
12  * purpose.  It is provided "as is" without express or implied warranty.
13  *
14  * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16  * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
18  * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
19  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20  * PERFORMANCE OF THIS SOFTWARE.
21  */
22 
23 #include "gssapiP_krb5.h"
24 
25 OM_uint32
krb5_gss_display_name(minor_status,input_name,output_name_buffer,output_name_type)26 krb5_gss_display_name(minor_status, input_name, output_name_buffer,
27 		      output_name_type)
28      OM_uint32 *minor_status;
29      gss_name_t input_name;
30      gss_buffer_t output_name_buffer;
31      gss_OID *output_name_type;
32 {
33    krb5_context context;
34    krb5_error_code code;
35    char *str;
36 
37    code = krb5_gss_init_context(&context);
38    if (code) {
39        *minor_status = code;
40        return GSS_S_FAILURE;
41    }
42 
43    output_name_buffer->length = 0;
44    output_name_buffer->value = NULL;
45 
46    if (! kg_validate_name(input_name)) {
47       *minor_status = (OM_uint32) G_VALIDATE_FAILED;
48       krb5_free_context(context);
49       return(GSS_S_CALL_BAD_STRUCTURE|GSS_S_BAD_NAME);
50    }
51 
52    if ((code = krb5_unparse_name(context,
53 				 (krb5_principal) input_name, &str))) {
54       *minor_status = code;
55       save_error_info(*minor_status, context);
56       krb5_free_context(context);
57       return(GSS_S_FAILURE);
58    }
59 
60    if (! g_make_string_buffer(str, output_name_buffer)) {
61       krb5_free_unparsed_name(context, str);
62       krb5_free_context(context);
63 
64       *minor_status = (OM_uint32) G_BUFFER_ALLOC;
65       return(GSS_S_FAILURE);
66    }
67 
68    krb5_free_unparsed_name(context, str);
69    krb5_free_context(context);
70 
71    *minor_status = 0;
72    if (output_name_type)
73       *output_name_type = (gss_OID) gss_nt_krb5_name;
74    return(GSS_S_COMPLETE);
75 }
76