001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/realm/JAASCallbackHandler.java,v 1.1 2001/11/13 22:42:31 craigmcc Exp $
003: * $Revision: 1.1 $
004: * $Date: 2001/11/13 22:42:31 $
005: *
006: * ====================================================================
007: * The Apache Software License, Version 1.1
008: *
009: * Copyright (c) 1999 The Apache Software Foundation. All rights
010: * reserved.
011: *
012: * Redistribution and use in source and binary forms, with or without
013: * modification, are permitted provided that the following conditions
014: * are met:
015: *
016: * 1. Redistributions of source code must retain the above copyright
017: * notice, this list of conditions and the following disclaimer.
018: *
019: * 2. Redistributions in binary form must reproduce the above copyright
020: * notice, this list of conditions and the following disclaimer in
021: * the documentation and/or other materials provided with the
022: * distribution.
023: *
024: * 3. The end-user documentation included with the redistribution, if
025: * any, must include the following acknowlegement:
026: * "This product includes software developed by the
027: * Apache Software Foundation (http://www.apache.org/)."
028: * Alternately, this acknowlegement may appear in the software itself,
029: * if and wherever such third-party acknowlegements normally appear.
030: *
031: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
032: * Foundation" must not be used to endorse or promote products derived
033: * from this software without prior written permission. For written
034: * permission, please contact apache@apache.org.
035: *
036: * 5. Products derived from this software may not be called "Apache"
037: * nor may "Apache" appear in their names without prior written
038: * permission of the Apache Group.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
044: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
045: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
046: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Apache Software Foundation. For more
056: * information on the Apache Software Foundation, please see
057: * <http://www.apache.org/>.
058: *
059: * [Additional notices, if required by prior licensing conditions]
060: *
061: */
062:
063: package org.apache.catalina.realm;
064:
065: import java.io.IOException;
066: import javax.security.auth.callback.Callback;
067: import javax.security.auth.callback.CallbackHandler;
068: import javax.security.auth.callback.NameCallback;
069: import javax.security.auth.callback.PasswordCallback;
070: import javax.security.auth.callback.UnsupportedCallbackException;
071:
072: /**
073: * <p>Implementation of the JAAS <strong>CallbackHandler</code> interface,
074: * used to negotiate delivery of the username and credentials that were
075: * specified to our constructor. No interaction with the user is required
076: * (or possible).</p>
077: *
078: * @author Craig R. McClanahan
079: * @version $Revision: 1.1 $ $Date: 2001/11/13 22:42:31 $
080: */
081:
082: public class JAASCallbackHandler implements CallbackHandler {
083:
084: // ------------------------------------------------------------ Constructor
085:
086: /**
087: * Construct a callback handler configured with the specified values.
088: *
089: * @param realm Our associated JAASRealm instance
090: * @param username Username to be authenticated with
091: * @param password Password to be authenticated with
092: */
093: public JAASCallbackHandler(JAASRealm realm, String username,
094: String password) {
095:
096: super ();
097: this .realm = realm;
098: this .username = username;
099: this .password = password;
100:
101: }
102:
103: // ----------------------------------------------------- Instance Variables
104:
105: /**
106: * The password to be authenticated with.
107: */
108: protected String password = null;
109:
110: /**
111: * The associated <code>JAASRealm</code> instance.
112: */
113: protected JAASRealm realm = null;
114:
115: /**
116: * The username to be authenticated with.
117: */
118: protected String username = null;
119:
120: // --------------------------------------------------------- Public Methods
121:
122: /**
123: * Retrieve the information requested in the provided Callbacks. This
124: * implementation only recognizes <code>NameCallback</code> and
125: * <code>PasswordCallback</code> instances.
126: *
127: * @param callbacks The set of callbacks to be processed
128: *
129: * @exception IOException if an input/output error occurs
130: * @exception UnsupportedCallbackException if the login method requests
131: * an unsupported callback type
132: */
133: public void handle(Callback callbacks[]) throws IOException,
134: UnsupportedCallbackException {
135:
136: for (int i = 0; i < callbacks.length; i++) {
137:
138: if (callbacks[i] instanceof NameCallback) {
139: if (realm.getDebug() >= 3)
140: realm.log("Returning username " + username);
141: ((NameCallback) callbacks[i]).setName(username);
142: } else if (callbacks[i] instanceof PasswordCallback) {
143: if (realm.getDebug() >= 3)
144: realm.log("Returning password " + password);
145: ((PasswordCallback) callbacks[i]).setPassword(password
146: .toCharArray());
147: } else {
148: throw new UnsupportedCallbackException(callbacks[i]);
149: }
150:
151: }
152:
153: }
154:
155: }
|