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