Sdiff g_inquire_names.c
  1 /*
  2  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  3  * Use is subject to license terms.
  4  */
  5 
  6 #pragma ident   "@(#)g_inquire_names.c  1.17    04/09/08 SMI" 
  7 
  8 /*
  9  *  glue routine for gss_inquire_context
 10  */
 11 
 12 #include <mechglueP.h>
 13 
 14 #define MAX_MECH_OID_PAIRS 32
 15 
 16 /* Last argument new for V2 */
 17 OM_uint32
 18 gss_inquire_names_for_mech(minor_status, mechanism, name_types)
 19 
 20 OM_uint32 *             minor_status;
 21 const gss_OID           mechanism;
 22 gss_OID_set *           name_types;
 23 
 24 {
 25         OM_uint32               status;
 26         gss_mechanism           mech;
 27 
 28         gss_initialize(); 


 29 



 30         /*
 31          * select the approprate underlying mechanism routine and
 32          * call it.
 33          */
 34 
 35         mech = __gss_get_mechanism(mechanism);
 36 
 37         if (mech) {
 38 
 39                 if (mech->gss_inquire_names_for_mech)
 40                         status = mech->gss_inquire_names_for_mech(
 41                                         mech->context,
 42                                         minor_status,
 43                                         mechanism,
 44                                         name_types);
 45                 else
 46                         status = GSS_S_BAD_BINDINGS; 
 47 
 48                 return (status);
 49         }
 50 
 51         return (GSS_S_NO_CONTEXT); 
 52 }
 53 



















































































  1 /*
  2  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  3  * Use is subject to license terms.
  4  */
  5 
  6 #pragma ident   "@(#)g_inquire_names.c  1.16    04/02/23 SMI" 
  7 
  8 /*
  9  *  glue routine for gss_inquire_context
 10  */
 11 
 12 #include <mechglueP.h>
 13 
 14 #define MAX_MECH_OID_PAIRS 32
 15 
 16 /* Last argument new for V2 */
 17 OM_uint32
 18 gss_inquire_names_for_mech(minor_status, mechanism, name_types)
 19 
 20 OM_uint32 *             minor_status;
 21 const gss_OID           mechanism;
 22 gss_OID_set *           name_types;
 23 
 24 {
 25         OM_uint32               status;
 26         gss_mechanism           mech;
 27 
 28         if (minor_status == NULL) 
 29                 return (GSS_S_CALL_INACCESSIBLE_WRITE); 
 30         *minor_status = 0; 
 31 
 32         if (name_types == NULL)
 33                 return (GSS_S_CALL_INACCESSIBLE_WRITE);
 34 
 35         /*
 36          * select the approprate underlying mechanism routine and
 37          * call it.
 38          */
 39 
 40         mech = __gss_get_mechanism(mechanism);
 41 
 42         if (mech) {
 43 
 44                 if (mech->gss_inquire_names_for_mech)
 45                         status = mech->gss_inquire_names_for_mech(
 46                                         mech->context,
 47                                         minor_status,
 48                                         mechanism,
 49                                         name_types);
 50                 else
 51                         status = GSS_S_UNAVAILABLE; 
 52 
 53                 return (status);
 54         }
 55 
 56         return (GSS_S_BAD_MECH); 
 57 }
 58 
 59 OM_uint32
 60 gss_inquire_mechs_for_name(minor_status, input_name, mech_set)
 61 
 62 OM_uint32 *             minor_status;
 63 const gss_name_t        input_name;
 64 gss_OID_set *           mech_set;
 65 
 66 {
 67         OM_uint32               status;
 68         static char             *mech_list[MAX_MECH_OID_PAIRS+1];
 69         gss_OID_set             mech_name_types;
 70         int                     present;
 71         char                    *mechanism;
 72         gss_OID                 mechOid;
 73         gss_OID                 name_type;
 74         gss_buffer_desc         name_buffer;
 75         int                     i;
 76 
 77         if (minor_status == NULL)
 78                 return (GSS_S_CALL_INACCESSIBLE_WRITE);
 79         *minor_status = 0;
 80 
 81         if (input_name == NULL)
 82                 return (GSS_S_BAD_NAME);
 83 
 84         status = gss_create_empty_oid_set(minor_status, mech_set);
 85         if (status != GSS_S_COMPLETE)
 86                 return (status);
 87         *mech_list = NULL;
 88         status = __gss_get_mechanisms(mech_list, MAX_MECH_OID_PAIRS+1);
 89         if (status != GSS_S_COMPLETE)
 90                 return (status);
 91         for (i = 0; i < MAX_MECH_OID_PAIRS && mech_list[i] != NULL; i++) {
 92                 mechanism = mech_list[i];
 93                 if (__gss_mech_to_oid(mechanism, &mechOid) == GSS_S_COMPLETE) {
 94                         status = gss_inquire_names_for_mech(
 95                                         minor_status,
 96                                         mechOid,
 97                                         &mech_name_types);
 98                         if (status == GSS_S_COMPLETE) {
 99                                 status = gss_display_name(minor_status,
100                                                         input_name,
101                                                         &name_buffer,
102                                                         &name_type);
103 
104                                 (void) gss_release_buffer(NULL, &name_buffer);
105 
106                                 if (status == GSS_S_COMPLETE && name_type) {
107                                         status = gss_test_oid_set_member(
108                                                         minor_status,
109                                                         name_type,
110                                                         mech_name_types,
111                                                         &present);
112                                         if (status == GSS_S_COMPLETE &&
113                                                 present) {
114                                                 status = gss_add_oid_set_member(
115                                                         minor_status,
116                                                         mechOid,
117                                                         mech_set);
118                                                 if (status != GSS_S_COMPLETE) {
119                                                 (void) gss_release_oid_set(
120                                                             minor_status,
121                                                             &mech_name_types);
122                                                 (void) gss_release_oid_set(
123                                                             minor_status,
124                                                             mech_set);
125                                                         return (status);
126                                                 }
127                                         }
128                                 }
129                                 (void) gss_release_oid_set(
130                                         minor_status,
131                                         &mech_name_types);
132                         }
133                 } else {
134                         (void) gss_release_oid_set(
135                                 minor_status,
136                                 mech_set);
137                         return (GSS_S_FAILURE);
138                 }
139         }
140         return (GSS_S_COMPLETE);
141 }