jdk/src/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java
changeset 10336 0bb1999251f8
parent 9035 1255eb81cc2f
child 16503 03d7a6155092
equal deleted inserted replaced
10335:3c7eda3ab2f5 10336:0bb1999251f8
    23  * questions.
    23  * questions.
    24  */
    24  */
    25 
    25 
    26 package com.sun.security.auth.module;
    26 package com.sun.security.auth.module;
    27 
    27 
    28 import javax.security.auth.x500.X500Principal;
       
    29 import java.io.File;
    28 import java.io.File;
    30 import java.io.IOException;
    29 import java.io.IOException;
    31 import java.io.InputStream;
    30 import java.io.InputStream;
    32 import java.io.PushbackInputStream;
       
    33 import java.net.MalformedURLException;
    31 import java.net.MalformedURLException;
    34 import java.net.URL;
    32 import java.net.URL;
    35 import java.security.AuthProvider;
    33 import java.security.AuthProvider;
    36 import java.security.GeneralSecurityException;
    34 import java.security.GeneralSecurityException;
    37 import java.security.Key;
    35 import java.security.Key;
    38 import java.security.KeyStore;
    36 import java.security.KeyStore;
    39 import java.security.KeyStoreException;
    37 import java.security.KeyStoreException;
    40 import java.security.NoSuchAlgorithmException;
    38 import java.security.NoSuchAlgorithmException;
    41 import java.security.NoSuchProviderException;
    39 import java.security.NoSuchProviderException;
    42 import java.security.Principal;
       
    43 import java.security.PrivateKey;
    40 import java.security.PrivateKey;
    44 import java.security.Provider;
    41 import java.security.Provider;
    45 import java.security.UnrecoverableKeyException;
    42 import java.security.UnrecoverableKeyException;
    46 import java.security.cert.*;
    43 import java.security.cert.*;
    47 import java.security.cert.X509Certificate;
    44 import java.security.cert.X509Certificate;
    48 import java.util.Arrays;
    45 import java.util.Arrays;
    49 import java.util.Iterator;
    46 import java.util.Iterator;
    50 import java.util.LinkedList;
    47 import java.util.LinkedList;
    51 import java.util.Map;
    48 import java.util.Map;
    52 import java.util.ResourceBundle;
       
    53 import javax.security.auth.Destroyable;
    49 import javax.security.auth.Destroyable;
    54 import javax.security.auth.DestroyFailedException;
    50 import javax.security.auth.DestroyFailedException;
    55 import javax.security.auth.Subject;
       
    56 import javax.security.auth.x500.*;
       
    57 import javax.security.auth.Subject;
    51 import javax.security.auth.Subject;
    58 import javax.security.auth.x500.*;
    52 import javax.security.auth.x500.*;
    59 import javax.security.auth.callback.Callback;
    53 import javax.security.auth.callback.Callback;
    60 import javax.security.auth.callback.CallbackHandler;
    54 import javax.security.auth.callback.CallbackHandler;
    61 import javax.security.auth.callback.ConfirmationCallback;
    55 import javax.security.auth.callback.ConfirmationCallback;
    65 import javax.security.auth.callback.UnsupportedCallbackException;
    59 import javax.security.auth.callback.UnsupportedCallbackException;
    66 import javax.security.auth.login.FailedLoginException;
    60 import javax.security.auth.login.FailedLoginException;
    67 import javax.security.auth.login.LoginException;
    61 import javax.security.auth.login.LoginException;
    68 import javax.security.auth.spi.LoginModule;
    62 import javax.security.auth.spi.LoginModule;
    69 
    63 
    70 import sun.security.util.AuthResources;
       
    71 import sun.security.util.Password;
    64 import sun.security.util.Password;
    72 
    65 
    73 /**
    66 /**
    74  * Provides a JAAS login module that prompts for a key store alias and
    67  * Provides a JAAS login module that prompts for a key store alias and
    75  * populates the subject with the alias's principal and credentials. Stores
    68  * populates the subject with the alias's principal and credentials. Stores
   157                         ConfirmationCallback.OK_CANCEL_OPTION,
   150                         ConfirmationCallback.OK_CANCEL_OPTION,
   158                         ConfirmationCallback.OK);
   151                         ConfirmationCallback.OK);
   159 
   152 
   160     private Subject subject;
   153     private Subject subject;
   161     private CallbackHandler callbackHandler;
   154     private CallbackHandler callbackHandler;
   162     private Map sharedState;
   155     private Map<String, Object> sharedState;
   163     private Map<String, ?> options;
   156     private Map<String, ?> options;
   164 
   157 
   165     private char[] keyStorePassword;
   158     private char[] keyStorePassword;
   166     private char[] privateKeyPassword;
   159     private char[] privateKeyPassword;
   167     private KeyStore keyStore;
   160     private KeyStore keyStore;
   200      *
   193      *
   201      * @param options options specified in the login
   194      * @param options options specified in the login
   202      *                  <code>Configuration</code> for this particular
   195      *                  <code>Configuration</code> for this particular
   203      *                  <code>LoginModule</code>.
   196      *                  <code>LoginModule</code>.
   204      */
   197      */
   205 
   198     // Unchecked warning from (Map<String, Object>)sharedState is safe
       
   199     // since javax.security.auth.login.LoginContext passes a raw HashMap.
       
   200     @SuppressWarnings("unchecked")
   206     public void initialize(Subject subject,
   201     public void initialize(Subject subject,
   207                            CallbackHandler callbackHandler,
   202                            CallbackHandler callbackHandler,
   208                            Map<String,?> sharedState,
   203                            Map<String,?> sharedState,
   209                            Map<String,?> options)
   204                            Map<String,?> options)
   210     {
   205     {
   211         this.subject = subject;
   206         this.subject = subject;
   212         this.callbackHandler = callbackHandler;
   207         this.callbackHandler = callbackHandler;
   213         this.sharedState = sharedState;
   208         this.sharedState = (Map<String, Object>)sharedState;
   214         this.options = options;
   209         this.options = options;
   215 
   210 
   216         processOptions();
   211         processOptions();
   217         status = INITIALIZED;
   212         status = INITIALIZED;
   218     }
   213     }
   335             return true;
   330             return true;
   336         }
   331         }
   337     }
   332     }
   338 
   333 
   339     /** Get the alias and passwords to use for looking up in the KeyStore. */
   334     /** Get the alias and passwords to use for looking up in the KeyStore. */
       
   335     @SuppressWarnings("fallthrough")
   340     private void getAliasAndPasswords(int env) throws LoginException {
   336     private void getAliasAndPasswords(int env) throws LoginException {
   341         if (callbackHandler == null) {
   337         if (callbackHandler == null) {
   342 
   338 
   343             // No callback handler - check for alias and password options
   339             // No callback handler - check for alias and password options
   344 
   340