Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-13459

Remote Naming bind / rebind / unbind / rename / createSubcontext / destroySubcontext does not throw exception back to client

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: 19.1.0.Final
    • Fix Version/s: None
    • Component/s: Naming
    • Labels:
      None
    • Steps to Reproduce:
      Hide

      Add a user: ./bin/add-user.sh -a -u admin -p redhat1!
      Start JBoss ./bin/standalone.sh
      javac Client.java
      java -cp $JBOSS_HOME/bin/client/jboss-cli-client.jar:$JBOSS_HOME/bin/client/jboss-client.jar:. Client
      or
      ./client.sh [path to jboss]
      ./client.sh [path to jboss] -Dhost=... -Dport=... -Duser=... -Dpass=... -Dtest=... -Dverbose=true

      It will test remoting and http. -Dtest=http or -Dtest=remoting to just run a single test

      java -cp $JBOSS_HOME/bin/client/jboss-cli-client.jar:$JBOSS_HOME/bin/client/jboss-client.jar:. -Dtest=http Client

      -Dpass=null will set the user/pass to null so that it will not be set inside of the InitialContext.
      -Dhost= , -Dport , -Duser, -Dpass can all be passed to use a different value from the default localhost , 8080, admin , redhat1!

      Will log:

      Starting test: Remote Naming / Remoting
      ==================
      Failed to catch exception for method bind
      Failed to catch exception for method rebind
      Failed to catch exception for method unbind
      Failed to catch exception for method rename
      Failed to catch exception for method createSubcontext
      Failed to catch exception for method destroySubcontext
      Failed to catch exception for method destroySubcontext
      Finished test: Remote Naming / Remoting
      ==================
      Starting test: Remote Http Naming
      ==================
      Success catch exception javax.naming.NamingException for method bind
      Success catch exception javax.naming.NamingException for method rebind
      Success catch exception javax.naming.CommunicationException for method unbind
      Success catch exception javax.naming.CommunicationException for method rename
      Success catch exception javax.naming.CommunicationException for method createSubcontext
      Success catch exception javax.naming.CommunicationException for method destroySubcontext
      Success catch exception javax.naming.CommunicationException for method destroySubcontext
      Finished test: Remote Http Naming
      ==================
      

      Expected result is success where the client is catching a NamingException (which ever is most specific to the method).

      The implementation down in the org.wildfly.naming.client.WildFlyInitialContextFactory for these methods must just not be throwing the exception back, since the server side is logging a warning

      Show
      Add a user: ./bin/add-user.sh -a -u admin -p redhat1! Start JBoss ./bin/standalone.sh javac Client.java java -cp $JBOSS_HOME/bin/client/jboss-cli-client.jar:$JBOSS_HOME/bin/client/jboss-client.jar:. Client or ./client.sh [path to jboss] ./client.sh [path to jboss] -Dhost=... -Dport=... -Duser=... -Dpass=... -Dtest=... -Dverbose=true It will test remoting and http. -Dtest=http or -Dtest=remoting to just run a single test java -cp $JBOSS_HOME/bin/client/jboss-cli-client.jar:$JBOSS_HOME/bin/client/jboss-client.jar:. -Dtest=http Client -Dpass=null will set the user/pass to null so that it will not be set inside of the InitialContext. -Dhost= , -Dport , -Duser, -Dpass can all be passed to use a different value from the default localhost , 8080, admin , redhat1! Will log: Starting test: Remote Naming / Remoting ================== Failed to catch exception for method bind Failed to catch exception for method rebind Failed to catch exception for method unbind Failed to catch exception for method rename Failed to catch exception for method createSubcontext Failed to catch exception for method destroySubcontext Failed to catch exception for method destroySubcontext Finished test: Remote Naming / Remoting ================== Starting test: Remote Http Naming ================== Success catch exception javax.naming.NamingException for method bind Success catch exception javax.naming.NamingException for method rebind Success catch exception javax.naming.CommunicationException for method unbind Success catch exception javax.naming.CommunicationException for method rename Success catch exception javax.naming.CommunicationException for method createSubcontext Success catch exception javax.naming.CommunicationException for method destroySubcontext Success catch exception javax.naming.CommunicationException for method destroySubcontext Finished test: Remote Http Naming ================== Expected result is success where the client is catching a NamingException (which ever is most specific to the method). The implementation down in the org.wildfly.naming.client.WildFlyInitialContextFactory for these methods must just not be throwing the exception back, since the server side is logging a warning

      Description

      The Remote Naming (JNDI) is Read-Only, remote clients cannot bind or rebind objects into it. Only applications running in the same JVM can bind values into JNDI.

      It looks like the server side logs the warning, but the client does not get an exception thrown back, bind and rebind should throw some javax.naming.NamingException since the bind/rebind operations are failing.

        public static void main(String[] args) throws Exception {
          Context ctx = getInitialContext("localhost", 8080, "admin", "redhat1!");
            ctx.bind("java:/reproducer", "reproducer");
            ctx.rebind("java:/reproducer", "reproducer");
        }
      
      
      public static Context getInitialContext(String host, Integer port, String username, String password)  throws NamingException {
         Properties props = new Properties();
         props.put(Context.INITIAL_CONTEXT_FACTORY,  "org.wildfly.naming.client.WildFlyInitialContextFactory");
         props.put(Context.PROVIDER_URL, String.format("%s://%s:%d", "remote+http", host, port));
         if(username != null && password != null) {
            props.put(Context.SECURITY_PRINCIPAL, username);
            props.put(Context.SECURITY_CREDENTIALS, password);
          }
         return new InitialContext(props);
      }
      
      
      13:20:22,804 WARN  [org.wildfly.naming] (default task-2) WFNAM00036: Unexpected internal error: java.lang.UnsupportedOperationException: WFLYNAM0043: Naming context is read-only
      	at org.jboss.as.naming.WritableServiceBasedNamingStore.requireOwner(WritableServiceBasedNamingStore.java:160)
      	at org.jboss.as.naming.WritableServiceBasedNamingStore.bind(WritableServiceBasedNamingStore.java:66)
      	at org.jboss.as.naming.NamingContext.bind(NamingContext.java:262)
      	at org.jboss.as.naming.NamingContext.bind(NamingContext.java:289)
      	at org.wildfly.naming.client.remote.RemoteServerTransport.handleBind(RemoteServerTransport.java:238)
      	at org.wildfly.naming.client.remote.RemoteServerTransport$1.handleMessage(RemoteServerTransport.java:126)
      	at org.jboss.remoting3.remote.RemoteConnectionChannel.lambda$handleMessageData$3(RemoteConnectionChannel.java:430)
      	at org.jboss.remoting3.EndpointImpl$TrackingExecutor.lambda$execute$0(EndpointImpl.java:991)
      	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
      	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
      	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
      	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
      	at java.lang.Thread.run(Thread.java:748)
      
      13:20:22,813 WARN  [org.wildfly.naming] (default task-2) WFNAM00036: Unexpected internal error: java.lang.UnsupportedOperationException: WFLYNAM0043: Naming context is read-only
      	at org.jboss.as.naming.WritableServiceBasedNamingStore.requireOwner(WritableServiceBasedNamingStore.java:160)
      	at org.jboss.as.naming.WritableServiceBasedNamingStore.rebind(WritableServiceBasedNamingStore.java:108)
      	at org.jboss.as.naming.NamingContext.rebind(NamingContext.java:301)
      	at org.jboss.as.naming.NamingContext.rebind(NamingContext.java:309)
      	at org.wildfly.naming.client.remote.RemoteServerTransport.handleBind(RemoteServerTransport.java:236)
      	at org.wildfly.naming.client.remote.RemoteServerTransport$1.handleMessage(RemoteServerTransport.java:129)
      	at org.jboss.remoting3.remote.RemoteConnectionChannel.lambda$handleMessageData$3(RemoteConnectionChannel.java:430)
      	at org.jboss.remoting3.EndpointImpl$TrackingExecutor.lambda$execute$0(EndpointImpl.java:991)
      	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
      	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
      	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
      	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
      	at java.lang.Thread.run(Thread.java:748)
      

        Gliffy Diagrams

          Attachments

          1. Client.java
            4 kB
          2. client.sh
            0.1 kB
          3. server.log.gz
            1 kB

            Issue Links

              Activity

                People

                • Assignee:
                  sudeshnas Sudeshna Sur
                  Reporter:
                  bmaxwell Brad Maxwell
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  5 Start watching this issue

                  Dates

                  • Created:
                    Updated: