1 /* 2 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 | #pragma ident "@(#)g_dsp_name.c 1.14 04/09/08 SMI" 6 | #pragma ident "@(#)g_dsp_name.c 1.13 04/02/23 SMI" 7 8 /* 9 * glue routine for gss_display_name() 10 * 11 */ 12 13 #include <mechglueP.h> 14 #include <stdio.h> 15 #ifdef HAVE_STDLIB_H 16 #include <stdlib.h> 17 #endif 18 #include <string.h> 19 20 OM_uint32 21 gss_display_name(minor_status, 22 input_name, 23 output_name_buffer, 24 output_name_type) 25 26 OM_uint32 * minor_status; 27 const gss_name_t input_name; 28 gss_buffer_t output_name_buffer; 29 gss_OID * output_name_type; 30 31 { 32 OM_uint32 major_status; 33 gss_union_name_t union_name; 34 35 + if (minor_status == NULL) 36 + return (GSS_S_CALL_INACCESSIBLE_WRITE); 37 + *minor_status = 0; 38 + 39 if (input_name == 0) 36 | return (GSS_S_BAD_NAME); 40 | return (GSS_S_CALL_INACCESSIBLE_READ | GSS_S_BAD_NAME); 41 42 + if (output_name_buffer == NULL) 43 + return (GSS_S_CALL_INACCESSIBLE_WRITE); 44 + 45 + if (output_name_type) 46 + *output_name_type = NULL; 47 + 48 union_name = (gss_union_name_t)input_name; 49 50 if (union_name->mech_type) { 51 /* 52 * OK, we have a mechanism-specific name; let's use it! 53 */ 54 return (__gss_display_internal_name(minor_status, 55 union_name->mech_type, 56 union_name->mech_name, 57 output_name_buffer, 58 output_name_type)); 59 } 60 61 /* 62 * copy the value of the external_name component of the union 63 * name into the output_name_buffer and point the output_name_type 64 * to the name_type component of union_name 65 */ 56 | if (output_name_type != NULL) { 66 | if (output_name_type != NULL && 67 + union_name->name_type != GSS_C_NULL_OID) { 68 major_status = generic_gss_copy_oid(minor_status, 69 union_name->name_type, 70 output_name_type); 60 | if (major_status) 71 | if (major_status != GSS_S_COMPLETE) 72 return (major_status); 73 } 74 64 | if ((output_name_buffer != NULL) { 75 | if ((output_name_buffer->value = 76 + malloc(union_name->external_name->length + 1)) == NULL) { 77 + if (output_name_type && *output_name_type != GSS_C_NULL_OID) { 78 + (void) generic_gss_release_oid(minor_status, 79 + output_name_type); 80 + *output_name_type = NULL; 81 + } 82 + return (GSS_S_FAILURE); 83 + } 84 output_name_buffer->length = union_name->external_name->length; 66 | 85 | (void) memcpy(output_name_buffer->value, 67 - output_name_buffer->value = 68 - (void *) malloc(output_name_buffer->length); 69 - 70 - memcpy(output_name_buffer->value, 86 union_name->external_name->value, 72 | output_name_buffer->length); 73 | } 87 | union_name->external_name->length); 88 | ((char *)output_name_buffer->value)[output_name_buffer->length] = '\0'; 75 - if (minor_status) 76 - *minor_status = 0; 77 - 89 90 return (GSS_S_COMPLETE); 91 } ----Unchanged portion omitted----