Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
38923 views
1
/*
2
* Copyright (c) 2005, 2014, 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
package sun.security.jgss.wrapper;
27
28
import java.util.HashMap;
29
import java.security.Provider;
30
import java.security.AccessController;
31
import java.security.PrivilegedAction;
32
import org.ietf.jgss.Oid;
33
import sun.security.action.PutAllAction;
34
35
/**
36
* Defines the Sun NativeGSS provider for plugging in the
37
* native GSS mechanisms to Java GSS.
38
*
39
* List of supported mechanisms depends on the local
40
* machine configuration.
41
*
42
* @author Yu-Ching Valerie Peng
43
*/
44
45
public final class SunNativeProvider extends Provider {
46
47
private static final long serialVersionUID = -238911724858694204L;
48
49
private static final String NAME = "SunNativeGSS";
50
private static final String INFO = "Sun Native GSS provider";
51
private static final String MF_CLASS =
52
"sun.security.jgss.wrapper.NativeGSSFactory";
53
private static final String LIB_PROP = "sun.security.jgss.lib";
54
private static final String DEBUG_PROP = "sun.security.nativegss.debug";
55
private static HashMap<String, String> MECH_MAP;
56
static final Provider INSTANCE = new SunNativeProvider();
57
static boolean DEBUG;
58
static void debug(String message) {
59
if (DEBUG) {
60
if (message == null) {
61
throw new NullPointerException();
62
}
63
System.out.println(NAME + ": " + message);
64
}
65
}
66
67
static {
68
MECH_MAP =
69
AccessController.doPrivileged(
70
new PrivilegedAction<HashMap<String, String>>() {
71
public HashMap<String, String> run() {
72
DEBUG = Boolean.parseBoolean
73
(System.getProperty(DEBUG_PROP));
74
try {
75
System.loadLibrary("j2gss");
76
} catch (Error err) {
77
debug("No j2gss library found!");
78
if (DEBUG) err.printStackTrace();
79
return null;
80
}
81
String gssLibs[] = new String[0];
82
String defaultLib = System.getProperty(LIB_PROP);
83
if (defaultLib == null || defaultLib.trim().equals("")) {
84
String osname = System.getProperty("os.name");
85
if (osname.startsWith("SunOS")) {
86
gssLibs = new String[]{ "libgss.so" };
87
} else if (osname.startsWith("Linux")) {
88
gssLibs = new String[]{
89
"libgssapi.so",
90
"libgssapi_krb5.so",
91
"libgssapi_krb5.so.2",
92
};
93
} else if (osname.contains("OS X")) {
94
gssLibs = new String[]{
95
"libgssapi_krb5.dylib",
96
"/usr/lib/sasl2/libgssapiv2.2.so",
97
};
98
}
99
} else {
100
gssLibs = new String[]{ defaultLib };
101
}
102
for (String libName: gssLibs) {
103
if (GSSLibStub.init(libName, DEBUG)) {
104
debug("Loaded GSS library: " + libName);
105
Oid[] mechs = GSSLibStub.indicateMechs();
106
HashMap<String, String> map =
107
new HashMap<String, String>();
108
for (int i = 0; i < mechs.length; i++) {
109
debug("Native MF for " + mechs[i]);
110
map.put("GssApiMechanism." + mechs[i],
111
MF_CLASS);
112
}
113
return map;
114
}
115
}
116
return null;
117
}
118
});
119
}
120
121
public SunNativeProvider() {
122
/* We are the Sun NativeGSS provider */
123
super(NAME, 1.8d, INFO);
124
125
if (MECH_MAP != null) {
126
AccessController.doPrivileged(new PutAllAction(this, MECH_MAP));
127
}
128
}
129
}
130
131