]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cauthtool: add simpler '--cap key val' syntax
authorSage Weil <sage@newdream.net>
Fri, 17 Sep 2010 18:37:21 +0000 (11:37 -0700)
committerSage Weil <sage@newdream.net>
Fri, 17 Sep 2010 18:38:45 +0000 (11:38 -0700)
This lets you avoid creating a temp filename and doing '--caps filename'.
Instead, add each cap individually, like

--cap mon 'allow *' --cap mds 'allow' --cap osd 'allow rwx'

Signed-off-by: Sage Weil <sage@newdream.net>
src/cauthtool.cc

index 84298e1353334975620d8d200d7f1ff7e526987c..1b2b34c8120f2678c162148c3199715ee553c378 100644 (file)
@@ -52,6 +52,7 @@ int main(int argc, const char **argv)
   bool set_auid = false;
   uint64_t auid = CEPH_AUTH_UID_DEFAULT;
   const char *name = g_conf.name;
+  map<string,bufferlist> caps;
 
   FOR_EACH_ARG(args) {
     if (CONF_ARG_EQ("gen-key", 'g')) {
@@ -64,6 +65,11 @@ int main(int argc, const char **argv)
       CONF_SAFE_SET_ARG_VAL(&list, OPT_BOOL);
     } else if (CONF_ARG_EQ("caps", '\0')) {
       CONF_SAFE_SET_ARG_VAL(&caps_fn, OPT_STR);
+    } else if (CONF_ARG_EQ("cap", '\0')) {
+      const char *key, *val;
+      CONF_SAFE_SET_ARG_VAL(&key, OPT_STR);
+      CONF_SAFE_SET_ARG_VAL(&val, OPT_STR);
+      ::encode(val, caps[key]);
     } else if (CONF_ARG_EQ("print-key", 'p')) {
       CONF_SAFE_SET_ARG_VAL(&print_key, OPT_BOOL);
     } else if (CONF_ARG_EQ("create-keyring", 'c')) {
@@ -87,6 +93,7 @@ int main(int argc, const char **argv)
        add_key ||
        list ||
        caps_fn ||
+       caps.size() ||
        set_auid ||
        print_key ||
        create_keyring ||
@@ -98,7 +105,7 @@ int main(int argc, const char **argv)
     cerr << "can't both gen_key and add_key" << std::endl;
     usage();
   }    
-  if (caps_fn || add_key || gen_key || print_key || set_auid) {
+  if (caps_fn || caps.size() || add_key || gen_key || print_key || set_auid) {
     if (!name || !(*name)) {
       cerr << "must specify entity name" << std::endl;
       usage();
@@ -211,6 +218,10 @@ int main(int argc, const char **argv)
     keyring.set_caps(ename, caps);
     modified = true;
   }
+  if (caps.size()) {
+    keyring.set_caps(ename, caps);
+    modified = true;
+  }
   if (set_auid) {
     if (!name) {
       cerr << "must specify a name to set a uid" << std::endl;