src/java.security.sasl/share/classes/com/sun/security/sasl/Provider.java

Print this page
7191662: JCE providers should be located via ServiceLoader

*** 1,7 **** /* ! * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 24,88 **** */ package com.sun.security.sasl; import java.security.AccessController; import java.security.PrivilegedAction; /** * The SASL provider. * Provides client support for * - EXTERNAL * - PLAIN * - CRAM-MD5 * - DIGEST-MD5 - * - GSSAPI/Kerberos v5 * - NTLM * And server support for * - CRAM-MD5 * - DIGEST-MD5 - * - GSSAPI/Kerberos v5 * - NTLM */ public final class Provider extends java.security.Provider { private static final long serialVersionUID = 8622598936488630849L; private static final String info = "Sun SASL provider" + "(implements client mechanisms for: " + ! "DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM;" + ! " server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)"; public Provider() { super("SunSASL", 1.9d, info); AccessController.doPrivileged(new PrivilegedAction<Void>() { public Void run() { // Client mechanisms ! put("SaslClientFactory.DIGEST-MD5", ! "com.sun.security.sasl.digest.FactoryImpl"); ! put("SaslClientFactory.NTLM", ! "com.sun.security.sasl.ntlm.FactoryImpl"); ! put("SaslClientFactory.GSSAPI", ! "com.sun.security.sasl.gsskerb.FactoryImpl"); - put("SaslClientFactory.EXTERNAL", - "com.sun.security.sasl.ClientFactoryImpl"); - put("SaslClientFactory.PLAIN", - "com.sun.security.sasl.ClientFactoryImpl"); - put("SaslClientFactory.CRAM-MD5", - "com.sun.security.sasl.ClientFactoryImpl"); - // Server mechanisms ! put("SaslServerFactory.CRAM-MD5", ! "com.sun.security.sasl.ServerFactoryImpl"); ! put("SaslServerFactory.GSSAPI", ! "com.sun.security.sasl.gsskerb.FactoryImpl"); ! put("SaslServerFactory.DIGEST-MD5", ! "com.sun.security.sasl.digest.FactoryImpl"); ! put("SaslServerFactory.NTLM", ! "com.sun.security.sasl.ntlm.FactoryImpl"); return null; } }); } } --- 24,129 ---- */ package com.sun.security.sasl; import java.security.AccessController; import java.security.PrivilegedAction; + import java.security.NoSuchAlgorithmException; + import java.security.InvalidParameterException; + import java.security.ProviderException; /** * The SASL provider. * Provides client support for * - EXTERNAL * - PLAIN * - CRAM-MD5 * - DIGEST-MD5 * - NTLM * And server support for * - CRAM-MD5 * - DIGEST-MD5 * - NTLM */ public final class Provider extends java.security.Provider { private static final long serialVersionUID = 8622598936488630849L; private static final String info = "Sun SASL provider" + "(implements client mechanisms for: " + ! "DIGEST-MD5, EXTERNAL, PLAIN, CRAM-MD5, NTLM;" + ! " server mechanisms for: DIGEST-MD5, CRAM-MD5, NTLM)"; + private static final class ProviderService + extends java.security.Provider.Service { + ProviderService(java.security.Provider p, String type, String algo, + String cn) { + super(p, type, algo, cn, null, null); + } + + @Override + public Object newInstance(Object ctrParamObj) + throws NoSuchAlgorithmException { + String type = getType(); + if (ctrParamObj != null) { + throw new InvalidParameterException + ("constructorParameter not used with " + type + " engines"); + } + + String algo = getAlgorithm(); + try { + // DIGEST-MD5, NTLM uses same impl class for client and server + if (algo.equals("DIGEST-MD5")) { + return new com.sun.security.sasl.digest.FactoryImpl(); + } + if (algo.equals("NTLM")) { + return new com.sun.security.sasl.ntlm.FactoryImpl(); + } + if (type.equals("SaslClientFactory")) { + if (algo.equals("EXTERNAL") || algo.equals("PLAIN") || + algo.equals("CRAM-MD5")) { + return new com.sun.security.sasl.ClientFactoryImpl(); + } + } else if (type.equals("SaslServerFactory")) { + if (algo.equals("CRAM-MD5")) { + return new com.sun.security.sasl.ServerFactoryImpl(); + } + } + } catch (Exception ex) { + throw new NoSuchAlgorithmException("Error constructing " + + type + " for " + algo + " using SunSASL", ex); + } + throw new ProviderException("No impl for " + algo + + " " + type); + } + } + public Provider() { super("SunSASL", 1.9d, info); + final Provider p = this; AccessController.doPrivileged(new PrivilegedAction<Void>() { public Void run() { // Client mechanisms ! putService(new ProviderService(p, "SaslClientFactory", ! "DIGEST-MD5", "com.sun.security.sasl.digest.FactoryImpl")); ! putService(new ProviderService(p, "SaslClientFactory", ! "NTLM", "com.sun.security.sasl.ntlm.FactoryImpl")); ! putService(new ProviderService(p, "SaslClientFactory", ! "EXTERNAL", "com.sun.security.sasl.ClientFactoryImpl")); ! putService(new ProviderService(p, "SaslClientFactory", ! "PLAIN", "com.sun.security.sasl.ClientFactoryImpl")); ! putService(new ProviderService(p, "SaslClientFactory", ! "CRAM-MD5", "com.sun.security.sasl.ClientFactoryImpl")); // Server mechanisms ! putService(new ProviderService(p, "SaslServerFactory", ! "CRAM-MD5", "com.sun.security.sasl.ServerFactoryImpl")); ! putService(new ProviderService(p, "SaslServerFactory", ! "DIGEST-MD5", "com.sun.security.sasl.digest.FactoryImpl")); ! putService(new ProviderService(p, "SaslServerFactory", ! "NTLM", "com.sun.security.sasl.ntlm.FactoryImpl")); return null; } }); } }