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 }
|