MB-23885: Add RBAC auth to cbcompact 81/76781/6
authorJames Harrison <00jamesh@gmail.com>
Thu, 13 Apr 2017 16:46:32 +0000 (17:46 +0100)
committerDave Rigby <daver@couchbase.com>
Fri, 28 Apr 2017 15:39:05 +0000 (15:39 +0000)
Change-Id: Icd2bf20a7cae844363418ee12d46c1bc56f74372
Reviewed-on: http://review.couchbase.org/76781
Tested-by: Build Bot <build@couchbase.com>
Reviewed-by: Matt Carabine <matt.carabine@couchbase.com>
Reviewed-by: Dave Rigby <daver@couchbase.com>
management/cbcompact

index 21207e3..fa92dda 100755 (executable)
@@ -4,15 +4,13 @@
 # install/bin/cbcompact 127.0.0.1:12000 compact -b beer-sample 799
 #   where 12000 is memcached port and 799 is vbucket id
 
-import clitool
+import cli_auth_utils
 from time import sleep
 import sys
 import mc_bin_client
 
 def cmd(f):
-    """Decorate a function with code to authenticate based on 1-2
-    arguments past the normal number of arguments."""
-
+    f = cli_auth_utils.cmd_decorator(f)
     def g(*args, **kwargs):
         mc = args[0]
 
@@ -22,26 +20,13 @@ def cmd(f):
             print "Must specify a vbucket id after the compact argument"
             sys.exit(1)
 
-        n = f.func_code.co_argcount
-        if len(args) > n:
-            print "Too many args, given %s, but expected a maximum of %s"\
-                    % (list(args[1:]), n - 1)
-            sys.exit(1)
-
-        bucket = kwargs.get('bucketName', None)
-        password = kwargs.get('password', None) or ""
-        purgeBeforeTs = long(kwargs.get('purgeBeforeTs', None) or 0)
-        purgeBeforeSeq = long(kwargs.get('purgeBeforeSeq', None) or 0)
-        dropDeletes = int(kwargs.get('dropDeletes', None) or 0)
-
-        if bucket:
-            try:
-                mc.sasl_auth_plain(bucket, password)
-            except mc_bin_client.MemcachedError:
-                print "Authentication error for %s" % bucket
-                sys.exit(1)
+        # These arguments are /always/ in kwargs, but if they are not specified
+        # on the command line will have the value None.
+        purgeBeforeTs = long(kwargs.pop('purgeBeforeTs') or 0)
+        purgeBeforeSeq = long(kwargs.pop('purgeBeforeSeq') or 0)
+        dropDeletes = int(kwargs.pop('dropDeletes') or 0)
 
-        f(mc, vbucket, purgeBeforeTs, purgeBeforeSeq, dropDeletes)
+        f(mc, vbucket, purgeBeforeTs, purgeBeforeSeq, dropDeletes, **kwargs)
     return g
 
 @cmd
@@ -56,12 +41,9 @@ def compact(mc, vbucket, purgeBeforeTs, purgeBeforeSeq, dropDeletes):
              % (vbucket, purgeBeforeTs, purgeBeforeSeq, dropDeletes)
 
 def main():
-    c = clitool.CliTool()
+    c = cli_auth_utils.get_authed_clitool()
 
     c.addCommand('compact', compact, 'compact vbucketid')
-    c.addOption('-b', 'bucketName',
-                'the bucket to perform compaction on (Default: default)')
-    c.addOption('-p', 'password', 'the password for the bucket if one exists')
     c.addOption('--purge-before', 'purgeBeforeTs',
                 'purge documents before this timestamp')
     c.addOption('--purge-only-upto-seq', 'purgeBeforeSeq',