Mercurial
comparison s3/s3_uploader.c @ 201:6cdee35a7ba9
[MrJuneJune] notes
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sun, 15 Feb 2026 07:07:50 -0800 |
| parents | 83f16548ba41 |
| children | 240337164a80 |
comparison
equal
deleted
inserted
replaced
| 200:90dfcef375fb | 201:6cdee35a7ba9 |
|---|---|
| 386 | 386 |
| 387 // Build canonical query string (must be sorted alphabetically) | 387 // Build canonical query string (must be sorted alphabetically) |
| 388 char expires_str[16]; | 388 char expires_str[16]; |
| 389 snprintf(expires_str, sizeof(expires_str), "%d", expires_seconds); | 389 snprintf(expires_str, sizeof(expires_str), "%d", expires_seconds); |
| 390 | 390 |
| 391 // URL-encode signed headers (semicolon becomes %3B) | |
| 392 char *encoded_signed_headers = s3__uri_encode_strict(signed_headers, p_arena); | |
| 393 | |
| 391 size_t query_len = 1024 + strlen(encoded_credential); | 394 size_t query_len = 1024 + strlen(encoded_credential); |
| 392 char *canonical_query = Dowa_Arena_Allocate(p_arena, query_len); | 395 char *canonical_query = Dowa_Arena_Allocate(p_arena, query_len); |
| 393 | 396 |
| 394 if (content_type && strcmp(method, "PUT") == 0) | 397 snprintf(canonical_query, query_len, |
| 395 { | 398 "X-Amz-Algorithm=%s" |
| 396 char *encoded_content_type = s3__uri_encode_strict(content_type, p_arena); | 399 "&X-Amz-Credential=%s" |
| 397 snprintf(canonical_query, query_len, | 400 "&X-Amz-Date=%s" |
| 398 "X-Amz-Algorithm=%s" | 401 "&X-Amz-Expires=%s" |
| 399 "&X-Amz-Credential=%s" | 402 "&X-Amz-SignedHeaders=%s", |
| 400 "&X-Amz-Date=%s" | 403 S3_ALGORITHM, |
| 401 "&X-Amz-Expires=%s" | 404 encoded_credential, |
| 402 "&X-Amz-SignedHeaders=%s" | 405 ts.datetime, |
| 403 "&x-amz-content-type=%s", | 406 expires_str, |
| 404 S3_ALGORITHM, | 407 encoded_signed_headers); |
| 405 encoded_credential, | |
| 406 ts.datetime, | |
| 407 expires_str, | |
| 408 signed_headers, | |
| 409 encoded_content_type); | |
| 410 } | |
| 411 else | |
| 412 { | |
| 413 snprintf(canonical_query, query_len, | |
| 414 "X-Amz-Algorithm=%s" | |
| 415 "&X-Amz-Credential=%s" | |
| 416 "&X-Amz-Date=%s" | |
| 417 "&X-Amz-Expires=%s" | |
| 418 "&X-Amz-SignedHeaders=%s", | |
| 419 S3_ALGORITHM, | |
| 420 encoded_credential, | |
| 421 ts.datetime, | |
| 422 expires_str, | |
| 423 signed_headers); | |
| 424 } | |
| 425 | 408 |
| 426 // Build canonical headers | 409 // Build canonical headers |
| 427 size_t headers_len = 256 + strlen(host) + (content_type ? strlen(content_type) : 0); | 410 size_t headers_len = 256 + strlen(host) + (content_type ? strlen(content_type) : 0); |
| 428 char *canonical_headers = Dowa_Arena_Allocate(p_arena, headers_len); | 411 char *canonical_headers = Dowa_Arena_Allocate(p_arena, headers_len); |
| 429 | 412 |