Skip to content

Commit

Permalink
rgw: don't return skew time in pre-signed url
Browse files Browse the repository at this point in the history
Fixes: http://tracker.ceph.com/issues/18828

Signed-off-by: liuchang0812 <liuchang0812@gmail.com>
  • Loading branch information
liuchang0812 committed Feb 10, 2017
1 parent f95627f commit dd8b348
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions src/rgw/rgw_rest_s3.cc
Expand Up @@ -3410,6 +3410,7 @@ int RGW_Auth_S3::authorize(RGWRados *store, struct req_state *s)
return 0;

} else {
/* Authorization in Header */

/* AWS4 */

Expand Down Expand Up @@ -3552,6 +3553,9 @@ int RGW_Auth_S3::authorize_v4(RGWRados *store, struct req_state *s, bool force_b
{
string::size_type pos;
bool using_qs;
/* used for pre-signatured url, We shouldn't return -ERR_REQUEST_TIME_SKEWED when
current time <= X-Amz-Expires */
bool qsr = false;

uint64_t now_req = 0;
uint64_t now = ceph_clock_now();
Expand Down Expand Up @@ -3587,12 +3591,12 @@ int RGW_Auth_S3::authorize_v4(RGWRados *store, struct req_state *s, bool force_b
return -EPERM;

s->aws4_auth->expires = s->info.args.get("X-Amz-Expires");
if (s->aws4_auth->expires.size() != 0) {
if (!s->aws4_auth->expires.empty()) {
/* X-Amz-Expires provides the time period, in seconds, for which
the generated presigned URL is valid. The minimum value
you can set is 1, and the maximum is 604800 (seven days) */
time_t exp = atoll(s->aws4_auth->expires.c_str());
if ((exp < 1) || (exp > 604800)) {
if ((exp < 1) || (exp > 7*24*60*60)) {
dout(10) << "NOTICE: exp out of range, exp = " << exp << dendl;
return -EPERM;
}
Expand All @@ -3602,12 +3606,17 @@ int RGW_Auth_S3::authorize_v4(RGWRados *store, struct req_state *s, bool force_b
dout(10) << "NOTICE: now = " << now << ", now_req = " << now_req << ", exp = " << exp << dendl;
return -EPERM;
}
qsr = true;
}

if ( (now_req < now - RGW_AUTH_GRACE_MINS * 60) ||
(now_req > now + RGW_AUTH_GRACE_MINS * 60) ) {
if ((now_req < now - RGW_AUTH_GRACE_MINS * 60 ||
now_req > now + RGW_AUTH_GRACE_MINS * 60) && !qsr) {
dout(10) << "NOTICE: request time skew too big." << dendl;
dout(10) << "now_req = " << now_req << " now = " << now << "; now - RGW_AUTH_GRACE_MINS=" << now - RGW_AUTH_GRACE_MINS * 60 << "; now + RGW_AUTH_GRACE_MINS=" << now + RGW_AUTH_GRACE_MINS * 60 << dendl;
dout(10) << "now_req = " << now_req << " now = " << now
<< "; now - RGW_AUTH_GRACE_MINS="
<< now - RGW_AUTH_GRACE_MINS * 60
<< "; now + RGW_AUTH_GRACE_MINS="
<< now + RGW_AUTH_GRACE_MINS * 60 << dendl;
return -ERR_REQUEST_TIME_SKEWED;
}

Expand Down

0 comments on commit dd8b348

Please sign in to comment.