[jboss-remoting-commits] JBoss Remoting SVN: r5597 - remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3.

jboss-remoting-commits at lists.jboss.org jboss-remoting-commits at lists.jboss.org
Tue Nov 17 18:04:16 EST 2009


Author: david.lloyd at jboss.com
Date: 2009-11-17 18:04:16 -0500 (Tue, 17 Nov 2009)
New Revision: 5597

Modified:
   remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/EndpointImpl.java
Log:
More robust callback handling

Modified: remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/EndpointImpl.java
===================================================================
--- remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/EndpointImpl.java	2009-11-17 22:50:13 UTC (rev 5596)
+++ remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/EndpointImpl.java	2009-11-17 23:04:16 UTC (rev 5597)
@@ -64,7 +64,9 @@
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.TextOutputCallback;
 import javax.security.sasl.RealmCallback;
+import javax.security.sasl.RealmChoiceCallback;
 
 /**
  *
@@ -497,13 +499,33 @@
         final String realm = connectOptions.get(RemotingOptions.AUTH_REALM);
         return connect(destination, connectOptions, new CallbackHandler() {
             public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-                for (Callback callback : callbacks) {
+                MAIN: for (Callback callback : callbacks) {
                     if (callback instanceof NameCallback && userName != null) {
                         final NameCallback nameCallback = (NameCallback) callback;
                         nameCallback.setName(userName);
                     } else if (callback instanceof RealmCallback && realm != null) {
                         final RealmCallback realmCallback = (RealmCallback) callback;
                         realmCallback.setText(realm);
+                    } else if (callback instanceof RealmChoiceCallback && realm != null) {
+                        final RealmChoiceCallback realmChoiceCallback = (RealmChoiceCallback) callback;
+                        final String[] choices = realmChoiceCallback.getChoices();
+                        for (int i = 0; i < choices.length; i++) {
+                            if (choices[i].equals(realm)) {
+                                realmChoiceCallback.setSelectedIndex(i);
+                                continue MAIN;
+                            }
+                        }
+                        throw new UnsupportedCallbackException(callback, "No realm choices match realm '" + realm + "'");
+                    } else if (callback instanceof TextOutputCallback) {
+                        final TextOutputCallback textOutputCallback = (TextOutputCallback) callback;
+                        final String kind;
+                        switch (textOutputCallback.getMessageType()) {
+                            case TextOutputCallback.ERROR: kind = "ERROR"; break;
+                            case TextOutputCallback.INFORMATION: kind = "INFORMATION"; break;
+                            case TextOutputCallback.WARNING: kind = "WARNING"; break;
+                            default: kind = "UNKNOWN"; break;
+                        }
+                        log.debug("Authentication layer produced a %s message: %s", kind, textOutputCallback.getMessage());
                     } else {
                         throw new UnsupportedCallbackException(callback);
                     }



More information about the jboss-remoting-commits mailing list