jdk/test/com/sun/security/sasl/ntlm/NTLMTest.java
changeset 25396 5e73c95f95db
parent 6678 fd8832656675
child 30820 0d4717a011d3
equal deleted inserted replaced
25395:4c004dfa3340 25396:5e73c95f95db
    21  * questions.
    21  * questions.
    22  */
    22  */
    23 
    23 
    24 /*
    24 /*
    25  * @test
    25  * @test
    26  * @bug 6911951
    26  * @bug 6911951 7150092
    27  * @summary NTLM should be a supported Java SASL mechanism
    27  * @summary NTLM should be a supported Java SASL mechanism
    28  */
    28  */
    29 import java.io.IOException;
    29 import java.io.IOException;
    30 import javax.security.sasl.*;
    30 import javax.security.sasl.*;
    31 import javax.security.auth.callback.*;
    31 import javax.security.auth.callback.*;
    57 
    57 
    58     public static void main(String[] args) throws Exception {
    58     public static void main(String[] args) throws Exception {
    59 
    59 
    60         checkAuthOnly();
    60         checkAuthOnly();
    61         checkClientNameOverride();
    61         checkClientNameOverride();
    62         checkServerDomainOverride();
       
    63         checkClientDomainOverride();
    62         checkClientDomainOverride();
    64         checkVersions();
    63         checkVersions();
    65         checkClientHostname();
    64         checkClientHostname();
    66     }
    65     }
    67 
    66 
   114         Map<String,Object> pc = new HashMap<>();
   113         Map<String,Object> pc = new HashMap<>();
   115         pc.put("com.sun.security.sasl.ntlm.version", vc);
   114         pc.put("com.sun.security.sasl.ntlm.version", vc);
   116         Map<String,Object> ps = new HashMap<>();
   115         Map<String,Object> ps = new HashMap<>();
   117         ps.put("com.sun.security.sasl.ntlm.version", vs);
   116         ps.put("com.sun.security.sasl.ntlm.version", vs);
   118         SaslClient clnt = Sasl.createSaslClient(
   117         SaslClient clnt = Sasl.createSaslClient(
   119                 new String[]{MECH}, USER1, PROTOCOL, null, pc,
   118                 new String[]{MECH}, USER1, PROTOCOL, REALM, pc,
   120                 new CallbackHandler() {
   119                 new CallbackHandler() {
   121                     public void handle(Callback[] callbacks)
   120                     public void handle(Callback[] callbacks)
   122                             throws IOException, UnsupportedCallbackException {
   121                             throws IOException, UnsupportedCallbackException {
   123                         for (Callback cb: callbacks) {
   122                         for (Callback cb: callbacks) {
   124                             if (cb instanceof NameCallback) {
   123                             if (cb instanceof PasswordCallback) {
   125                                 NameCallback ncb = (NameCallback)cb;
       
   126                                 ncb.setName(ncb.getDefaultName());
       
   127                             } else if (cb instanceof PasswordCallback) {
       
   128                                 ((PasswordCallback)cb).setPassword(PASS1);
   124                                 ((PasswordCallback)cb).setPassword(PASS1);
   129                             }
   125                             }
   130                         }
   126                         }
   131                     }
   127                     }
   132                 });
   128                 });
   157 
   153 
   158     private static void checkClientHostname() throws Exception {
   154     private static void checkClientHostname() throws Exception {
   159         Map<String,Object> pc = new HashMap<>();
   155         Map<String,Object> pc = new HashMap<>();
   160         pc.put("com.sun.security.sasl.ntlm.hostname", "this.is.com");
   156         pc.put("com.sun.security.sasl.ntlm.hostname", "this.is.com");
   161         SaslClient clnt = Sasl.createSaslClient(
   157         SaslClient clnt = Sasl.createSaslClient(
   162                 new String[]{MECH}, USER1, PROTOCOL, null, pc,
   158                 new String[]{MECH}, USER1, PROTOCOL, REALM, pc,
   163                 new CallbackHandler() {
   159                 new CallbackHandler() {
   164                     public void handle(Callback[] callbacks)
   160                     public void handle(Callback[] callbacks)
   165                             throws IOException, UnsupportedCallbackException {
   161                             throws IOException, UnsupportedCallbackException {
   166                         for (Callback cb: callbacks) {
   162                         for (Callback cb: callbacks) {
   167                             if (cb instanceof NameCallback) {
   163                             if (cb instanceof PasswordCallback) {
   168                                 NameCallback ncb = (NameCallback)cb;
       
   169                                 ncb.setName(ncb.getDefaultName());
       
   170                             } else if (cb instanceof PasswordCallback) {
       
   171                                 ((PasswordCallback)cb).setPassword(PASS1);
   164                                 ((PasswordCallback)cb).setPassword(PASS1);
   172                             }
   165                             }
   173                         }
   166                         }
   174                     }
   167                     }
   175                 });
   168                 });
   210                 new String[]{MECH}, USER1, PROTOCOL, "ANOTHERREALM", null,
   203                 new String[]{MECH}, USER1, PROTOCOL, "ANOTHERREALM", null,
   211                 new CallbackHandler() {
   204                 new CallbackHandler() {
   212                     public void handle(Callback[] callbacks)
   205                     public void handle(Callback[] callbacks)
   213                             throws IOException, UnsupportedCallbackException {
   206                             throws IOException, UnsupportedCallbackException {
   214                         for (Callback cb: callbacks) {
   207                         for (Callback cb: callbacks) {
   215                             if (cb instanceof NameCallback) {
   208                             if (cb instanceof RealmCallback) {
   216                                 NameCallback ncb = (NameCallback)cb;
   209                                 ((RealmCallback)cb).setText(REALM);
   217                                 ncb.setName(ncb.getDefaultName());
       
   218                             } else if(cb instanceof RealmCallback) {
       
   219                                 RealmCallback dcb = (RealmCallback)cb;
       
   220                                 dcb.setText("THIRDDOMAIN");
       
   221                             } else if (cb instanceof PasswordCallback) {
   210                             } else if (cb instanceof PasswordCallback) {
   222                                 ((PasswordCallback)cb).setPassword(PASS1);
   211                                 ((PasswordCallback)cb).setPassword(PASS1);
   223                             }
   212                             }
   224                         }
   213                         }
   225                     }
   214                     }
   253      * Client side user name provided in callback.
   242      * Client side user name provided in callback.
   254      * @throws Exception
   243      * @throws Exception
   255      */
   244      */
   256     private static void checkClientNameOverride() throws Exception {
   245     private static void checkClientNameOverride() throws Exception {
   257         SaslClient clnt = Sasl.createSaslClient(
   246         SaslClient clnt = Sasl.createSaslClient(
   258                 new String[]{MECH}, null, PROTOCOL, null, null,
   247                 new String[]{MECH}, "someone", PROTOCOL, REALM, null,
   259                 new CallbackHandler() {
   248                 new CallbackHandler() {
   260                     public void handle(Callback[] callbacks)
   249                     public void handle(Callback[] callbacks)
   261                             throws IOException, UnsupportedCallbackException {
   250                             throws IOException, UnsupportedCallbackException {
   262                         for (Callback cb: callbacks) {
   251                         for (Callback cb: callbacks) {
   263                             if (cb instanceof NameCallback) {
   252                             if (cb instanceof NameCallback) {
   264                                 NameCallback ncb = (NameCallback)cb;
   253                                 NameCallback ncb = (NameCallback) cb;
   265                                 ncb.setName(USER1);
   254                                 ncb.setName(USER1);
   266                             } else if (cb instanceof PasswordCallback) {
   255                             } else if (cb instanceof PasswordCallback) {
   267                                 ((PasswordCallback)cb).setPassword(PASS1);
   256                                 ((PasswordCallback)cb).setPassword(PASS1);
   268                             }
   257                             }
   269                         }
   258                         }
   270                     }
   259                     }
   271                 });
   260                 });
   272 
   261 
   273         SaslServer srv = Sasl.createSaslServer(MECH, PROTOCOL, REALM, null,
   262         SaslServer srv = Sasl.createSaslServer(MECH, PROTOCOL, "FAKE", null,
   274                 new CallbackHandler() {
       
   275                     public void handle(Callback[] callbacks)
       
   276                             throws IOException, UnsupportedCallbackException {
       
   277                         String domain = null, name = null;
       
   278                         PasswordCallback pcb = null;
       
   279                         for (Callback cb: callbacks) {
       
   280                             if (cb instanceof NameCallback) {
       
   281                                 name = ((NameCallback)cb).getDefaultName();
       
   282                             } else if (cb instanceof RealmCallback) {
       
   283                                 domain = ((RealmCallback)cb).getDefaultText();
       
   284                             } else if (cb instanceof PasswordCallback) {
       
   285                                 pcb = (PasswordCallback)cb;
       
   286                             }
       
   287                         }
       
   288                         if (pcb != null) {
       
   289                             pcb.setPassword(getPass(domain, name));
       
   290                         }
       
   291                     }
       
   292                 });
       
   293 
       
   294         handshake(clnt, srv);
       
   295     }
       
   296 
       
   297     /**
       
   298      * server side domain provided in props.
       
   299      * @throws Exception
       
   300      */
       
   301     private static void checkServerDomainOverride() throws Exception {
       
   302         SaslClient clnt = Sasl.createSaslClient(
       
   303                 new String[]{MECH}, USER1, PROTOCOL, null, null,
       
   304                 new CallbackHandler() {
       
   305                     public void handle(Callback[] callbacks)
       
   306                             throws IOException, UnsupportedCallbackException {
       
   307                         for (Callback cb: callbacks) {
       
   308                             if (cb instanceof NameCallback) {
       
   309                                 NameCallback ncb = (NameCallback)cb;
       
   310                                 ncb.setName(ncb.getDefaultName());
       
   311                             } else if (cb instanceof PasswordCallback) {
       
   312                                 ((PasswordCallback)cb).setPassword(PASS1);
       
   313                             }
       
   314                         }
       
   315                     }
       
   316                 });
       
   317 
       
   318         Map<String,Object> ps = new HashMap<>();
       
   319         ps.put("com.sun.security.sasl.ntlm.domain", REALM);
       
   320         SaslServer srv = Sasl.createSaslServer(MECH, PROTOCOL, null, ps,
       
   321                 new CallbackHandler() {
   263                 new CallbackHandler() {
   322                     public void handle(Callback[] callbacks)
   264                     public void handle(Callback[] callbacks)
   323                             throws IOException, UnsupportedCallbackException {
   265                             throws IOException, UnsupportedCallbackException {
   324                         String domain = null, name = null;
   266                         String domain = null, name = null;
   325                         PasswordCallback pcb = null;
   267                         PasswordCallback pcb = null;