Index: src/global/mail_params.h
--- src/global/mail_params.h.orig	2025-08-18 22:06:41.000000000 +0200
+++ src/global/mail_params.h	2025-08-23 10:28:42.069229000 +0200
@@ -14,7 +14,7 @@
  /*
   * This is to make it easier to auto-generate tables.
   */
-typedef int bool;
+#define bool int
 
 #ifdef USE_TLS
 #include <openssl/opensslv.h>		/* OPENSSL_VERSION_NUMBER */
Index: src/util/file_limit.c
--- src/util/file_limit.c.orig	2003-10-22 20:48:36.000000000 +0200
+++ src/util/file_limit.c	2025-08-23 10:28:21.052301000 +0200
@@ -80,12 +80,21 @@
 void    set_file_limit(off_t limit)
 {
 #ifdef USE_ULIMIT
+#ifdef USE_SOFTLIMITONLY
+#error "USE_ULIMIT and USE_SOFTLIMITONLY are mutual exclusive"
+#endif
     if (ulimit(UL_SETFSIZE, limit / ULIMIT_BLOCK_SIZE) < 0)
 	msg_fatal("ulimit: %m");
 #else
     struct rlimit rlim;
 
+#ifdef USE_SOFTLIMITONLY
+    if (getrlimit(RLIMIT_FSIZE, &rlim) < 0)
+        rlim.rlim_max = RLIM_INFINITY;
+    rlim.rlim_cur = limit;
+#else
     rlim.rlim_cur = rlim.rlim_max = limit;
+#endif
     if (setrlimit(RLIMIT_FSIZE, &rlim) < 0)
 	msg_fatal("setrlimit: %m");
 #ifdef SIGXFSZ
Index: src/util/msg_syslog.c
--- src/util/msg_syslog.c.orig	2019-01-29 23:24:42.000000000 +0100
+++ src/util/msg_syslog.c	2025-08-23 10:28:21.052392000 +0200
@@ -63,6 +63,11 @@
 #include <syslog.h>
 #include <string.h>
 #include <time.h>
+#ifdef USE_SOFTLIMITONLY
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <signal.h>
+#endif
 
 /* Application-specific. */
 
@@ -159,6 +164,9 @@
 
 static void msg_syslog_print(int level, const char *text)
 {
+#ifdef USE_SOFTLIMITONLY
+    struct rlimit save, rlim;
+#endif
     static int log_level[] = {
 	LOG_INFO, LOG_WARNING, LOG_ERR, LOG_CRIT, LOG_CRIT,
     };
@@ -172,6 +180,15 @@
     if (level < 0 || level >= (int) (sizeof(log_level) / sizeof(log_level[0])))
 	msg_panic("msg_syslog_print: invalid severity level: %d", level);
 
+#ifdef USE_SOFTLIMITONLY
+    if (getrlimit(RLIMIT_FSIZE, &save) < 0) {
+        save.rlim_cur = RLIM_INFINITY;
+        save.rlim_max = RLIM_INFINITY;
+    }
+    rlim.rlim_cur = save.rlim_max;
+    rlim.rlim_max = save.rlim_max;
+    (void)setrlimit(RLIMIT_FSIZE, &rlim);
+#endif
     if (level == MSG_INFO) {
 	syslog(msg_syslog_facility | log_level[level], "%.*s",
 	       (int) MSG_SYSLOG_RECLEN, text);
@@ -179,6 +196,9 @@
 	syslog(msg_syslog_facility | log_level[level], "%s: %.*s",
 	       severity_name[level], (int) MSG_SYSLOG_RECLEN, text);
     }
+#ifdef USE_SOFTLIMITONLY
+    (void)setrlimit(RLIMIT_FSIZE, &save);
+#endif
 }
 
 /* msg_syslog_init - initialize */
