Lawrence Greenfield schrieb am Thu, Dec 06, 2001 at 01:43:14PM -0500:
* I'm pleased to announce Cyrus IMAP 2.1.0.
[...]
*
* We encourage people to download and test Cyrus IMAP 2.1.0.
[...]
As for 2.0.1x, when using the Cyrus IMAP in clustered environments such as
the kimberlite software provides, a situation can arise where multiple
Cyrus IMAP master processes run on the same machine with different con-
figurations and data structures.
Given this case, fixing the cyrus.conf via
#define CONFIG_FILENAME "/etc/cyrus.conf"
in master/masterconf.c poses a problem. Applied is the patch for 2.1.0
derived from a similar patch for 2.0.16 that makes it possible to specify
the configuration file for the master via a -C option as it is done already
for the imapd/lmtpd processes.
Maybe the patch will finally find its way into the main distribution of
the Cyrus IMAP package...
Regards,
- Birger
diff -ru cyrus-imapd-2.1.0-orig/doc/man/master.8.html
cyrus-imapd-2.1.0/doc/man/master.8.html
--- cyrus-imapd-2.1.0-orig/doc/man/master.8.html Thu Dec 6 19:09:13 2001
+++ cyrus-imapd-2.1.0/doc/man/master.8.html Sun Dec 9 13:53:02 2001
@@ -20,16 +20,17 @@
<!-- left margin: 100 -->
<!-- right margin: 750 -->
<a name="NAME"></a><h2>NAME</h2><p><font size=3>master - master Cyrus process</p>
-<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>master</B> <font size=3>[
<font size=3><B>-l</B> <font size=3><I>listen queue</I> <font size=3>] [ <font
size=3><B>-D</B> <font size=3>]</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>master</B> <font size=3>[
+<font size=3><B>-C</B> <font size=3><I>alternate configfile</I> <font size=3>] [
+<font size=3><B>-l</B> <font size=3><I>listen queue</I> <font size=3>] [ <font
+size=3><B>-D</B> <font size=3>]</p>
<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Master</I> <font
size=3>is the process that controls all of the Cyrus processes. This process is
responsible for creating all imapd, pop3d, lmtpd and sieved child processes. This
process also initializes the Berkeley DB code and performs sched- uled
cleanup/maintenance.</p>
<p><font size=3>If this process dies, then no new sessions will be started.</p>
<p><font size=3>It kills itself and all child processes when it receives a
SIGTERM.</p>
-<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-l</B> <font
size=3><I>listen queue backlog<br>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3>Tell
+master to use a configuration file other than /etc/cyrus.conf.</p>
+<p><font size=3><B>-l</B> <font size=3><I>listen queue backlog<br>
<span style=" text-indent: 1.3000in;"></span></I>Increase the listen queue backlog.
By default, the listen queue is set to 32. On systems<br>
<span style=" text-indent: 1.3000in;"></span>with a high connection rate, it may be
desirable to increase this value. refer to <font size=3><B>listen(2)</B> <font
size=3>for<br>
<span style=" text-indent: 1.3000in;"></span>details.</p>
<p><font size=3><B>-D</B> <font size=3>Don't close stdin/stdout/stderr. Primiarly
useful for debugging.</p>
-<a name="CONFIGURATION"></a><h2>CONFIGURATION</h2><p><font size=3>Upon execution,
<font size=3><I>master</I> <font size=3>reads its configuration information out of the
<font size=3><I>cyrus.conf</I><font size=3>(5) file.</p>
+<a name="CONFIGURATION"></a><h2>CONFIGURATION</h2><p><font size=3>Upon execution,
+<font size=3><I>master</I> <font size=3>reads its configuration information out of
+the <font size=3><I>cyrus.conf</I><font size=3>(5) file or the file specified by the
+-C option.</p>
<p><font size=3><I>Master</I> <font size=3>rereads its configuration file when it
receives a hangup signal, SIGHUP. Services and events may be added, deleted or
modified when the configuration file is reread. Any active services removed from the
configura- tion file will be allowed to run until completion.</p>
<a name="NOTES"></a><h2>NOTES</h2><p><font size=3>The environment variable <font
size=3><B>CYRUS_VERBOSE</B> <font size=3>can be set to log additional debugging
information. Setting the value to 1 results in base level logging. Setting it higher
results in more log messages being generated.</p>
<a name="FILES"></a><h2>FILES</h2><a name="/etc/cyrus.conf,
/etc/imapd.conf"></a><h2>/etc/cyrus.conf, /etc/imapd.conf</h2><a name="SEE
ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>cyrus.conf(5)</B><font size=3>, <font
size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>imapd(8)</B><font size=3>,
<font size=3><B>pop3d(8)</B><font size=3>, <font size=3><B>lmtpd(8)</B><font size=3>,
<font size=3><B>timsieved(8)</B><font size=3>, <font size=3><B>idled(8)</B><br>
diff -ru cyrus-imapd-2.1.0-orig/man/master.8 cyrus-imapd-2.1.0/man/master.8
--- cyrus-imapd-2.1.0-orig/man/master.8 Thu May 3 20:49:47 2001
+++ cyrus-imapd-2.1.0/man/master.8 Sun Dec 9 13:48:07 2001
@@ -44,6 +44,10 @@
.SH SYNOPSIS
.B master
[
+.B \-C
+.I configfile
+]
+[
.B \-l
.I listen queue
]
@@ -63,6 +67,9 @@
when it receives a SIGTERM.
.SH OPTIONS
.TP
+.BI \-C " alternate configfile"
+Tell master to use a configuration file other than /etc/cyrus.conf.
+.TP
.BI \-l " listen queue backlog"
Increase the listen queue backlog. By default, the listen queue is set
to 32. On systems with a high connection rate, it may be desirable
@@ -75,7 +82,7 @@
.I master
reads its configuration information out of the
.IR cyrus.conf (5)
-file.
+file or the file specified by the -C option.
.PP
.I Master
rereads its configuration file when it receives a hangup signal,
diff -ru cyrus-imapd-2.1.0-orig/master/master.c cyrus-imapd-2.1.0/master/master.c
--- cyrus-imapd-2.1.0-orig/master/master.c Tue Nov 13 21:00:06 2001
+++ cyrus-imapd-2.1.0/master/master.c Sun Dec 9 13:41:07 2001
@@ -103,6 +103,7 @@
static int verbose = 0;
static int listen_queue_backlog = 32;
+char config_filename[255] = "/etc/cyrus.conf";
struct service *Services = NULL;
int allocservices = 0;
@@ -1047,8 +1048,11 @@
p = getenv("CYRUS_VERBOSE");
if (p) verbose = atoi(p) + 1;
- while ((opt = getopt(argc, argv, "l:D")) != EOF) {
+ while ((opt = getopt(argc, argv, "C:l:D")) != EOF) {
switch (opt) {
+ case 'C': /* user defined cyrus.conf */
+ strncpy(config_filename, optarg, sizeof(config_filename));
+ break;
case 'l': /* user defined listen queue backlog */
listen_queue_backlog = atoi(optarg);
break;
diff -ru cyrus-imapd-2.1.0-orig/master/masterconf.c
cyrus-imapd-2.1.0/master/masterconf.c
--- cyrus-imapd-2.1.0-orig/master/masterconf.c Mon Sep 3 21:36:07 2001
+++ cyrus-imapd-2.1.0/master/masterconf.c Sun Dec 9 13:41:07 2001
@@ -59,7 +59,7 @@
extern int errno;
-#define CONFIG_FILENAME "/etc/cyrus.conf"
+extern char config_filename[255];
struct configlist {
char *key;
@@ -102,7 +102,7 @@
}
if (*p != '"') {
sprintf(k, "configuration file %s: missing \" on line %d",
- CONFIG_FILENAME, e->lineno);
+ config_filename, e->lineno);
fatal(k, EX_CONFIG);
}
} else {
@@ -198,9 +198,9 @@
int lineno = 0;
char buf[4096];
- infile = fopen(CONFIG_FILENAME, "r");
+ infile = fopen(config_filename, "r");
if (!infile) {
- sprintf(buf, "can't open configuration file %s: %s", CONFIG_FILENAME,
+ sprintf(buf, "can't open configuration file %s: %s", config_filename,
strerror(errno));
fatal(buf, EX_CONFIG);
}