blob: a7886cfc6777e0a0077e803a5fd3e401dd1c84ab [file] [log] [blame]
Shuyi Chend7955ce2013-05-22 14:51:55 -07001/*
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 */
20package org.apache.qpid.management.common.sasl;
21
22import org.apache.harmony.javax.security.auth.callback.Callback;
23import org.apache.harmony.javax.security.auth.callback.CallbackHandler;
24import org.apache.harmony.javax.security.auth.callback.NameCallback;
25import org.apache.harmony.javax.security.auth.callback.PasswordCallback;
26import org.apache.harmony.javax.security.auth.callback.UnsupportedCallbackException;
27import java.io.IOException;
28
29public 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}