summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--user/iperf3/APKBUILD4
-rw-r--r--user/iperf3/time64.patch75
2 files changed, 78 insertions, 1 deletions
diff --git a/user/iperf3/APKBUILD b/user/iperf3/APKBUILD
index f238a7e13..b93c8a259 100644
--- a/user/iperf3/APKBUILD
+++ b/user/iperf3/APKBUILD
@@ -17,6 +17,7 @@ source="$pkgname-$pkgver.tar.gz::https://downloads.es.net/pub/$_pkgname/$_pkgnam
$_pkgname.confd
build-fixes.patch
+ time64.patch
"
builddir="$srcdir/$_pkgname-$pkgver"
@@ -48,4 +49,5 @@ package() {
sha512sums="4a2af8a6028b0f6bded9b3ac51c5463bc7595c9a2d2ac13f28b0e2e8dee0ac0a299e7817125e23e409f12e8e80862ed28d5541eef3cda7cd9f7104bb720165ce iperf3-3.9.tar.gz
339fb04b41cce11e8ea8694d95c13af9c88e0d1143356d913ec810c9b11efa27212d585b5dcc49cc2eb860a6d8bc557092c8659d7d5cfe532c5afdb36f8eedf8 iperf.initd
fb5e155fff568a72488cc1511d30358835a48bcce309f8f46d040160932b4a4ccb85040c27c60dee477900a25bd34c50eac21d1d0bea984b40faa401be2ba7e8 iperf.confd
-126043503eebf84bccf26758f18715eaf81131e2fc9ef1fe829e55acb2f14e97db18e9b890b8bf13c230ac80c7537615272af4e072808e25bde8ddd6f326f198 build-fixes.patch"
+126043503eebf84bccf26758f18715eaf81131e2fc9ef1fe829e55acb2f14e97db18e9b890b8bf13c230ac80c7537615272af4e072808e25bde8ddd6f326f198 build-fixes.patch
+5686858a8a220834e01ace8dd934f347c1fff952d1e30985cfb13eabef1eba82e467871323a9c544925230c4b7d7e67c71a2add59e85d30adcb3208e10e2df46 time64.patch"
diff --git a/user/iperf3/time64.patch b/user/iperf3/time64.patch
new file mode 100644
index 000000000..84806dc20
--- /dev/null
+++ b/user/iperf3/time64.patch
@@ -0,0 +1,75 @@
+From f19d964fd91a6f2b26aa70b6caa1290c3f6fdbc7 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 27 Sep 2020 19:56:15 -0500
+Subject: [PATCH] auth: Ensure 64-bit time_t works on 32-bit systems
+
+On a 32-bit PowerPC Linux system using musl libc (with 64-bit time_t),
+the t_auth test fails because `long` is not the same type as `time_t`.
+
+This patch uses an int64_t temporary value, which can be truncated to
+32-bit if necessary.
+---
+ src/iperf_auth.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/iperf_auth.c b/src/iperf_auth.c
+index eb4610f..a824deb 100644
+--- a/src/iperf_auth.c
++++ b/src/iperf_auth.c
+@@ -35,6 +35,8 @@
+ #define _WITH_GETLINE
+ #include <stdio.h>
+ #include <termios.h>
++#include <inttypes.h>
++#include <stdint.h>
+
+ #if defined(HAVE_SSL)
+
+@@ -45,7 +47,7 @@
+ #include <openssl/buffer.h>
+ #include <openssl/err.h>
+
+-const char *auth_text_format = "user: %s\npwd: %s\nts: %ld";
++const char *auth_text_format = "user: %s\npwd: %s\nts: %"PRId64;
+
+ void sha256(const char *string, char outputBuffer[65])
+ {
+@@ -291,7 +293,7 @@ int encode_auth_setting(const char *username, const char *password, EVP_PKEY *pu
+ if (text == NULL) {
+ return -1;
+ }
+- snprintf(text, text_len, auth_text_format, username, password, utc_seconds);
++ snprintf(text, text_len, auth_text_format, username, password, (int64_t)utc_seconds);
+
+ unsigned char *encrypted = NULL;
+ int encrypted_len;
+@@ -309,7 +311,8 @@ int encode_auth_setting(const char *username, const char *password, EVP_PKEY *pu
+ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *private_key, char **username, char **password, time_t *ts){
+ unsigned char *encrypted_b64 = NULL;
+ size_t encrypted_len_b64;
+- Base64Decode(authtoken, &encrypted_b64, &encrypted_len_b64);
++ int64_t utc_seconds;
++ Base64Decode(authtoken, &encrypted_b64, &encrypted_len_b64);
+
+ unsigned char *plaintext = NULL;
+ int plaintext_len;
+@@ -331,7 +334,7 @@ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *priva
+ return -1;
+ }
+
+- int rc = sscanf((char *) plaintext, auth_text_format, s_username, s_password, ts);
++ int rc = sscanf((char *) plaintext, auth_text_format, s_username, s_password, &utc_seconds);
+ if (rc != 3) {
+ free(s_password);
+ free(s_username);
+@@ -344,6 +347,7 @@ int decode_auth_setting(int enable_debug, const char *authtoken, EVP_PKEY *priva
+ }
+ *username = s_username;
+ *password = s_password;
++ *ts = (time_t)utc_seconds;
+ OPENSSL_free(plaintext);
+ return (0);
+ }
+--
+2.25.4
+