Browse Source

PR#285 patch to use soft not hard limits with setrlimit(2)

Thomas Lotterer 22 years ago
parent
commit
5c99dbff19
2 changed files with 86 additions and 1 deletions
  1. 82 0
      postfix/postfix.patch
  2. 4 1
      postfix/postfix.spec

+ 82 - 0
postfix/postfix.patch

@@ -23,3 +23,85 @@ This patch drops the deprecated OpenLDAP API.
  #endif
      }
      if (msg_verbose)
+
+https://rt.openpkg.org/Ticket/Display.html?id=285
+    USE_SOFTLIMITONLY kludge
+
+Index: src/util/file_limit.c
+--- src/util/file_limit.c.orig	2000-08-22 23:44:44.000000000 +0200
++++ src/util/file_limit.c	2003-10-28 11:11:47.000000000 +0100
+@@ -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	2003-09-14 03:34:33.000000000 +0200
++++ src/util/msg_syslog.c	2003-10-28 11:14:00.000000000 +0100
+@@ -50,6 +50,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. */
+ 
+@@ -144,6 +149,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,
+     };
+@@ -154,6 +162,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(syslog_facility | log_level[level], "%.*s",
+ 	       (int) MSG_SYSLOG_RECLEN, text);
+@@ -161,6 +178,9 @@
+ 	syslog(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 */
+

+ 4 - 1
postfix/postfix.spec

@@ -39,7 +39,7 @@ Distribution: OpenPKG [BASE]
 Group:        Mail
 License:      IPL
 Version:      %{V_postfix}
-Release:      20031017
+Release:      20031028
 
 #   package options
 %option       with_fsl       yes
@@ -182,7 +182,10 @@ Conflicts:    exim, sendmail, ssmtp
     CCARGS="$CCARGS -DHAS_LDAP"
     AUXLIBS="$AUXLIBS -lldap -llber -lssl -lcrypto"
 %endif
+%if "%{with_fsl}" == "yes"
     AUXLIBS="$AUXLIBS %{l_fsl_ldflags} %{l_fsl_libs}"
+    CCARGS="$CCARGS -DUSE_SOFTLIMITONLY"
+%endif
 %if "%{with_fdsetsize}" != "no"
 %if "%{with_fdsetsize}" == "yes"
     CCARGS="$CCARGS -DFD_SETSIZE=1024"