]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add optional tenant name for swift urls
authorYehuda Sadeh <yehuda@inktank.com>
Tue, 26 Nov 2013 21:39:38 +0000 (13:39 -0800)
committerYehuda Sadeh <yehuda@inktank.com>
Thu, 9 Jan 2014 22:28:25 +0000 (14:28 -0800)
In order to maintain compatibility with swift clients that expect the
url to also contain a reference to the tenant name, add an optional
param (empty by default) that would add it.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/common/config_opts.h
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_swift_auth.cc

index 0a452fec46bbbf59704df1fd574052db5ae8bb4c..f6c704197e630b3fbd9e72650fbbff9f417152d3 100644 (file)
@@ -684,6 +684,7 @@ OPTION(rgw_swift_url, OPT_STR, "")             // the swift url, being published
 OPTION(rgw_swift_url_prefix, OPT_STR, "swift") // entry point for which a url is considered a swift url
 OPTION(rgw_swift_auth_url, OPT_STR, "")        // default URL to go and verify tokens for v1 auth (if not using internal swift auth)
 OPTION(rgw_swift_auth_entry, OPT_STR, "auth")  // entry point for which a url is considered a swift auth url
+OPTION(rgw_swift_tenant_name, OPT_STR, "")  // tenant name to use for swift access
 OPTION(rgw_keystone_url, OPT_STR, "")  // url for keystone server
 OPTION(rgw_keystone_admin_token, OPT_STR, "")  // keystone admin token (shared secret)
 OPTION(rgw_keystone_admin_user, OPT_STR, "")  // keystone admin user name
index c958aa3a9e4dcbca5fbbdccb3c17f87f392dbfb3..daeb776013062baf7ebab226ed2d93c51b7504be 100644 (file)
@@ -848,9 +848,15 @@ int RGWHandler_ObjStore_SWIFT::init_from_header(struct req_state *s)
     first = req;
   }
 
+  string tenant_path;
+  if (!g_conf->rgw_swift_tenant_name.empty()) {
+    tenant_path = "/AUTH_";
+    tenant_path.append(g_conf->rgw_swift_tenant_name);
+  }
+
   /* verify that the request_uri conforms with what's expected */
-  char buf[g_conf->rgw_swift_url_prefix.length() + 16];
-  int blen = sprintf(buf, "/%s/v1", g_conf->rgw_swift_url_prefix.c_str());
+  char buf[g_conf->rgw_swift_url_prefix.length() + 16 + tenant_path.length()];
+  int blen = sprintf(buf, "/%s/v1%s", g_conf->rgw_swift_url_prefix.c_str(), tenant_path.c_str());
   if (s->decoded_uri[0] != '/' ||
     s->decoded_uri.compare(0, blen, buf) !=  0) {
     return -ENOENT;
index b42be89b740af1ac217bc188b8ebb6ede4aa81af..9c800c4c2c71d3edcb6076d5680dbe803eeac23a 100644 (file)
@@ -142,6 +142,7 @@ void RGW_SWIFT_Auth_Get::execute()
 
   string swift_url = g_conf->rgw_swift_url;
   string swift_prefix = g_conf->rgw_swift_url_prefix;
+  string tenant_path;
 
   if (swift_prefix.size() == 0) {
     swift_prefix = DEFAULT_SWIFT_PREFIX;
@@ -199,8 +200,13 @@ void RGW_SWIFT_Auth_Get::execute()
     goto done;
   }
 
-  s->cio->print("X-Storage-Url: %s/%s/v1\n", swift_url.c_str(),
-               swift_prefix.c_str());
+  if (!g_conf->rgw_swift_tenant_name.empty()) {
+    tenant_path = "/AUTH_";
+    tenant_path.append(g_conf->rgw_swift_tenant_name);
+  }
+
+  s->cio->print("X-Storage-Url: %s/%s/v1%s\n", swift_url.c_str(),
+               swift_prefix.c_str(), tenant_path.c_str());
 
   if ((ret = encode_token(s->cct, swift_key->id, swift_key->key, bl)) < 0)
     goto done;