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