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

Details

    • Bug
    • Resolution: Done
    • 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

    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

      Attachments

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

        Activity

          People

            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

            Dates

              Created:
              Updated:
              Resolved: