mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			502 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			502 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* GSSManager.java -- manager class for the GSS-API.
 | |
|    Copyright (C) 2004 Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath 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 for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version.
 | |
| 
 | |
|    The documentation comments of this class are derived from the text
 | |
|    of RFC 2853:  Generic Security Service API Version 2: Java Bindings.
 | |
|    That document is covered under the following license notice:
 | |
| 
 | |
| Copyright (C) The Internet Society (2000).  All Rights Reserved.
 | |
| 
 | |
| This document and translations of it may be copied and furnished to
 | |
| others, and derivative works that comment on or otherwise explain it
 | |
| or assist in its implementation may be prepared, copied, published and
 | |
| distributed, in whole or in part, without restriction of any kind,
 | |
| provided that the above copyright notice and this paragraph are
 | |
| included on all such copies and derivative works.  However, this
 | |
| document itself may not be modified in any way, such as by removing
 | |
| the copyright notice or references to the Internet Society or other
 | |
| Internet organizations, except as needed for the purpose of developing
 | |
| Internet standards in which case the procedures for copyrights defined
 | |
| in the Internet Standards process must be followed, or as required to
 | |
| translate it into languages other than English.
 | |
| 
 | |
| The limited permissions granted above are perpetual and will not be
 | |
| revoked by the Internet Society or its successors or assigns.
 | |
| 
 | |
| This document and the information contained herein is provided on an
 | |
| "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
 | |
| TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
 | |
| NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN
 | |
| WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
 | |
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. */
 | |
| 
 | |
| 
 | |
| package org.ietf.jgss;
 | |
| 
 | |
| import java.security.Provider;
 | |
| import java.security.Security;
 | |
| 
 | |
| /**
 | |
|  * <p>The GSSManager class is an abstract class that serves as a factory
 | |
|  * for three GSS interfaces: {@link GSSName}, {@link GSSCredential}, and
 | |
|  * {@link GSSContext}. It also provides methods for applications to determine
 | |
|  * what mechanisms are available from the GSS implementation and what
 | |
|  * nametypes these mechanisms support. An instance of the default GSSManager
 | |
|  * subclass may be obtained through the static method {@link #getInstance()},
 | |
|  * but applications are free to instantiate other subclasses of GSSManager.</p>
 | |
|  *
 | |
|  * <p>All but one method in this class are declared abstract. This means
 | |
|  * that subclasses have to provide the complete implementation for those
 | |
|  * methods. The only exception to this is the static method {@link
 | |
|  * #getInstance()} which will have platform specific code to return an
 | |
|  * instance of the default subclass.</p>
 | |
|  *
 | |
|  * <p>Platform providers of GSS are required not to add any constructors to
 | |
|  * this class, private, public, or protected. This will ensure that all
 | |
|  * subclasses invoke only the default constructor provided to the base
 | |
|  * class by the compiler.</p>
 | |
|  *
 | |
|  * <p>A subclass extending the GSSManager abstract class may be implemented
 | |
|  * as a modular provider based layer that utilizes some well known
 | |
|  * service provider specification. The GSSManager API provides the
 | |
|  * application with methods to set provider preferences on such an
 | |
|  * implementation. These methods also allow the implementation to throw
 | |
|  * a well-defined exception in case provider based configuration is not
 | |
|  * supported. Applications that expect to be portable should be aware of
 | |
|  * this and recover cleanly by catching the exception.</p>
 | |
|  *
 | |
|  * <p>It is envisioned that there will be three most common ways in which
 | |
|  * providers will be used:</p>
 | |
|  *
 | |
|  * <ol>
 | |
|  * <li>The application does not care about what provider is used (the
 | |
|  * default case).</li>
 | |
|  *
 | |
|  * <li>The application wants a particular provider to be used
 | |
|  * preferentially, either for a particular mechanism or all the
 | |
|  * time, irrespective of mechanism.</li>
 | |
|  *
 | |
|  * <li>The application wants to use the locally configured providers
 | |
|  * as far as possible but if support is missing for one or more
 | |
|  * mechanisms then it wants to fall back on its own provider.</li>
 | |
|  * </ol>
 | |
|  *
 | |
|  * <p>The GSSManager class has two methods that enable these modes of
 | |
|  * usage: {@link #addProviderAtFront(java.security.Provider,org.ietf.jgss.Oid)}
 | |
|  * and {@link #addProviderAtEnd(java.security.Provider,org.ietf.jgss.Oid)}.
 | |
|  * These methods have the effect of creating an ordered list of
 | |
|  * (<i>provider</i>, <i>oid</i>) pairs where each pair indicates a preference
 | |
|  * of provider for a given oid.</p>
 | |
|  *
 | |
|  * <p>The use of these methods does not require any knowledge of whatever
 | |
|  * service provider specification the GSSManager subclass follows. It is
 | |
|  * hoped that these methods will serve the needs of most applications.
 | |
|  * Additional methods may be added to an extended GSSManager that could
 | |
|  * be part of a service provider specification that is standardized
 | |
|  * later.</p>
 | |
|  *
 | |
|  * <h3>Example Code</h3>
 | |
|  *
 | |
|  * <pre>
 | |
| GSSManager mgr = GSSManager.getInstance();
 | |
| 
 | |
| // What mechs are available to us?
 | |
| Oid[] supportedMechs = mgr.getMechs();
 | |
| 
 | |
| // Set a preference for the provider to be used when support is needed
 | |
| // for the mechanisms "1.2.840.113554.1.2.2" and "1.3.6.1.5.5.1.1".
 | |
| 
 | |
| Oid krb = new Oid("1.2.840.113554.1.2.2");
 | |
| Oid spkm1 = new Oid("1.3.6.1.5.5.1.1");
 | |
| 
 | |
| Provider p = (Provider) (new com.foo.security.Provider());
 | |
| 
 | |
| mgr.addProviderAtFront(p, krb);
 | |
| mgr.addProviderAtFront(p, spkm1);
 | |
| 
 | |
| // What name types does this spkm implementation support?
 | |
| Oid[] nameTypes = mgr.getNamesForMech(spkm1);
 | |
| </pre>
 | |
|  */
 | |
| public abstract class GSSManager
 | |
| {
 | |
| 
 | |
|   // Constructor.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   public GSSManager()
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   // Class method.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   /**
 | |
|    * Returns the default GSSManager implementation.
 | |
|    *
 | |
|    * @return The default GSSManager implementation.
 | |
|    */
 | |
|   public static synchronized GSSManager getInstance()
 | |
|   {
 | |
|     String impl = Security.getProperty("org.ietf.jgss.GSSManager");
 | |
|     if (impl == null)
 | |
|       impl = "gnu.crypto.gssapi.GSSManagerImpl";
 | |
|     try
 | |
|       {
 | |
|         ClassLoader loader = GSSManager.class.getClassLoader();
 | |
|         if (loader == null)
 | |
|           loader = ClassLoader.getSystemClassLoader();
 | |
|         Class<?> c = loader.loadClass(impl);
 | |
|         return (GSSManager) c.newInstance();
 | |
|       }
 | |
|     catch (Exception x)
 | |
|       {
 | |
|         throw new RuntimeException(x.toString());
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   // Abstract methods.
 | |
|   // -------------------------------------------------------------------------
 | |
| 
 | |
|   /**
 | |
|    * <p>This method is used to indicate to the GSSManager that the
 | |
|    * application would like a particular provider to be used if no other
 | |
|    * provider can be found that supports the given mechanism. When a value
 | |
|    * of null is used instead of an Oid for the mechanism, the GSSManager
 | |
|    * must use the indicated provider for any mechanism.</p>
 | |
|    *
 | |
|    * <p>Calling this method repeatedly preserves the older settings but
 | |
|    * raises them above newer ones in preference thus forming an ordered
 | |
|    * list of providers and Oid pairs that grows at the bottom. Thus the
 | |
|    * older provider settings will be utilized first before this one is.</p>
 | |
|    *
 | |
|    * <p>If there are any previously existing preferences that conflict with
 | |
|    * the preference being set here, then the GSSManager should ignore this
 | |
|    * request.</p>
 | |
|    *
 | |
|    * <p>If the GSSManager implementation does not support an SPI with a
 | |
|    * pluggable provider architecture it should throw a GSSException with
 | |
|    * the status code {@link GSSException#UNAVAILABLE} to indicate that the
 | |
|    * operation is unavailable.</p>
 | |
|    *
 | |
|    * @param p    The provider instance that should be used whenever
 | |
|    *             support is needed for <i>mech</i>.
 | |
|    * @param mech The mechanism for which the provider is being set.
 | |
|    * @throws GSSException If this service is unavailable.
 | |
|    */
 | |
|   public abstract void addProviderAtEnd(Provider p, Oid mech)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * <p>This method is used to indicate to the GSSManager that the
 | |
|    * application would like a particular provider to be used ahead of all
 | |
|    * others when support is desired for the given mechanism. When a value
 | |
|    * of null is used instead of an Oid for the mechanism, the GSSManager
 | |
|    * must use the indicated provider ahead of all others no matter what
 | |
|    * the mechanism is. Only when the indicated provider does not support
 | |
|    * the needed mechanism should the GSSManager move on to a different
 | |
|    * provider.</p>
 | |
|    *
 | |
|    * <p>Calling this method repeatedly preserves the older settings but
 | |
|    * lowers them in preference thus forming an ordered list of provider
 | |
|    * and Oid pairs that grows at the top.</p>
 | |
|    *
 | |
|    * <p>Calling addProviderAtFront with a null Oid will remove all previous
 | |
|    * preferences that were set for this provider in the GSSManager
 | |
|    * instance. Calling addProviderAtFront with a non-null Oid will remove
 | |
|    * any previous preference that was set using this mechanism and this
 | |
|    * provider together.</p>
 | |
|    *
 | |
|    * <p>If the GSSManager implementation does not support an SPI with a
 | |
|    * pluggable provider architecture it should throw a GSSException with
 | |
|    * the status code {@link GSSException#UNAVAILABLE} to indicate that the
 | |
|    * operation is unavailable.</p>
 | |
|    *
 | |
|    * @param p    The provider instance that should be used whenever
 | |
|    *             support is needed for <i>mech</i>.
 | |
|    * @param mech The mechanism for which the provider is being set.
 | |
|    * @throws GSSException If this service is unavailable.
 | |
|    */
 | |
|   public abstract void addProviderAtFront(Provider p, Oid mech)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method for creating a previously exported context.  The
 | |
|    * context properties will be determined from the input token and can't
 | |
|    * be modified through the set methods.
 | |
|    *
 | |
|    * @param interProcessToken The token previously emitted from the
 | |
|    *                          export method.
 | |
|    * @return The context.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSContext createContext(byte[] interProcessToken)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method for creating a context on the acceptor' side.  The
 | |
|    * context's properties will be determined from the input token supplied
 | |
|    * to the accept method.
 | |
|    *
 | |
|    * @param myCred Credentials for the acceptor.  Use <code>null</code> to
 | |
|    *               act as a default acceptor principal.
 | |
|    * @return The context.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSContext createContext(GSSCredential myCred)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method for creating a context on the initiator's side.
 | |
|    * Context flags may be modified through the mutator methods prior to
 | |
|    * calling {@link
 | |
|    * GSSContext#initSecContext(java.io.InputStream,java.io.OutputStream)}.
 | |
|    *
 | |
|    * @param peer     Name of the target peer.
 | |
|    * @param mech     Oid of the desired mechanism.  Use <code>null</code>
 | |
|    *                 to request default mechanism.
 | |
|    * @param myCred   Credentials of the initiator.  Use <code>null</code>
 | |
|    *                 default initiator principal.
 | |
|    * @param lifetime The request lifetime, in seconds, for the context.
 | |
|    *                 Use {@link GSSContext#INDEFINITE_LIFETIME} and
 | |
|    *                 {@link GSSContext#DEFAULT_LIFETIME} to request
 | |
|    *                 indefinite or default context lifetime.
 | |
|    * @return The context.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSContext createContext(GSSName peer, Oid mech,
 | |
|                                            GSSCredential myCred, int lifetime)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method for acquiring default credentials.  This will cause
 | |
|    * the GSS-API to use system specific defaults for the set of
 | |
|    * mechanisms, name, and a DEFAULT lifetime.
 | |
|    *
 | |
|    * @param usage The intended usage for this credential object.  The
 | |
|    *              value of this parameter must be one of:
 | |
|    *              {@link GSSCredential#ACCEPT_AND_INITIATE},
 | |
|    *              {@link GSSCredential#ACCEPT_ONLY},
 | |
|    *              {@link GSSCredential#INITIATE_ONLY}.
 | |
|    * @return The credential.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSCredential createCredential(int usage) throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method for acquiring a single mechanism credential.
 | |
|    *
 | |
|    * @param aName    Name of the principal for whom this credential is to
 | |
|    *                 be acquired.  Use <code>null</code> to specify the
 | |
|    *                 default principal.
 | |
|    * @param lifetime The number of seconds that credentials should remain
 | |
|    *                 valid.  Use {@link GSSCredential#INDEFINITE_LIFETIME}
 | |
|    *                 to request that the credentials have the maximum
 | |
|    *                 permitted lifetime.  Use {@link
 | |
|    *                 GSSCredential#DEFAULT_LIFETIME} to request default
 | |
|    *                 credential lifetime.
 | |
|    * @param mech     The oid of the desired mechanism.  Use <code>null</code>
 | |
|    *                 to request the default mechanism(s).
 | |
|    * @param usage    The intended usage for this credential object.  The
 | |
|    *                 value of this parameter must be one of:
 | |
|    *                 {@link GSSCredential#ACCEPT_AND_INITIATE},
 | |
|    *                 {@link GSSCredential#ACCEPT_ONLY},
 | |
|    *                 {@link GSSCredential#INITIATE_ONLY}.
 | |
|    * @return The credential.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSCredential createCredential(GSSName aName, int lifetime,
 | |
|                                                  Oid mech, int usage)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method for acquiring credentials over a set of mechanisms.
 | |
|    * Acquires credentials for each of the mechanisms specified in the
 | |
|    * array called mechs.  To determine the list of mechanisms' for which
 | |
|    * the acquisition of credentials succeeded, the caller should use the
 | |
|    * {@link GSSCredential#getMechs()} method.
 | |
|    *
 | |
|    * @param aName    Name of the principal for whom this credential is to
 | |
|    *                 be acquired.  Use <code>null</code> to specify the
 | |
|    *                 default principal.
 | |
|    * @param lifetime The number of seconds that credentials should remain
 | |
|    *                 valid.  Use {@link GSSCredential#INDEFINITE_LIFETIME}
 | |
|    *                 to request that the credentials have the maximum
 | |
|    *                 permitted lifetime.  Use {@link
 | |
|    *                 GSSCredential#DEFAULT_LIFETIME} to request default
 | |
|    *                 credential lifetime.
 | |
|    * @param mechs    The array of mechanisms over which the credential is
 | |
|    *                 to be acquired.  Use <code>null</code> for requesting
 | |
|    *                 a system specific default set of mechanisms.
 | |
|    * @param usage    The intended usage for this credential object.  The
 | |
|    *                 value of this parameter must be one of:
 | |
|    *                 {@link GSSCredential#ACCEPT_AND_INITIATE},
 | |
|    *                 {@link GSSCredential#ACCEPT_ONLY},
 | |
|    *                 {@link GSSCredential#INITIATE_ONLY}.
 | |
|    * @return The credential.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSCredential createCredential(GSSName aName, int lifetime,
 | |
|                                                  Oid[] mechs, int usage)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method to convert a contiguous byte array containing a name
 | |
|    * from the specified namespace to a {@link GSSName} object.  In general,
 | |
|    * the {@link GSSName} object created will not be an MN; two examples that
 | |
|    * are exceptions to this are when the namespace type parameter indicates
 | |
|    * {@link GSSName#NT_EXPORT_NAME} or when the GSS-API implementation is not
 | |
|    * multi-mechanism.
 | |
|    *
 | |
|    * @param name     The byte array containing the name to create.
 | |
|    * @param nameType The Oid specifying the namespace of the name supplied
 | |
|    *                 in the byte array.  Note that nameType serves to
 | |
|    *                 describe and qualify the interpretation of the input
 | |
|    *                 name byte array, it does not necessarily imply a type
 | |
|    *                 for the output GSSName implementation. "null" value
 | |
|    *                 can be used to specify that a mechanism specific
 | |
|    *                 default syntax should be assumed by each mechanism
 | |
|    *                 that examines the byte array.
 | |
|    * @return The name.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSName createName(byte[] name, Oid nameType)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method to convert a contiguous byte array containing a name
 | |
|    * from the specified namespace to a GSSName object that is an MN.  In
 | |
|    * other words, this method is a utility that does the equivalent of two
 | |
|    * steps: {@link #createName(byte[],org.ietf.jgss.Oid)} and then also
 | |
|    * {@link GSSName#canonicalize(org.ietf.jgss.Oid)}.
 | |
|    *
 | |
|    * @param name     The byte array representing the name to create.
 | |
|    * @param nameType The Oid specifying the namespace of the name supplied
 | |
|    *                 in the byte array.  Note that nameType serves to
 | |
|    *                 describe and qualify the interpretation of the input
 | |
|    *                 name byte array, it does not necessarily imply a type
 | |
|    *                 for the output GSSName implementation. "null" value
 | |
|    *                 can be used to specify that a mechanism specific
 | |
|    *                 default syntax should be assumed by each mechanism
 | |
|    *                 that examines the byte array.
 | |
|    * @param mech     Oid specifying the mechanism for which this name
 | |
|    *                 should be created.
 | |
|    * @return The name.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSName createName(byte[] name, Oid nameType, Oid mech)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method to convert a contiguous string name from the specified
 | |
|    * namespace to a {@link GSSName} object.  In general, the {@link GSSName}
 | |
|    * object created will not be an MN; two examples that are exceptions to
 | |
|    * this are when the namespace type parameter indicates {@link
 | |
|    * GSSName#NT_EXPORT_NAME} or when the GSS-API implementation is not
 | |
|    * multi-mechanism.
 | |
|    *
 | |
|    * @param nameStr  The string representing a printable form of the name
 | |
|    *                 to create.
 | |
|    * @param nameType The Oid specifying the namespace of the printable name
 | |
|    *                 supplied. Note that nameType serves to describe and
 | |
|    *                 qualify the interpretation of the input nameStr, it
 | |
|    *                 does not necessarily imply a type for the output
 | |
|    *                 GSSName implementation. "null" value can be used to
 | |
|    *                 specify that a mechanism specific default printable
 | |
|    *                 syntax should be assumed by each mechanism that
 | |
|    *                 examines nameStr.
 | |
|    * @return The name.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSName createName(String nameStr, Oid nameType)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Factory method to convert a contiguous string name from the specified
 | |
|    * namespace to an GSSName object that is a mechanism name (MN).  In
 | |
|    * other words, this method is a utility that does the equivalent of two
 | |
|    * steps: the {@link #createName(java.lang.String,org.ietf.jgss.Oid)}
 | |
|    * and then also {@link GSSName#canonicalize(org.ietf.jgss.Oid)}.
 | |
|    *
 | |
|    * @param nameStr  The string representing a printable form of the name
 | |
|    *                 to create.
 | |
|    * @param nameType The Oid specifying the namespace of the printable name
 | |
|    *                 supplied.  Note that nameType serves to describe and
 | |
|    *                 qualify the interpretation of the input nameStr, it
 | |
|    *                 does not necessarily imply a type for the output
 | |
|    *                 GSSName implementation. "null" value can be used to
 | |
|    *                 specify that a mechanism specific default printable
 | |
|    *                 syntax should be assumed when the mechanism examines
 | |
|    *                 nameStr.
 | |
|    * @param mech     Oid specifying the mechanism for which this name
 | |
|    *                 should be created.
 | |
|    * @return The name.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract GSSName createName(String nameStr, Oid nameType, Oid mech)
 | |
|     throws GSSException;
 | |
| 
 | |
|   /**
 | |
|    * Returns an array of {@link Oid} objects indicating mechanisms available
 | |
|    * to GSS-API callers.  A <code>null</code> value is returned when no
 | |
|    * mechanism are available (an example of this would be when mechanism are
 | |
|    * dynamically configured, and currently no mechanisms are installed).
 | |
|    *
 | |
|    * @return The array of available mechanisms, or <code>null</code>.
 | |
|    */
 | |
|   public abstract Oid[] getMechs();
 | |
| 
 | |
|   /**
 | |
|    * Returns an array of {@link Oid} objects corresponding to the mechanisms
 | |
|    * that support the specific name type. <code>null</code> is returned when
 | |
|    * no mechanisms are found to support the specified name type.
 | |
|    *
 | |
|    * @param name The Oid object for the name type.
 | |
|    * @return The array of mechanisms, or <code>null</code>.
 | |
|    */
 | |
|   public abstract Oid[] getMechsForName(Oid name);
 | |
| 
 | |
|   /**
 | |
|    * Returns name type Oid's supported by the specified mechanism.
 | |
|    *
 | |
|    * @param mechanism The Oid object for the mechanism to query.
 | |
|    * @return The name type Oid's supported by the mechanism.
 | |
|    * @throws GSSException If this operation fails.
 | |
|    */
 | |
|   public abstract Oid[] getNamesForMech(Oid mechanism) throws GSSException;
 | |
| }
 |