dovecot-1.1: Added a new maildirlock utility for write-locking D...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Jul 8 16:49:35 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/5c99822d2672
changeset: 7731:5c99822d2672
user: Timo Sirainen <tss at iki.fi>
date: Tue Jul 08 19:19:21 2008 +0530
description:
Added a new maildirlock utility for write-locking Dovecot MMaildir.
diffstat:
2 files changed, 75 insertions(+), 6 deletions(-)
src/util/Makefile.am | 12 ++++----
src/util/maildirlock.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++
diffs (124 lines):
diff -r 6f4db98cdec9 -r 5c99822d2672 src/util/Makefile.am
--- a/src/util/Makefile.am Tue Jul 08 19:18:17 2008 +0530
+++ b/src/util/Makefile.am Tue Jul 08 19:19:21 2008 +0530
@@ -1,6 +1,6 @@ pkglibexecdir = $(libexecdir)/dovecot
pkglibexecdir = $(libexecdir)/dovecot
-pkglibexec_PROGRAMS = rawlog gdbhelper idxview listview logview
+pkglibexec_PROGRAMS = rawlog gdbhelper idxview listview logview maildirlock
sbin_PROGRAMS = dovecotpw
AM_CPPFLAGS = \
@@ -11,34 +11,34 @@ AM_CPPFLAGS = \
rawlog_LDADD = \
../lib/liblib.a
-
rawlog_SOURCES = \
rawlog.c
gdbhelper_LDADD = \
../lib/liblib.a
-
gdbhelper_SOURCES = \
gdbhelper.c
idxview_LDADD = \
../lib-index/libindex.a \
../lib/liblib.a
-
idxview_SOURCES = \
idxview.c
listview_LDADD = \
../lib/liblib.a
-
listview_SOURCES = \
listview.c
logview_LDADD = \
../lib/liblib.a
-
logview_SOURCES = \
logview.c
+
+maildirlock_LDADD = \
+ ../lib/liblib.a
+maildirlock_SOURCES = \
+ maildirlock.c
dovecotpw_LDADD = \
../auth/libpassword.a \
diff -r 6f4db98cdec9 -r 5c99822d2672 src/util/maildirlock.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/util/maildirlock.c Tue Jul 08 19:19:21 2008 +0530
@@ -0,0 +1,69 @@
+/* Copyright (c) 2008 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "lib-signals.h"
+#include "ioloop.h"
+#include "file-dotlock.h"
+#include "src/lib-storage/index/maildir/maildir-uidlist.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+
+static struct dotlock_settings dotlock_settings = {
+ MEMBER(temp_prefix) NULL,
+ MEMBER(lock_suffix) NULL,
+ MEMBER(timeout) 0,
+ MEMBER(stale_timeout) MAILDIR_UIDLIST_LOCK_STALE_TIMEOUT,
+ MEMBER(use_excl_lock) FALSE,
+ MEMBER(nfs_flush) FALSE,
+ MEMBER(use_io_notify) TRUE
+};
+
+static struct ioloop *ioloop;
+
+static void sig_die(int signo ATTR_UNUSED, void *context ATTR_UNUSED)
+{
+ io_loop_stop(ioloop);
+}
+
+static int maildir_lock(const char *path, unsigned int timeout,
+ struct dotlock **dotlock_r)
+{
+ dotlock_settings.timeout = timeout;
+ dotlock_settings.use_excl_lock = getenv("DOTLOCK_USE_EXCL") != NULL;
+ dotlock_settings.nfs_flush = getenv("MAIL_NFS_STORAGE") != NULL;
+
+ return file_dotlock_create(&dotlock_settings, path, 0, dotlock_r);
+}
+
+int main(int argc, const char *argv[])
+{
+ struct dotlock *dotlock;
+ unsigned int timeout;
+
+ lib_init();
+ ioloop = io_loop_create();
+
+ if (argc != 3) {
+ printf("Usage: maildirlock <path> <timeout>\n"
+ " - SIGTERM will release the lock.\n");
+ return 1;
+ }
+
+ timeout = strtoul(argv[2], NULL, 10);
+ if (maildir_lock(argv[1], timeout, &dotlock) <= 0)
+ return 1;
+
+ lib_signals_init();
+ lib_signals_set_handler(SIGINT, TRUE, sig_die, NULL);
+ lib_signals_set_handler(SIGTERM, TRUE, sig_die, NULL);
+ io_loop_run(ioloop);
+
+ file_dotlock_delete(&dotlock);
+ lib_signals_deinit();
+
+ io_loop_destroy(&ioloop);
+ lib_deinit();
+ return 0;
+}
More information about the dovecot-cvs
mailing list