[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