]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
src/rgw/rgw_url.cc, also cope with a vhost appended to a AMQP-URL
authorAndreas Unterkircher <unki@netshadow.net>
Mon, 20 Apr 2020 08:28:38 +0000 (10:28 +0200)
committerYuval Lifshitz <ylifshit@redhat.com>
Mon, 25 May 2020 12:51:56 +0000 (15:51 +0300)
Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
Fixes: https://tracker.ceph.com/issues/45269
src/rgw/rgw_url.cc

index 24c25378239ff909046045828ea87d881c0cb19f..62b003c49c2987c2ae9229304323f31779aadadc 100644 (file)
@@ -14,32 +14,33 @@ namespace {
   const std::string schema_re = "([[:alpha:]]+:\\/\\/)";
   const std::string user_pass_re = "(([^:\\s]+):([^@\\s]+)@)?";
   const std::string host_port_re = "([[:alnum:].:-]+)";
+  const std::string vhost_re = "(/[[:print:]]+)?";
 }
 
 bool parse_url_authority(const std::string& url, std::string& host, std::string& user, std::string& password) {
-  const std::string re = schema_re + user_pass_re + host_port_re;
+  const std::string re = schema_re + user_pass_re + host_port_re + vhost_re;
   const std::regex url_regex(re, std::regex::icase);
   std::smatch url_match_result;
 
   if (std::regex_match(url, url_match_result, url_regex)) {
     host = url_match_result[HOST_GROUP_IDX];
-    user = url_match_result[USER_GROUP_IDX];  
+    user = url_match_result[USER_GROUP_IDX];
     password = url_match_result[PASSWORD_GROUP_IDX];
-       return true; 
+    return true;
   }
 
   return false;
 }
 
 bool parse_url_userinfo(const std::string& url, std::string& user, std::string& password) {
-  const std::string re = schema_re + user_pass_re + host_port_re;
+  const std::string re = schema_re + user_pass_re + host_port_re + vhost_re;
   const std::regex url_regex(re);
   std::smatch url_match_result;
 
   if (std::regex_match(url, url_match_result, url_regex)) {
-    user = url_match_result[USER_GROUP_IDX];  
+    user = url_match_result[USER_GROUP_IDX];
     password = url_match_result[PASSWORD_GROUP_IDX];
-       return true; 
+    return true;
   }
 
   return false;