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

Reply via email to