[dovecot-cvs] dovecot/src/master imap-process.c,1.7,1.8 settings.c,1.17,1.18 settings.h,1.11,1.12
cras at procontrol.fi
cras at procontrol.fi
Thu Nov 21 22:13:35 EET 2002
Update of /home/cvs/dovecot/src/master
In directory danu:/tmp/cvs-serv16852/src/master
Modified Files:
imap-process.c settings.c settings.h
Log Message:
Added mbox lock settings to config file. Support timeouting fcntl() and
flock() locks. Plus before the fcntl/flocks weren't even set.
Index: imap-process.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/imap-process.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- imap-process.c 12 Nov 2002 05:27:30 -0000 1.7
+++ imap-process.c 21 Nov 2002 20:13:32 -0000 1.8
@@ -133,6 +133,14 @@
if (umask(set_umask) != set_umask)
i_fatal("Invalid umask: %o", set_umask);
+ putenv((char *) t_strconcat("MBOX_LOCKS=", set_mbox_locks, NULL));
+ putenv((char *) t_strdup_printf("MBOX_LOCK_TIMEOUT=%u",
+ set_mbox_lock_timeout));
+ putenv((char *) t_strdup_printf("MBOX_DOTLOCK_CHANGE_TIMEOUT=%u",
+ set_mbox_dotlock_change_timeout));
+ if (set_mbox_read_dotlock)
+ putenv("MBOX_READ_DOTLOCK=1");
+
if (set_verbose_proctitle && net_ip2host(ip, host) == 0) {
i_snprintf(title, sizeof(title), "[%s %s]", user, host);
argv[2] = title;
Index: settings.c
===================================================================
RCS file: /home/cvs/dovecot/src/master/settings.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- settings.c 20 Nov 2002 19:20:23 -0000 1.17
+++ settings.c 21 Nov 2002 20:13:32 -0000 1.18
@@ -66,6 +66,11 @@
SET_BOOL,&set_maildir_copy_with_hardlinks },
{ "maildir_check_content_changes",
SET_BOOL,&set_maildir_check_content_changes },
+ { "mbox_locks", SET_STR, &set_mbox_locks, },
+ { "mbox_read_dotlock", SET_BOOL,&set_mbox_read_dotlock, },
+ { "mbox_lock_timeout", SET_INT, &set_mbox_lock_timeout, },
+ { "mbox_dotlock_change_timeout",
+ SET_INT, &set_mbox_dotlock_change_timeout, },
{ "overwrite_incompatible_index",
SET_BOOL,&set_overwrite_incompatible_index },
{ "umask", SET_INT, &set_umask },
@@ -118,6 +123,10 @@
int set_mail_save_crlf = FALSE;
int set_maildir_copy_with_hardlinks = FALSE;
int set_maildir_check_content_changes = FALSE;
+char *set_mbox_locks = "dotlock fcntl flock";
+int set_mbox_read_dotlock = FALSE;
+unsigned int set_mbox_lock_timeout = 300;
+unsigned int set_mbox_dotlock_change_timeout = 30;
int set_overwrite_incompatible_index = FALSE;
unsigned int set_umask = 0077;
@@ -154,6 +163,9 @@
static void settings_verify(void)
{
+ char *const *str;
+ int dotlock_got, fcntl_got, flock_got;
+
get_login_uid();
if (access(set_login_executable, X_OK) < 0) {
@@ -187,6 +199,35 @@
if (set_last_valid_gid != 0 &&
set_first_valid_gid > set_last_valid_gid)
i_fatal("first_valid_gid can't be larger than last_valid_gid");
+
+ dotlock_got = fcntl_got = flock_got = FALSE;
+ for (str = t_strsplit(set_mbox_locks, " "); *str != NULL; str++) {
+ if (strcasecmp(*str, "dotlock") == 0)
+ dotlock_got = TRUE;
+ else if (strcasecmp(*str, "fcntl") == 0)
+ fcntl_got = TRUE;
+ else if (strcasecmp(*str, "flock") == 0)
+ flock_got = TRUE;
+ else
+ i_fatal("mbox_locks: Invalid value %s", *str);
+ }
+
+#ifndef HAVE_FLOCK
+ if (fcntl_got && !dotlock_got && !flock_got) {
+ i_fatal("mbox_locks: Only flock selected, "
+ "and flock() isn't supported in this system");
+ }
+ flock_got = FALSE;
+#endif
+
+ if (!dotlock_got && !fcntl_got && !flock_got)
+ i_fatal("mbox_locks: No mbox locking methods selected");
+
+ if (dotlock_got && !set_mbox_read_dotlock && !fcntl_got && !flock_got) {
+ i_warning("mbox_locks: Only dotlock selected, forcing "
+ "mbox_read_dotlock = yes to avoid corruption.");
+ set_mbox_read_dotlock = TRUE;
+ }
auth_settings_verify();
}
Index: settings.h
===================================================================
RCS file: /home/cvs/dovecot/src/master/settings.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- settings.h 20 Nov 2002 19:20:23 -0000 1.11
+++ settings.h 21 Nov 2002 20:13:32 -0000 1.12
@@ -45,6 +45,10 @@
extern int set_mail_save_crlf;
extern int set_maildir_copy_with_hardlinks;
extern int set_maildir_check_content_changes;
+extern char *set_mbox_locks;
+extern int set_mbox_read_dotlock;
+extern unsigned int set_mbox_lock_timeout;
+extern unsigned int set_mbox_dotlock_change_timeout;
extern int set_overwrite_incompatible_index;
extern unsigned int set_umask;
More information about the dovecot-cvs
mailing list