1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/* 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Licensed to the Apache Software Foundation (ASF) under one 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * or more contributor license agreements. See the NOTICE file 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed with this work for additional information 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * regarding copyright ownership. The ASF licenses this file 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to you under the Apache License, Version 2.0 (the 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * "License"); you may not use this file except in compliance 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * with the License. You may obtain a copy of the License at 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * software distributed under the License is distributed on an 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * KIND, either express or implied. See the License for the 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * specific language governing permissions and limitations 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * under the License. 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.apache.qpid.management.common.sasl; 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.Callback; 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.CallbackHandler; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.NameCallback; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.PasswordCallback; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.UnsupportedCallbackException; 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.IOException; 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class UserPasswordCallbackHandler implements CallbackHandler 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{ 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String user; 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private char[] pwchars; 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public UserPasswordCallbackHandler(String user, String password) 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.user = user; 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.pwchars = password.toCharArray(); 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < callbacks.length; i++) 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (callbacks[i] instanceof NameCallback) 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NameCallback ncb = (NameCallback) callbacks[i]; 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen ncb.setName(user); 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if (callbacks[i] instanceof PasswordCallback) 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen PasswordCallback pcb = (PasswordCallback) callbacks[i]; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen pcb.setPassword(pwchars); 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new UnsupportedCallbackException(callbacks[i]); 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private void clearPassword() 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (pwchars != null) 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0 ; i < pwchars.length ; i++) 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen pwchars[i] = 0; 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen pwchars = null; 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected void finalize() 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen clearPassword(); 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 78