Hi, please find a debdiff attached which adds the necessary time64 redirect magic on 32bit platforms (which enable time_t 64-bit).
I cannot readily test the interposer library, but I think it should work. Best, Chris
diff -Nru dante-1.4.4+dfsg/debian/changelog dante-1.4.4+dfsg/debian/changelog --- dante-1.4.4+dfsg/debian/changelog 2025-12-13 16:27:01.000000000 +0100 +++ dante-1.4.4+dfsg/debian/changelog 2026-08-01 16:55:11.000000000 +0200 @@ -1,3 +1,10 @@ +dante (1.4.4+dfsg-1.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * fix time64 redirects + + -- Chris Hofstaedtler <[email protected]> Sat, 01 Aug 2026 16:55:11 +0200 + dante (1.4.4+dfsg-1) unstable; urgency=medium [ 何庆 Ching He ] diff -Nru dante-1.4.4+dfsg/debian/libdsocksd0t64.symbols dante-1.4.4+dfsg/debian/libdsocksd0t64.symbols --- dante-1.4.4+dfsg/debian/libdsocksd0t64.symbols 2025-12-13 16:27:01.000000000 +0100 +++ dante-1.4.4+dfsg/debian/libdsocksd0t64.symbols 2026-08-01 16:55:11.000000000 +0200 @@ -1,4 +1,7 @@ libdsocksd.so.0 libdsocksd0t64 #MINVER# + (arch=armel armhf)__getsockopt64@Base 1.4.4+dfsg-1 + (arch=armel armhf)__recvmsg64@Base 1.4.4+dfsg-1 + (arch=armel armhf)__sendmsg64@Base 1.4.4+dfsg-1 accept@Base 1.4.1+dfsg bind@Base 1.4.1+dfsg bindresvport@Base 1.4.1+dfsg diff -Nru dante-1.4.4+dfsg/debian/patches/glibc-time64-redirects.patch dante-1.4.4+dfsg/debian/patches/glibc-time64-redirects.patch --- dante-1.4.4+dfsg/debian/patches/glibc-time64-redirects.patch 1970-01-01 01:00:00.000000000 +0100 +++ dante-1.4.4+dfsg/debian/patches/glibc-time64-redirects.patch 2026-08-01 16:55:11.000000000 +0200 @@ -0,0 +1,240 @@ +--- a/dlib/interposition.c ++++ b/dlib/interposition.c +@@ -161,6 +161,42 @@ + #undef sendto + #undef write + #undef writev ++ ++#if defined(__GLIBC__) \ ++&& (defined(__USE_TIME64_REDIRECTS) \ ++ || (defined(__USE_TIME_BITS64) && defined(__TIMESIZE) && __TIMESIZE == 32)) ++ ++/* ++ * On _TIME_BITS=64 platforms, sys/socket.h redirects the declarations ++ * of getsockopt, recvmsg, sendmsg to __getsockopt64, __recvmsg64, __sendmsg64 ++ * respectively. ++ * Unfortunately this also redirects our functions below, so we end up defining ++ * the __*64 symbols. ++ * On such platforms we need to interpose both the __*64 and the original symbols, ++ * to cover programs compiled with the original 32bit headers. ++ */ ++ ++#define SOCKS_TIME64_REDIRECTS 1 ++ ++#define SYMBOL_GETSOCKOPT64 SYMBOLPREFIX "__getsockopt64" ++#define SYMBOL_RECVMSG64 SYMBOLPREFIX "__recvmsg64" ++#define SYMBOL_SENDMSG64 SYMBOLPREFIX "__sendmsg64" ++ ++/* the libc symbols matching the ABI this library is compiled with. */ ++#define SYMBOL_GETSOCKOPT_NATIVE SYMBOL_GETSOCKOPT64 ++#define SYMBOL_RECVMSG_NATIVE SYMBOL_RECVMSG64 ++#define SYMBOL_SENDMSG_NATIVE SYMBOL_SENDMSG64 ++ ++#else /* !glibc time64 redirects */ ++ ++#define SOCKS_TIME64_REDIRECTS 0 ++ ++#define SYMBOL_GETSOCKOPT_NATIVE SYMBOL_GETSOCKOPT ++#define SYMBOL_RECVMSG_NATIVE SYMBOL_RECVMSG ++#define SYMBOL_SENDMSG_NATIVE SYMBOL_SENDMSG ++ ++#endif /* !glibc time64 redirects */ ++ + #if HAVE_GSSAPI && HAVE_LINUX_GLIBC_WORKAROUND + #undef getc + #undef fgetc +@@ -236,6 +272,12 @@ + { SYMBOL_WRITE, LIBRARY_WRITE, NULL, NULL, NULL }, + { SYMBOL_WRITEV, LIBRARY_WRITEV, NULL, NULL, NULL }, + ++#if SOCKS_TIME64_REDIRECTS ++{ SYMBOL_GETSOCKOPT64, LIBRARY_GETSOCKOPT, NULL, NULL, NULL }, ++{ SYMBOL_RECVMSG64, LIBRARY_RECVMSG, NULL, NULL, NULL }, ++{ SYMBOL_SENDMSG64, LIBRARY_SENDMSG, NULL, NULL, NULL }, ++#endif /* SOCKS_TIME64_REDIRECTS */ ++ + { SYMBOL_GETHOSTBYNAME, LIBRARY_GETHOSTBYNAME, NULL, NULL, NULL }, + + #if HAVE_GETHOSTBYNAME2 +@@ -966,7 +1008,7 @@ + HAVE_PROT_GETSOCKOPT_4, + HAVE_PROT_GETSOCKOPT_5); + GETSOCKOPT_FUNC_T function +- = (GETSOCKOPT_FUNC_T)symbolfunction(SYMBOL_GETSOCKOPT); ++ = (GETSOCKOPT_FUNC_T)symbolfunction(SYMBOL_GETSOCKOPT_NATIVE); + const int tagged = (doing_addrinit ? 0 : 1); + + if (tagged) +@@ -1122,7 +1164,8 @@ + typedef HAVE_PROT_RECVMSG_0 (*RECVMSG_FUNC_T)(HAVE_PROT_RECVMSG_1, + HAVE_PROT_RECVMSG_2, + HAVE_PROT_RECVMSG_3); +- RECVMSG_FUNC_T function = (RECVMSG_FUNC_T)symbolfunction(SYMBOL_RECVMSG); ++ RECVMSG_FUNC_T function ++ = (RECVMSG_FUNC_T)symbolfunction(SYMBOL_RECVMSG_NATIVE); + const int tagged = (doing_addrinit ? 0 : 1); + + if (tagged) +@@ -1187,7 +1230,8 @@ + typedef HAVE_PROT_SENDMSG_0 (*SENDMSG_FUNC_T)(HAVE_PROT_SENDMSG_1, + HAVE_PROT_SENDMSG_2, + HAVE_PROT_SENDMSG_3); +- SENDMSG_FUNC_T function = (SENDMSG_FUNC_T)symbolfunction(SYMBOL_SENDMSG); ++ SENDMSG_FUNC_T function ++ = (SENDMSG_FUNC_T)symbolfunction(SYMBOL_SENDMSG_NATIVE); + const int tagged = (doing_addrinit ? 0 : 1); + + if (tagged) +@@ -1874,6 +1918,143 @@ + } + #endif /* HAVE_EXTRA_OSF_SYMBOLS */ + ++#if SOCKS_TIME64_REDIRECTS ++ ++/* ++ * 32-bit time_t variants, for programs defined before time_t-64bit became ++ * default. The original names can not be defined directly, as glibc's headers ++ * redirect them, so asm labels are used. ++ */ ++ ++static HAVE_PROT_GETSOCKOPT_0 ++sys_getsockopt_time32(HAVE_PROT_GETSOCKOPT_1 s, ++ HAVE_PROT_GETSOCKOPT_2 level, ++ HAVE_PROT_GETSOCKOPT_3 optname, ++ HAVE_PROT_GETSOCKOPT_4 optval, ++ HAVE_PROT_GETSOCKOPT_5 optlen) ++{ ++ int rc; ++ typedef HAVE_PROT_GETSOCKOPT_0 ++ (*GETSOCKOPT_FUNC_T)(HAVE_PROT_GETSOCKOPT_1, ++ HAVE_PROT_GETSOCKOPT_2, ++ HAVE_PROT_GETSOCKOPT_3, ++ HAVE_PROT_GETSOCKOPT_4, ++ HAVE_PROT_GETSOCKOPT_5); ++ GETSOCKOPT_FUNC_T function ++ = (GETSOCKOPT_FUNC_T)symbolfunction(SYMBOL_GETSOCKOPT); ++ const int tagged = (doing_addrinit ? 0 : 1); ++ ++ if (tagged) ++ socks_syscall_start(s); ++ ++ rc = function(s, level, optname, optval, optlen); ++ ++ if (tagged) ++ socks_syscall_end(s); ++ ++ return rc; ++} ++ ++static HAVE_PROT_RECVMSG_0 ++sys_recvmsg_time32(HAVE_PROT_RECVMSG_1 s, ++ HAVE_PROT_RECVMSG_2 msg, ++ HAVE_PROT_RECVMSG_3 flags) ++{ ++ ssize_t rc; ++ typedef HAVE_PROT_RECVMSG_0 (*RECVMSG_FUNC_T)(HAVE_PROT_RECVMSG_1, ++ HAVE_PROT_RECVMSG_2, ++ HAVE_PROT_RECVMSG_3); ++ RECVMSG_FUNC_T function = (RECVMSG_FUNC_T)symbolfunction(SYMBOL_RECVMSG); ++ const int tagged = (doing_addrinit ? 0 : 1); ++ ++ if (tagged) ++ socks_syscall_start(s); ++ ++ rc = function(s, msg, flags); ++ ++ if (tagged) ++ socks_syscall_end(s); ++ ++ return rc; ++} ++ ++static HAVE_PROT_SENDMSG_0 ++sys_sendmsg_time32(HAVE_PROT_SENDMSG_1 s, ++ HAVE_PROT_SENDMSG_2 msg, ++ HAVE_PROT_SENDMSG_3 flags) ++{ ++ ssize_t rc; ++ typedef HAVE_PROT_SENDMSG_0 (*SENDMSG_FUNC_T)(HAVE_PROT_SENDMSG_1, ++ HAVE_PROT_SENDMSG_2, ++ HAVE_PROT_SENDMSG_3); ++ SENDMSG_FUNC_T function = (SENDMSG_FUNC_T)symbolfunction(SYMBOL_SENDMSG); ++ const int tagged = (doing_addrinit ? 0 : 1); ++ ++ if (tagged) ++ socks_syscall_start(s); ++ ++ rc = function(s, msg, flags); ++ ++ if (tagged) ++ socks_syscall_end(s); ++ ++ return rc; ++} ++ ++HAVE_PROT_GETSOCKOPT_0 ++getsockopt_time32(HAVE_PROT_GETSOCKOPT_1 s, ++ HAVE_PROT_GETSOCKOPT_2 level, ++ HAVE_PROT_GETSOCKOPT_3 optname, ++ HAVE_PROT_GETSOCKOPT_4 optval, ++ HAVE_PROT_GETSOCKOPT_5 optlen) ++ __asm__("getsockopt"); ++ ++HAVE_PROT_GETSOCKOPT_0 ++getsockopt_time32(HAVE_PROT_GETSOCKOPT_1 s, ++ HAVE_PROT_GETSOCKOPT_2 level, ++ HAVE_PROT_GETSOCKOPT_3 optname, ++ HAVE_PROT_GETSOCKOPT_4 optval, ++ HAVE_PROT_GETSOCKOPT_5 optlen) ++{ ++ if (socks_issyscall(s, SYMBOL_GETSOCKOPT)) ++ return sys_getsockopt_time32(s, level, optname, optval, optlen); ++ return Rgetsockopt(s, level, optname, optval, optlen); ++} ++ ++HAVE_PROT_RECVMSG_0 ++recvmsg_time32(HAVE_PROT_RECVMSG_1 s, ++ HAVE_PROT_RECVMSG_2 msg, ++ HAVE_PROT_RECVMSG_3 flags) ++ __asm__("recvmsg"); ++ ++HAVE_PROT_RECVMSG_0 ++recvmsg_time32(HAVE_PROT_RECVMSG_1 s, ++ HAVE_PROT_RECVMSG_2 msg, ++ HAVE_PROT_RECVMSG_3 flags) ++{ ++ if (socks_issyscall(s, SYMBOL_RECVMSG)) ++ return sys_recvmsg_time32(s, msg, flags); ++ return Rrecvmsg(s, msg, flags); ++} ++ ++HAVE_PROT_SENDMSG_0 ++sendmsg_time32(HAVE_PROT_SENDMSG_1 s, ++ HAVE_PROT_SENDMSG_2 msg, ++ HAVE_PROT_SENDMSG_3 flags) ++ __asm__("sendmsg"); ++ ++HAVE_PROT_SENDMSG_0 ++sendmsg_time32(HAVE_PROT_SENDMSG_1 s, ++ HAVE_PROT_SENDMSG_2 msg, ++ HAVE_PROT_SENDMSG_3 flags) ++{ ++ if (socks_issyscall(s, SYMBOL_SENDMSG)) ++ return sys_sendmsg_time32(s, msg, flags); ++ return Rsendmsg(s, msg, flags); ++} ++ ++#endif /* SOCKS_TIME64_REDIRECTS */ ++ + #if !HAVE_EXTRA_OSF_SYMBOLS + HAVE_PROT_SENDTO_0 + sendto(s, msg, len, flags, to, tolen) +--- a/include/symbols_preload.txt ++++ b/include/symbols_preload.txt +@@ -22,3 +22,6 @@ + sendto + write + writev ++__getsockopt64 ++__recvmsg64 ++__sendmsg64 diff -Nru dante-1.4.4+dfsg/debian/patches/series dante-1.4.4+dfsg/debian/patches/series --- dante-1.4.4+dfsg/debian/patches/series 2025-12-13 16:27:01.000000000 +0100 +++ dante-1.4.4+dfsg/debian/patches/series 2026-08-01 16:08:07.000000000 +0200 @@ -16,3 +16,4 @@ implicit.patch sbin-ldconfig.patch reencode-files-as-utf-8.patch +glibc-time64-redirects.patch

