--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/security/sasl/gsskerb/FactoryImpl.java Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2000-2006 Sun Microsystems, Inc. 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.security.sasl.gsskerb;
+
+import javax.security.sasl.*;
+import com.sun.security.sasl.util.PolicyUtils;
+
+import java.util.Map;
+import javax.security.auth.callback.CallbackHandler;
+
+/**
+ * Client/server factory for GSSAPI (Kerberos V5) SASL client/server mechs.
+ * See GssKrb5Client/GssKrb5Server for input requirements.
+ *
+ * @author Rosanna Lee
+ */
+public final class FactoryImpl implements SaslClientFactory, SaslServerFactory {
+ private static final String myMechs[] = {
+ "GSSAPI"};
+
+ private static final int mechPolicies[] = {
+ PolicyUtils.NOPLAINTEXT|PolicyUtils.NOANONYMOUS|PolicyUtils.NOACTIVE
+ };
+
+ private static final int GSS_KERB_V5 = 0;
+
+ public FactoryImpl() {
+ }
+
+ public SaslClient createSaslClient(String[] mechs,
+ String authorizationId,
+ String protocol,
+ String serverName,
+ Map<String,?> props,
+ CallbackHandler cbh) throws SaslException {
+
+ for (int i = 0; i < mechs.length; i++) {
+ if (mechs[i].equals(myMechs[GSS_KERB_V5])
+ && PolicyUtils.checkPolicy(mechPolicies[GSS_KERB_V5], props)) {
+ return new GssKrb5Client(
+ authorizationId,
+ protocol,
+ serverName,
+ props,
+ cbh);
+ }
+ }
+ return null;
+ };
+
+ public SaslServer createSaslServer(String mech,
+ String protocol,
+ String serverName,
+ Map<String,?> props,
+ CallbackHandler cbh) throws SaslException {
+ if (mech.equals(myMechs[GSS_KERB_V5])
+ && PolicyUtils.checkPolicy(mechPolicies[GSS_KERB_V5], props)) {
+ if (cbh == null) {
+ throw new SaslException(
+ "Callback handler with support for AuthorizeCallback required");
+ }
+ return new GssKrb5Server(
+ protocol,
+ serverName,
+ props,
+ cbh);
+ }
+ return null;
+ };
+
+ public String[] getMechanismNames(Map<String,?> props) {
+ return PolicyUtils.filterMechs(myMechs, mechPolicies, props);
+ }
+}