Hello!
We're uging DBMail 2.2.5 from EPEL (Extra Packages for Enterprise Linux by
RedHat/Fedora Project) -
http://download.fedora.redhat.com/pub/epel/5/i386/repoview/dbmail.html .
Sources of dbmail from EPEL contains next patch:
------------------------ begin patch
Index: server.c
===================================================================
--- server.c (revision 2646)
+++ server.c (revision 2647)
@@ -172,20 +172,36 @@
return Restart;
}
-pid_t server_daemonize(serverConfig_t *conf)
+/* Should be called after a HUP to allow for log rotation,
+ * as the filesystem may want to give us new inodes and/or
+ * the user may have changed the log file configs. */
+static void reopen_logs(serverConfig_t *conf)
{
int serr;
- assert(conf);
+
+ if (! (freopen(conf->log, "a", stdout))) {
+ serr = errno;
+ TRACE(TRACE_ERROR, "freopen failed on [%s] [%s]",
+ conf->log, strerror(serr));
+ }
+ if (! (freopen(conf->error_log, "a", stderr))) {
+ serr = errno;
+ TRACE(TRACE_ERROR, "freopen failed on [%s] [%s]",
+ conf->error_log, strerror(serr));
+ }
+ if (! (freopen("/dev/null", "r", stdin))) {
+ serr = errno;
+ TRACE(TRACE_ERROR, "freopen failed on stdin [%s]",
+ strerror(serr));
+ }
+}
- if (fork())
- exit(0);
- setsid();
- if (fork())
- exit(0);
+/* Should be called once to initially close the actual std{in,out,err}
+ * and open the redirection files. */
+static void reopen_logs_fatal(serverConfig_t *conf)
+{
+ int serr;
- chdir("/");
- umask(0077);
-
if (! (freopen(conf->log, "a", stdout))) {
serr = errno;
TRACE(TRACE_FATAL, "freopen failed on [%s] [%s]",
@@ -201,7 +217,23 @@
TRACE(TRACE_FATAL, "freopen failed on stdin [%s]",
strerror(serr));
}
+}
+pid_t server_daemonize(serverConfig_t *conf)
+{
+ assert(conf);
+
+ if (fork())
+ exit(0);
+ setsid();
+ if (fork())
+ exit(0);
+
+ chdir("/");
+ umask(0077);
+
+ reopen_logs_fatal(conf);
+
TRACE(TRACE_DEBUG, "sid: [%d]", getsid(0));
return getsid(0);
@@ -225,6 +257,8 @@
int serrno, status, result = 0;
pid_t pid = -1;
+ reopen_logs(conf);
+
CreateSocket(conf);
switch ((pid = fork())) {
------------------------ end patch
I noticed than exist bug http://dbmail.org/mantis/view.php?id=600 .
DBMail built with patch above but in any case dbmail-imapd just stop sometimes
on logrotate (e.g. receiving SIGHUP).
How to solve this problem?
--
Ilyas
_______________________________________________
DBmail mailing list
[email protected]
https://mailman.fastxs.nl/mailman/listinfo/dbmail