Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_os_lib.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include "rgw_rest.h"
5 #include "rgw_rest_s3.h"
6 #include "rgw_rest_user.h"
7 #include "rgw_os_lib.h"
8 #include "rgw_file.h"
9 #include "rgw_lib_frontend.h"
10
11 namespace rgw {
12
13 /* static */
14   int RGWHandler_Lib::init_from_header(struct req_state *s)
15   {
16     string req;
17     string first;
18
19     const char *req_name = s->relative_uri.c_str();
20     const char *p;
21
22     /* skip request_params parsing, rgw_file should not be
23      * seeing any */
24     if (*req_name == '?') {
25       p = req_name;
26     } else {
27       p = s->info.request_params.c_str();
28     }
29
30     s->info.args.set(p);
31     s->info.args.parse();
32
33     if (*req_name != '/')
34       return 0;
35
36     req_name++;
37
38     if (!*req_name)
39       return 0;
40
41     req = req_name;
42     int pos = req.find('/');
43     if (pos >= 0) {
44       first = req.substr(0, pos);
45     } else {
46       first = req;
47     }
48
49     if (s->bucket_name.empty()) {
50       s->bucket_name = std::move(first);
51       if (pos >= 0) {
52         // XXX ugh, another copy
53         string encoded_obj_str = req.substr(pos+1);
54         s->object = rgw_obj_key(encoded_obj_str, s->info.args.get("versionId"));
55       }
56     } else {
57       s->object = rgw_obj_key(req_name, s->info.args.get("versionId"));
58     }
59     return 0;
60   } /* init_from_header */
61
62 } /* namespace rgw */