13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 #pragma ident "%Z%%M% %I% %E% SMI"
22
23 /*
24 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
26 *
27 * A module that implements a dummy security mechanism.
28 * It's mainly used to test GSS-API application. Multiple tokens
29 * exchanged during security context establishment can be
30 * specified through dummy_mech.conf located in /etc.
31 *
32 */
33 /* EXPORT DELETE START */ /* CRYPT DELETE START */
34 #ifndef lint
35 #define dummy_gss_accept_sec_context \
36 dummy_867227349
37 #define dummy_gss_acquire_cred \
38 dummy_352458907
39 #define dummy_gss_add_cred \
40 dummy_911432290
41 #define dummy_gss_compare_name \
42 dummy_396663848
43 #define dummy_gss_context_time \
44 dummy_955669998
45 #define dummy_gss_delete_sec_context \
46 dummy_440868788
47 #define dummy_gss_display_name \
48 dummy_999874939
49 #define dummy_gss_display_status \
50 dummy_485073729
51 #define dummy_gss_export_sec_context \
52 dummy_1044079879
53 #define dummy_gss_import_name \
70 dummy_706163968
71 #define dummy_gss_process_context_token \
72 dummy_191395526
73 #define dummy_gss_release_cred \
74 dummy_750368909
75 #define dummy_gss_release_name \
76 dummy_235600467
77 #define dummy_gss_seal \
78 dummy_794573849
79 #define dummy_gss_sign \
80 dummy_279838176
81 #define dummy_gss_unseal \
82 dummy_838778790
83 #define dummy_gss_verify \
84 dummy_324010348
85 #define dummy_gss_wrap_size_limit \
86 dummy_882983731
87 #define dummy_pname_to_uid \
88 dummy_345475423
89 #endif
90 /* EXPORT DELETE END */ /* CRYPT DELETE END */
91
92 #include <stdio.h>
93 #include <stdlib.h>
94 #include <gssapiP_dummy.h>
95 #include <mechglueP.h>
96 #include <gssapi_err_generic.h>
97
98 #define dummy_context_name_len 19
99 /* private routines for dummy_mechanism */
100 static dummy_token_t make_dummy_token(char *name);
101 static void free_dummy_token(dummy_token_t *token);
102 static gss_buffer_desc make_dummy_token_buffer(char *name);
103 static gss_buffer_desc make_dummy_token_msg(void *data, int datalen);
104 static int der_length_size(int length);
105 static void der_write_length(unsigned char ** buf, int length);
106 static int der_read_length(unsigned char **buf, int *bufsize);
107 static int g_token_size(gss_OID mech, unsigned int body_size);
108 static void g_make_token_header(gss_OID mech, int body_size,
109 unsigned char **buf, int tok_type);
110 static int g_verify_token_header(gss_OID mech, int *body_size,
112 int toksize);
113
114
115 /* private global variables */
116 static char dummy_srcname[] = "dummy source";
117 static OM_uint32 dummy_flags;
118 static int token_nums;
119
120 /*
121 * The Mech OID:
122 * { iso(1) org(3) internet(6) dod(1) private(4) enterprises(1) sun(42)
123 * products(2) gssapi(26) mechtypes(1) dummy(2) }
124 */
125 static struct gss_config dummy_mechanism =
126 {{10, "\053\006\001\004\001\052\002\032\001\002"},
127 NULL,
128 dummy_gss_acquire_cred,
129 dummy_gss_release_cred,
130 dummy_gss_init_sec_context,
131 dummy_gss_accept_sec_context,
132 /* EXPORT DELETE START */ /* CRYPT DELETE START */
133 dummy_gss_unseal,
134 /* EXPORT DELETE END */ /* CRYPT DELETE END */
135 dummy_gss_process_context_token,
136 dummy_gss_delete_sec_context,
137 dummy_gss_context_time,
138 dummy_gss_display_status,
139 dummy_gss_indicate_mechs,
140 dummy_gss_compare_name,
141 dummy_gss_display_name,
142 dummy_gss_import_name,
143 dummy_gss_release_name,
144 dummy_gss_inquire_cred,
145 dummy_gss_add_cred,
146 /* EXPORT DELETE START */ /* CRYPT DELETE START */
147 dummy_gss_seal,
148 /* EXPORT DELETE END */ /* CRYPT DELETE END */
149 dummy_gss_export_sec_context,
150 dummy_gss_import_sec_context,
151 dummy_gss_inquire_cred_by_mech,
152 dummy_gss_inquire_names_for_mech,
153 dummy_gss_inquire_context,
154 dummy_gss_internal_release_oid,
155 dummy_gss_wrap_size_limit,
156 dummy_pname_to_uid,
157 NULL, /* __gss_userok */
158 NULL, /* _export name */
159 /* EXPORT DELETE START */
160 /* CRYPT DELETE START */
161 #if 0
162 /* CRYPT DELETE END */
163 dummy_gss_seal,
164 dummy_gss_unseal,
165 /* CRYPT DELETE START */
166 #endif
167 /* CRYPT DELETE END */
168 /* EXPORT DELETE END */
169 dummy_gss_sign,
170 dummy_gss_verify,
171 NULL, /* _store_cred */
172 };
173
174 gss_mechanism
175 gss_mech_initialize(oid)
176 const gss_OID oid;
177 {
178 FILE *fp;
179
180 dprintf("Entering gss_mech_initialize\n");
181
182 if (oid == NULL ||
183 !g_OID_equal(oid, &dummy_mechanism.mech_type)) {
184 fprintf(stderr, "invalid dummy mechanism oid.\n");
185 return (NULL);
186 }
187
188 fp = fopen("/etc/dummy_mech_token.conf", "rF");
|
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 #pragma ident "%Z%%M% %I% %E% SMI"
22
23 /*
24 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
26 *
27 * A module that implements a dummy security mechanism.
28 * It's mainly used to test GSS-API application. Multiple tokens
29 * exchanged during security context establishment can be
30 * specified through dummy_mech.conf located in /etc.
31 *
32 */
33 #ifndef lint
34 #define dummy_gss_accept_sec_context \
35 dummy_867227349
36 #define dummy_gss_acquire_cred \
37 dummy_352458907
38 #define dummy_gss_add_cred \
39 dummy_911432290
40 #define dummy_gss_compare_name \
41 dummy_396663848
42 #define dummy_gss_context_time \
43 dummy_955669998
44 #define dummy_gss_delete_sec_context \
45 dummy_440868788
46 #define dummy_gss_display_name \
47 dummy_999874939
48 #define dummy_gss_display_status \
49 dummy_485073729
50 #define dummy_gss_export_sec_context \
51 dummy_1044079879
52 #define dummy_gss_import_name \
69 dummy_706163968
70 #define dummy_gss_process_context_token \
71 dummy_191395526
72 #define dummy_gss_release_cred \
73 dummy_750368909
74 #define dummy_gss_release_name \
75 dummy_235600467
76 #define dummy_gss_seal \
77 dummy_794573849
78 #define dummy_gss_sign \
79 dummy_279838176
80 #define dummy_gss_unseal \
81 dummy_838778790
82 #define dummy_gss_verify \
83 dummy_324010348
84 #define dummy_gss_wrap_size_limit \
85 dummy_882983731
86 #define dummy_pname_to_uid \
87 dummy_345475423
88 #endif
89
90 #include <stdio.h>
91 #include <stdlib.h>
92 #include <gssapiP_dummy.h>
93 #include <mechglueP.h>
94 #include <gssapi_err_generic.h>
95
96 #define dummy_context_name_len 19
97 /* private routines for dummy_mechanism */
98 static dummy_token_t make_dummy_token(char *name);
99 static void free_dummy_token(dummy_token_t *token);
100 static gss_buffer_desc make_dummy_token_buffer(char *name);
101 static gss_buffer_desc make_dummy_token_msg(void *data, int datalen);
102 static int der_length_size(int length);
103 static void der_write_length(unsigned char ** buf, int length);
104 static int der_read_length(unsigned char **buf, int *bufsize);
105 static int g_token_size(gss_OID mech, unsigned int body_size);
106 static void g_make_token_header(gss_OID mech, int body_size,
107 unsigned char **buf, int tok_type);
108 static int g_verify_token_header(gss_OID mech, int *body_size,
110 int toksize);
111
112
113 /* private global variables */
114 static char dummy_srcname[] = "dummy source";
115 static OM_uint32 dummy_flags;
116 static int token_nums;
117
118 /*
119 * The Mech OID:
120 * { iso(1) org(3) internet(6) dod(1) private(4) enterprises(1) sun(42)
121 * products(2) gssapi(26) mechtypes(1) dummy(2) }
122 */
123 static struct gss_config dummy_mechanism =
124 {{10, "\053\006\001\004\001\052\002\032\001\002"},
125 NULL,
126 dummy_gss_acquire_cred,
127 dummy_gss_release_cred,
128 dummy_gss_init_sec_context,
129 dummy_gss_accept_sec_context,
130 dummy_gss_unseal,
131 dummy_gss_process_context_token,
132 dummy_gss_delete_sec_context,
133 dummy_gss_context_time,
134 dummy_gss_display_status,
135 dummy_gss_indicate_mechs,
136 dummy_gss_compare_name,
137 dummy_gss_display_name,
138 dummy_gss_import_name,
139 dummy_gss_release_name,
140 dummy_gss_inquire_cred,
141 dummy_gss_add_cred,
142 dummy_gss_seal,
143 dummy_gss_export_sec_context,
144 dummy_gss_import_sec_context,
145 dummy_gss_inquire_cred_by_mech,
146 dummy_gss_inquire_names_for_mech,
147 dummy_gss_inquire_context,
148 dummy_gss_internal_release_oid,
149 dummy_gss_wrap_size_limit,
150 dummy_pname_to_uid,
151 NULL, /* __gss_userok */
152 NULL, /* _export name */
153 dummy_gss_sign,
154 dummy_gss_verify,
155 NULL, /* _store_cred */
156 };
157
158 gss_mechanism
159 gss_mech_initialize(oid)
160 const gss_OID oid;
161 {
162 FILE *fp;
163
164 dprintf("Entering gss_mech_initialize\n");
165
166 if (oid == NULL ||
167 !g_OID_equal(oid, &dummy_mechanism.mech_type)) {
168 fprintf(stderr, "invalid dummy mechanism oid.\n");
169 return (NULL);
170 }
171
172 fp = fopen("/etc/dummy_mech_token.conf", "rF");
|