1 /* 2 * Copyright 2005-2009 Sun Microsystems, Inc. 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. Sun designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 22 * CA 95054 USA or visit www.sun.com if you need additional information or 23 * have any questions. 24 */ 25 26 package sun.net.www.protocol.http.spnego; 27 28 import java.io.IOException; 29 import java.net.Authenticator; 30 import java.net.PasswordAuthentication; 31 import java.util.Arrays; 32 import javax.security.auth.callback.Callback; 33 import javax.security.auth.callback.CallbackHandler; 34 import javax.security.auth.callback.NameCallback; 35 import javax.security.auth.callback.PasswordCallback; 36 import javax.security.auth.callback.UnsupportedCallbackException; 37 import sun.net.www.protocol.http.HttpCallerInfo; 38 39 /** 40 * @since 1.6 41 * Special callback handler used in JGSS for the HttpCaller. 42 */ 43 public class NegotiateCallbackHandler implements CallbackHandler { 44 45 private String username; 46 private char[] password; 47 48 private final HttpCallerInfo hci; 49 50 public NegotiateCallbackHandler(HttpCallerInfo hci) { 51 this.hci = hci; 52 } 53 54 public void handle(Callback[] callbacks) throws 55 UnsupportedCallbackException, IOException { 56 for (int i=0; i<callbacks.length; i++) { 57 Callback callBack = callbacks[i]; 58 59 if (callBack instanceof NameCallback) { 60 if (username == null) { 61 PasswordAuthentication passAuth = 62 Authenticator.requestPasswordAuthentication( 63 hci.host, hci.addr, hci.port, hci.protocol, 64 hci.prompt, hci.scheme, hci.url, hci.authType); 65 username = passAuth.getUserName(); 66 password = passAuth.getPassword(); 67 } 68 NameCallback nameCallback = 69 (NameCallback)callBack; 70 nameCallback.setName(username); 71 72 } else if (callBack instanceof PasswordCallback) { 73 PasswordCallback passwordCallback = 74 (PasswordCallback)callBack; 75 if (password == null) { 76 PasswordAuthentication passAuth = 77 Authenticator.requestPasswordAuthentication( 78 hci.host, hci.addr, hci.port, hci.protocol, 79 hci.prompt, hci.scheme, hci.url, hci.authType); 80 username = passAuth.getUserName(); 81 password = passAuth.getPassword(); 82 } 83 passwordCallback.setPassword(password); 84 Arrays.fill(password, ' '); 85 } else { 86 throw new UnsupportedCallbackException(callBack, 87 "Call back not supported"); 88 } 89 } 90 } 91 }