Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-2528

MQTT Consumer gets java.io.EOFException when subscribed with QOS 2 for an address with custom security settings

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • AMQ 7.4.0.CR2
    • AMQ 7.2.4.GA
    • mqtt-protocol
    • None
    • Release Notes
    • +
    • Previously, an MQTT consumer saw an exception when subscribed with quality of service (QoS) level 2 to an address with custom security settings. This issue is now resolved.
    • Documented as Resolved Issue
    • Verified in a release
    • Hide

      1. Create a custom security settings for an address like so:

      <security-setting match="address.name.#">
        <permission type="createNonDurableQueue" roles="ADA"/>
                  <permission type="deleteNonDurableQueue" roles="ADA"/>
                  <permission type="createDurableQueue" roles="ADA"/>
                  <permission type="deleteDurableQueue" roles="ADA"/>
                  <permission type="createAddress" roles="ADA"/>
                  <permission type="deleteAddress" roles="ADA"/>
                  <permission type="consume" roles="ADA"/>
                  <permission type="browse" roles="ADA"/>
                  <permission type="send" roles="amq,ADA"/>
                  <permission type="manage" roles="ADA"/>
      </security-setting>
      

      2. Create an MQTT consumer with Qos 2 for a destination that matches this pattern.

      3. Send a message to the destination

      Result: The consumer disconnect with these logs:

      Connection lost because: Connection lost (32109) - java.io.EOFException
      

      4. The broker also shows an exception when the debug logs are enabled. which is mentioned in the description

      Show
      1. Create a custom security settings for an address like so: <security-setting match= "address.name.#" > <permission type= "createNonDurableQueue" roles= "ADA" /> <permission type= "deleteNonDurableQueue" roles= "ADA" /> <permission type= "createDurableQueue" roles= "ADA" /> <permission type= "deleteDurableQueue" roles= "ADA" /> <permission type= "createAddress" roles= "ADA" /> <permission type= "deleteAddress" roles= "ADA" /> <permission type= "consume" roles= "ADA" /> <permission type= "browse" roles= "ADA" /> <permission type= "send" roles= "amq,ADA" /> <permission type= "manage" roles= "ADA" /> </security-setting> 2. Create an MQTT consumer with Qos 2 for a destination that matches this pattern. 3. Send a message to the destination Result: The consumer disconnect with these logs: Connection lost because: Connection lost (32109) - java.io.EOFException 4. The broker also shows an exception when the debug logs are enabled. which is mentioned in the description

      If custom security settings are configured for an address like this:

      <security-setting match="address.name.#">
        <permission type="createNonDurableQueue" roles="ADA"/>
                  <permission type="deleteNonDurableQueue" roles="ADA"/>
                  <permission type="createDurableQueue" roles="ADA"/>
                  <permission type="deleteDurableQueue" roles="ADA"/>
                  <permission type="createAddress" roles="ADA"/>
                  <permission type="deleteAddress" roles="ADA"/>
                  <permission type="consume" roles="ADA"/>
                  <permission type="browse" roles="ADA"/>
                  <permission type="send" roles="amq,ADA"/>
                  <permission type="manage" roles="ADA"/>
      </security-setting>
      
      **Here AMQ is for admin and ADA is for test users
      

      Then the MQTT consumer gets this error:

      Connection lost because: Connection lost (32109) - java.io.EOFException
      

      There is also an exception in the logs but only if the debug logging is enabled.

      2019-05-17 11:52:34,146 DEBUG [org.apache.activemq.artemis.core.protocol.mqtt] Error processing Control Packet, Disconnecting Client: ActiveMQSecurityException[errorType=SECURITY_EXCEPTION message=AMQ229213: User: test does not have permission='CONSUME' for queue $sys.mqtt.queue.qos2.MQTT-Java-Example-SUB on address $sys.mqtt.queue.qos2.MQTT-Java-Example-SUB.$sys.mqtt.queue.qos2.MQTT-Java-Example-SUB]
      

      This works fine for Qos < 2

        1. artemis-roles.properties
          1.0 kB
        2. artemis-users.properties
          1 kB
        3. broker.xml
          11 kB
        4. EclipsePaho.java
          3 kB

              rh-ee-ataylor Andy Taylor
              rhn-support-adongre Avinash Dongre
              Michal Toth Michal Toth
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: