Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.security.jgss/share/native/libj2gss/NativeFunc.c
41149 views
1
/*
2
* Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
#include <stdio.h>
27
#include <stdlib.h>
28
#include "NativeFunc.h"
29
30
/* global GSS function table */
31
GSS_FUNCTION_TABLE_PTR ftab;
32
33
/* standard GSS method names (ordering is from mapfile) */
34
static const char RELEASE_NAME[] = "gss_release_name";
35
static const char IMPORT_NAME[] = "gss_import_name";
36
static const char COMPARE_NAME[] = "gss_compare_name";
37
static const char CANONICALIZE_NAME[] = "gss_canonicalize_name";
38
static const char EXPORT_NAME[] = "gss_export_name";
39
static const char DISPLAY_NAME[] = "gss_display_name";
40
static const char ACQUIRE_CRED[] = "gss_acquire_cred";
41
static const char RELEASE_CRED[] = "gss_release_cred";
42
static const char INQUIRE_CRED[] = "gss_inquire_cred";
43
static const char IMPORT_SEC_CONTEXT[] = "gss_import_sec_context";
44
static const char INIT_SEC_CONTEXT[] = "gss_init_sec_context";
45
static const char ACCEPT_SEC_CONTEXT[] = "gss_accept_sec_context";
46
static const char INQUIRE_CONTEXT[] = "gss_inquire_context";
47
static const char DELETE_SEC_CONTEXT[] = "gss_delete_sec_context";
48
static const char CONTEXT_TIME[] = "gss_context_time";
49
static const char WRAP_SIZE_LIMIT[] = "gss_wrap_size_limit";
50
static const char EXPORT_SEC_CONTEXT[] = "gss_export_sec_context";
51
static const char GET_MIC[] = "gss_get_mic";
52
static const char VERIFY_MIC[] = "gss_verify_mic";
53
static const char WRAP[] = "gss_wrap";
54
static const char UNWRAP[] = "gss_unwrap";
55
static const char INDICATE_MECHS[] = "gss_indicate_mechs";
56
static const char INQUIRE_NAMES_FOR_MECH[] = "gss_inquire_names_for_mech";
57
58
/* additional GSS methods not public thru mapfile */
59
60
static const char ADD_OID_SET_MEMBER[] = "gss_add_oid_set_member";
61
static const char DISPLAY_STATUS[] = "gss_display_status";
62
static const char CREATE_EMPTY_OID_SET[] = "gss_create_empty_oid_set";
63
static const char RELEASE_OID_SET[] = "gss_release_oid_set";
64
static const char RELEASE_BUFFER[] = "gss_release_buffer";
65
66
/**
67
* Initialize native GSS function pointers
68
*/
69
int loadNative(const char *libName) {
70
71
void *gssLib;
72
int failed;
73
OM_uint32 minor, major;
74
75
ftab = NULL;
76
failed = FALSE;
77
78
gssLib = GETLIB(libName);
79
if (gssLib == NULL) {
80
failed = TRUE;
81
goto out;
82
}
83
84
/* global function table instance */
85
ftab = (GSS_FUNCTION_TABLE_PTR)malloc(sizeof(GSS_FUNCTION_TABLE));
86
if (ftab == NULL) {
87
failed = TRUE;
88
goto out;
89
}
90
91
ftab->releaseName = (RELEASE_NAME_FN_PTR)GETFUNC(gssLib, RELEASE_NAME);
92
if (ftab->releaseName == NULL) {
93
failed = TRUE;
94
goto out;
95
}
96
97
ftab->importName = (IMPORT_NAME_FN_PTR)GETFUNC(gssLib, IMPORT_NAME);
98
if (ftab->importName == NULL) {
99
failed = TRUE;
100
goto out;
101
}
102
103
ftab->compareName = (COMPARE_NAME_FN_PTR)GETFUNC(gssLib, COMPARE_NAME);
104
if (ftab->compareName == NULL) {
105
failed = TRUE;
106
goto out;
107
}
108
109
ftab->canonicalizeName = (CANONICALIZE_NAME_FN_PTR)
110
GETFUNC(gssLib, CANONICALIZE_NAME);
111
if (ftab->canonicalizeName == NULL) {
112
failed = TRUE;
113
goto out;
114
}
115
116
ftab->exportName = (EXPORT_NAME_FN_PTR)GETFUNC(gssLib, EXPORT_NAME);
117
if (ftab->exportName == NULL) {
118
failed = TRUE;
119
goto out;
120
}
121
122
ftab->displayName = (DISPLAY_NAME_FN_PTR)GETFUNC(gssLib, DISPLAY_NAME);
123
if (ftab->displayName == NULL) {
124
failed = TRUE;
125
goto out;
126
}
127
128
ftab->acquireCred = (ACQUIRE_CRED_FN_PTR)GETFUNC(gssLib, ACQUIRE_CRED);
129
if (ftab->acquireCred == NULL) {
130
failed = TRUE;
131
goto out;
132
}
133
134
ftab->releaseCred = (RELEASE_CRED_FN_PTR)GETFUNC(gssLib, RELEASE_CRED);
135
if (ftab->releaseCred == NULL) {
136
failed = TRUE;
137
goto out;
138
}
139
140
ftab->inquireCred = (INQUIRE_CRED_FN_PTR)GETFUNC(gssLib, INQUIRE_CRED);
141
if (ftab->inquireCred == NULL) {
142
failed = TRUE;
143
goto out;
144
}
145
146
ftab->importSecContext = (IMPORT_SEC_CONTEXT_FN_PTR)
147
GETFUNC(gssLib, IMPORT_SEC_CONTEXT);
148
if (ftab->importSecContext == NULL) {
149
failed = TRUE;
150
goto out;
151
}
152
153
ftab->initSecContext = (INIT_SEC_CONTEXT_FN_PTR)
154
GETFUNC(gssLib, INIT_SEC_CONTEXT);
155
if (ftab->initSecContext == NULL) {
156
failed = TRUE;
157
goto out;
158
}
159
160
ftab->acceptSecContext = (ACCEPT_SEC_CONTEXT_FN_PTR)
161
GETFUNC(gssLib, ACCEPT_SEC_CONTEXT);
162
if (ftab->acceptSecContext == NULL) {
163
failed = TRUE;
164
goto out;
165
}
166
167
ftab->inquireContext = (INQUIRE_CONTEXT_FN_PTR)
168
GETFUNC(gssLib, INQUIRE_CONTEXT);
169
if (ftab->inquireContext == NULL) {
170
failed = TRUE;
171
goto out;
172
}
173
174
ftab->deleteSecContext = (DELETE_SEC_CONTEXT_FN_PTR)
175
GETFUNC(gssLib, DELETE_SEC_CONTEXT);
176
if (ftab->deleteSecContext == NULL) {
177
failed = TRUE;
178
goto out;
179
}
180
181
ftab->contextTime = (CONTEXT_TIME_FN_PTR)GETFUNC(gssLib, CONTEXT_TIME);
182
if (ftab->contextTime == NULL) {
183
failed = TRUE;
184
goto out;
185
}
186
187
ftab->wrapSizeLimit = (WRAP_SIZE_LIMIT_FN_PTR)
188
GETFUNC(gssLib, WRAP_SIZE_LIMIT);
189
if (ftab->wrapSizeLimit == NULL) {
190
failed = TRUE;
191
goto out;
192
}
193
194
ftab->exportSecContext = (EXPORT_SEC_CONTEXT_FN_PTR)
195
GETFUNC(gssLib, EXPORT_SEC_CONTEXT);
196
if (ftab->exportSecContext == NULL) {
197
failed = TRUE;
198
goto out;
199
}
200
201
ftab->getMic = (GET_MIC_FN_PTR)GETFUNC(gssLib, GET_MIC);
202
if (ftab->getMic == NULL) {
203
failed = TRUE;
204
goto out;
205
}
206
207
ftab->verifyMic = (VERIFY_MIC_FN_PTR)GETFUNC(gssLib, VERIFY_MIC);
208
if (ftab->verifyMic == NULL) {
209
failed = TRUE;
210
goto out;
211
}
212
213
ftab->wrap = (WRAP_FN_PTR)GETFUNC(gssLib, WRAP);
214
if (ftab->wrap == NULL) {
215
failed = TRUE;
216
goto out;
217
}
218
219
ftab->unwrap = (UNWRAP_FN_PTR)GETFUNC(gssLib, UNWRAP);
220
if (ftab->unwrap == NULL) {
221
failed = TRUE;
222
goto out;
223
}
224
225
ftab->indicateMechs = (INDICATE_MECHS_FN_PTR)GETFUNC(gssLib, INDICATE_MECHS);
226
if (ftab->indicateMechs == NULL) {
227
failed = TRUE;
228
goto out;
229
}
230
231
ftab->inquireNamesForMech = (INQUIRE_NAMES_FOR_MECH_FN_PTR)
232
GETFUNC(gssLib, INQUIRE_NAMES_FOR_MECH);
233
if (ftab->inquireNamesForMech == NULL) {
234
failed = TRUE;
235
goto out;
236
}
237
238
ftab->addOidSetMember = (ADD_OID_SET_MEMBER_FN_PTR)
239
GETFUNC(gssLib, ADD_OID_SET_MEMBER);
240
if (ftab->addOidSetMember == NULL) {
241
failed = TRUE;
242
goto out;
243
}
244
245
ftab->displayStatus = (DISPLAY_STATUS_FN_PTR)
246
GETFUNC(gssLib, DISPLAY_STATUS);
247
if (ftab->displayStatus == NULL) {
248
failed = TRUE;
249
goto out;
250
}
251
252
ftab->createEmptyOidSet = (CREATE_EMPTY_OID_SET_FN_PTR)
253
GETFUNC(gssLib, CREATE_EMPTY_OID_SET);
254
if (ftab->createEmptyOidSet == NULL) {
255
failed = TRUE;
256
goto out;
257
}
258
259
ftab->releaseOidSet = (RELEASE_OID_SET_FN_PTR)
260
GETFUNC(gssLib, RELEASE_OID_SET);
261
if (ftab->releaseOidSet == NULL) {
262
failed = TRUE;
263
goto out;
264
}
265
266
ftab->releaseBuffer = (RELEASE_BUFFER_FN_PTR)
267
GETFUNC(gssLib, RELEASE_BUFFER);
268
if (ftab->releaseBuffer == NULL) {
269
failed = TRUE;
270
goto out;
271
}
272
273
ftab->mechs = GSS_C_NO_OID_SET;
274
major = (*ftab->indicateMechs)(&minor, &(ftab->mechs));
275
if (ftab->mechs == NULL || ftab->mechs == GSS_C_NO_OID_SET) {
276
failed = TRUE;
277
goto out;
278
}
279
280
281
out:
282
if (failed == TRUE) {
283
if (gssLib != NULL) CLOSELIB(gssLib);
284
if (ftab != NULL) free(ftab);
285
}
286
return failed;
287
}
288
289