Package: amanda-server Version: 1:3.5.1-11+deb12u2aldebaran01 Severity: normal Tags: patch upstream
Dear Maintainer, We are testing the s3 device with Backblaze B2 service. Backblaze uses the "AWS4" authentication mechanism. We use this configuration fragment to configure the driver: ------------------------------8<---------------------- # backblaze B2 (s3 compatible) define changer backblazeb2 { tapedev "chg-multi:s3:xxxxxxxxxxxxxxxxxxxxxxxxx-backups/DailySet2/slot-{01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20}" changerfile "/var/lib/amanda/DailySet2/s3-statefile" device-property "BLOCK_SIZE" "16m" # backblase key id device_property "S3_ACCESS_KEY" "xxxxxxxxxxxxxxxxxxxxxxxxx" # backblase application key device_property "S3_SECRET_KEY" "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" device_property "S3_BUCKET_LOCATION" "eu-central-003" device_property "S3_SSL" "YES" device_property "S3_HOST" "s3.eu-central-003.backblazeb2.com" device_property "STORAGE_API" "AWS4" } define tapetype S3 { comment "S3 Bucket" length 1024 gigabytes } tapedev "backblazeb2" tapetype S3 ------------------------------8<---------------------- Backblaze supports a "ObjectLock" function which locks objects for a preset amount of days. When we switch on ObjectLock, the creation of any object with amanda results in this error message in the taper log file: Content-MD5 OR x-amz-checksum- HTTP header is required for Put Object requests with Object Lock parameters Content-MD5 is, as far as I found out, optional with AWS4, but can be applied to any request. Maybe amanda should always send it. As it turns out, the code for that is already in the amanda s3 driver, but the creation of the Content-MD5 HTTP header is turned of for AWS4. After we applied this patch, the put transfers (object generation) work. --- amanda-3.5.1.orig/device-src/s3.c +++ amanda-3.5.1/device-src/s3.c @@ -1158,6 +1158,7 @@ authenticate_request(S3Handle *hdl, g_debug("canonical_hash: %s", canonical_hash); g_debug("strSecretKey: %s", strSecretKey); g_debug("signatureHex: %s", signatureHex); + g_debug("md5_hash: %s", md5_hash); } g_free(canonical_hash); @@ -1168,7 +1169,6 @@ authenticate_request(S3Handle *hdl, g_free(signingKey); g_free(signature); g_free(signatureHex); - md5_hash = NULL; } else { /* hdl->s3_api == S3_API_S3 */ /* Build the string to sign, per the S3 spec. @@ -2496,8 +2496,10 @@ perform_request(S3Handle *hdl, } else { data_SHA256Hash = s3_compute_sha256_hash((unsigned char *)"", 0); } - } else if (md5_func) { + } + if (md5_func) { md5_hash = md5_func(read_data); + g_debug("md5_hash: %p", md5_hash); if (md5_hash) { md5_hash_b64 = s3_base64_encode(md5_hash); md5_hash_hex = s3_hex_encode(md5_hash); -- System Information: Debian Release: 12.9 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 6.1.0-31-amd64 (SMP w/12 CPU threads; PREEMPT) Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages amanda-server depends on: ii amanda-common 1:3.5.1-11+deb12u2aldebaran01 ii bsd-mailx [mailx] 8.1.2-0.20220412cvs-1 ii libc6 2.36-9+deb12u9 ii libcurl4 7.88.1-10+deb12u8 ii libglib2.0-0 2.74.6-2+deb12u5 ii libjson-perl 4.10000-1 ii perl 5.36.0-7+deb12u1 amanda-server recommends no packages. Versions of packages amanda-server suggests: ii amanda-client 1:3.5.1-11+deb12u2aldebaran01 ii cpio 2.13+dfsg-7.1 ii gnuplot-x11 [gnuplot] 5.4.4+dfsg1-2+b2 -- no debconf information