You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2023/06/09 22:02:22 UTC

[pulsar] branch branch-3.0 updated: [cleanup][broker] Validate authz earlier in delete subscription logic (#20549)

This is an automated email from the ASF dual-hosted git repository.

mmarshall pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new d681851308c [cleanup][broker] Validate authz earlier in delete subscription logic (#20549)
d681851308c is described below

commit d681851308ca5d85990fb3856bf81bca379260da
Author: Michael Marshall <mm...@apache.org>
AuthorDate: Fri Jun 9 16:39:23 2023 -0500

    [cleanup][broker] Validate authz earlier in delete subscription logic (#20549)
    
    ### Motivation
    
    Move the authorization check a few steps earlier in the delete subscription admin endpoint.
    
    ### Modifications
    
    * Move the authz check earlier
    
    ### Verifying this change
    
    We do not have any tests for these endpoints. We should add them. This change is trivial enough that I think it is fine to defer on testing the authz change.
    
    ### Documentation
    
    - [x] `doc-not-needed`
    
    (cherry picked from commit c73967c811f60d4cb508e8489e6faf39dd0174b4)
---
 .../org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java   | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
index 5cd6ff8cbd9..81f5e3c1f32 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
@@ -1631,7 +1631,9 @@ public class PersistentTopicsBase extends AdminResource {
             future = CompletableFuture.completedFuture(null);
         }
 
-        return future.thenCompose(__ -> {
+        return future
+                .thenCompose((__) -> validateTopicOperationAsync(topicName, TopicOperation.UNSUBSCRIBE, subName))
+                .thenCompose(__ -> {
             if (topicName.isPartitioned()) {
                 return internalDeleteSubscriptionForNonPartitionedTopicAsync(subName, authoritative, force);
             } else {
@@ -1674,11 +1676,11 @@ public class PersistentTopicsBase extends AdminResource {
         });
     }
 
+    // Note: this method expects the caller to check authorization
     private CompletableFuture<Void> internalDeleteSubscriptionForNonPartitionedTopicAsync(String subName,
                                                                                           boolean authoritative,
                                                                                           boolean force) {
         return validateTopicOwnershipAsync(topicName, authoritative)
-                .thenCompose((__) -> validateTopicOperationAsync(topicName, TopicOperation.UNSUBSCRIBE, subName))
                 .thenCompose(__ -> getTopicReferenceAsync(topicName))
                 .thenCompose((topic) -> {
                     Subscription sub = topic.getSubscription(subName);