dovecot-2.0-sslstream: lib-storage: Removed mailbox_list_get_gui...

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:57:19 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/f20bced53213
changeset: 10544:f20bced53213
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Dec 31 13:46:24 2009 -0500
description:
lib-storage: Removed mailbox_list_get_guid().
Directory GUIDs are pretty pointless.

diffstat:

14 files changed, 17 insertions(+), 156 deletions(-)
src/lib-storage/index/cydir/cydir-storage.c      |    2 
src/lib-storage/index/cydir/cydir-storage.h      |    1 
src/lib-storage/index/dbox-common/dbox-storage.c |    2 
src/lib-storage/index/dbox-common/dbox-storage.h |    1 
src/lib-storage/index/maildir/maildir-storage.c  |    8 -
src/lib-storage/index/maildir/maildir-storage.h  |    1 
src/lib-storage/index/mbox/mbox-storage.c        |   15 --
src/lib-storage/index/mbox/mbox-storage.h        |    1 
src/lib-storage/index/shared/shared-list.c       |    3 
src/lib-storage/list/mailbox-list-fs.c           |    1 
src/lib-storage/list/mailbox-list-maildir.c      |    2 
src/lib-storage/mailbox-list-private.h           |    4 
src/lib-storage/mailbox-list.c                   |  128 +---------------------
src/lib-storage/mailbox-list.h                   |    4 

diffs (truncated from 388 to 300 lines):

diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/cydir/cydir-storage.c
--- a/src/lib-storage/index/cydir/cydir-storage.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/cydir/cydir-storage.c	Thu Dec 31 13:46:24 2009 -0500
@@ -46,8 +46,6 @@ cydir_storage_get_list_settings(const st
 		set->layout = MAILBOX_LIST_NAME_FS;
 	if (set->subscription_fname == NULL)
 		set->subscription_fname = CYDIR_SUBSCRIPTION_FILE_NAME;
-	if (set->dir_guid_fname == NULL)
-		set->dir_guid_fname = CYDIR_DIR_GUID_FILE_NAME;
 }
 
 static int create_cydir(struct mail_storage *storage, struct mailbox_list *list,
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/cydir/cydir-storage.h
--- a/src/lib-storage/index/cydir/cydir-storage.h	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/cydir/cydir-storage.h	Thu Dec 31 13:46:24 2009 -0500
@@ -7,7 +7,6 @@
 #define CYDIR_STORAGE_NAME "cydir"
 #define CYDIR_SUBSCRIPTION_FILE_NAME "subscriptions."
 #define CYDIR_INDEX_PREFIX "dovecot.index"
-#define CYDIR_DIR_GUID_FILE_NAME "dovecot.dir.guid."
 
 struct cydir_storage {
 	struct mail_storage storage;
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/dbox-common/dbox-storage.c
--- a/src/lib-storage/index/dbox-common/dbox-storage.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/dbox-common/dbox-storage.c	Thu Dec 31 13:46:24 2009 -0500
@@ -21,8 +21,6 @@ void dbox_storage_get_list_settings(cons
 		set->layout = MAILBOX_LIST_NAME_FS;
 	if (set->subscription_fname == NULL)
 		set->subscription_fname = DBOX_SUBSCRIPTION_FILE_NAME;
-	if (set->dir_guid_fname == NULL)
-		set->dir_guid_fname = DBOX_DIR_GUID_FILE_NAME;
 	if (set->maildir_name == NULL)
 		set->maildir_name = DBOX_MAILDIR_NAME;
 	if (set->mailbox_dir_name == NULL)
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/dbox-common/dbox-storage.h
--- a/src/lib-storage/index/dbox-common/dbox-storage.h	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/dbox-common/dbox-storage.h	Thu Dec 31 13:46:24 2009 -0500
@@ -9,7 +9,6 @@ struct dbox_mail;
 #define DBOX_SUBSCRIPTION_FILE_NAME "subscriptions"
 #define DBOX_UIDVALIDITY_FILE_NAME "dovecot-uidvalidity"
 #define DBOX_INDEX_PREFIX "dovecot.index"
-#define DBOX_DIR_GUID_FILE_NAME "dbox-GUID"
 
 #define DBOX_MAILBOX_DIR_NAME "mailboxes"
 #define DBOX_TRASH_DIR_NAME "trash"
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/maildir/maildir-storage.c
--- a/src/lib-storage/index/maildir/maildir-storage.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Thu Dec 31 13:46:24 2009 -0500
@@ -142,8 +142,6 @@ static void maildir_storage_get_list_set
 		set->layout = MAILBOX_LIST_NAME_MAILDIRPLUSPLUS;
 	if (set->subscription_fname == NULL)
 		set->subscription_fname = MAILDIR_SUBSCRIPTION_FILE_NAME;
-	if (set->dir_guid_fname == NULL)
-		set->dir_guid_fname = MAILDIR_DIR_GUID_FILE_NAME;
 
 	if (set->inbox_path == NULL &&
 	    (strcmp(set->layout, MAILBOX_LIST_NAME_MAILDIRPLUSPLUS) == 0 ||
@@ -783,13 +781,12 @@ maildir_list_delete_mailbox(struct mailb
 {
 	union mailbox_list_module_context *mlist = MAILDIR_LIST_CONTEXT(list);
 	uint8_t mailbox_guid[MAIL_GUID_128_SIZE];
-	uint8_t dir_guid[MAIL_GUID_128_SIZE];
+	uint8_t dir_sha128[MAIL_GUID_128_SIZE];
 	struct stat st;
 	const char *src, *dest, *base;
 	int ret;
 
 	mailbox_get_guid(list, name, mailbox_guid);
-	(void)mailbox_list_get_guid(list, name, dir_guid);
 
 	/* Make sure the indexes are closed before trying to delete the
 	   directory that contains them. It can still fail with some NFS
@@ -844,8 +841,9 @@ maildir_list_delete_mailbox(struct mailb
 	if (ret == 0) {
 		mailbox_list_add_change(list, MAILBOX_LOG_RECORD_DELETE_MAILBOX,
 					mailbox_guid);
+		mailbox_name_get_sha128(name, dir_sha128);
 		mailbox_list_add_change(list, MAILBOX_LOG_RECORD_DELETE_DIR,
-					dir_guid);
+					dir_sha128);
 	}
 	return 0;
 }
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/maildir/maildir-storage.h
--- a/src/lib-storage/index/maildir/maildir-storage.h	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/maildir/maildir-storage.h	Thu Dec 31 13:46:24 2009 -0500
@@ -8,7 +8,6 @@
 #define MAILDIR_INDEX_PREFIX "dovecot.index"
 #define MAILDIR_UNLINK_DIRNAME "DOVECOT-TRASHED"
 #define MAILDIR_UIDVALIDITY_FNAME "dovecot-uidvalidity"
-#define MAILDIR_DIR_GUID_FILE_NAME "dovecot-dir-guid"
 
 /* "base,S=123:2," means:
    <base> [<extra sep> <extra data> [..]] <info sep> 2 <flags sep> */
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/mbox/mbox-storage.c
--- a/src/lib-storage/index/mbox/mbox-storage.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/mbox/mbox-storage.c	Thu Dec 31 13:46:24 2009 -0500
@@ -822,20 +822,6 @@ static int mbox_list_delete_mailbox(stru
 	return 0;
 }
 
-static int mbox_get_guid(struct mailbox_list *list, const char *name,
-			 uint8_t mailbox_guid[MAIL_GUID_128_SIZE])
-{
-	const char *dir, *path;
-
-	memset(mailbox_guid, 0, MAIL_GUID_128_SIZE);
-	dir = mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_INDEX);
-	if (index_list_create_missing_index_dir(list, name) < 0)
-		return -1;
-	path = t_strconcat(dir, "/"MBOX_DIR_GUID_FILE_NAME, NULL);
-
-	return mailbox_list_get_guid_path(list, path, mailbox_guid);
-}
-
 static void mbox_storage_add_list(struct mail_storage *storage,
 				  struct mailbox_list *list)
 {
@@ -854,7 +840,6 @@ static void mbox_storage_add_list(struct
 	list->v.delete_mailbox = mbox_list_delete_mailbox;
 	list->v.is_valid_existing_name = mbox_is_valid_existing_name;
 	list->v.is_valid_create_name = mbox_is_valid_create_name;
-	list->v.get_guid = mbox_get_guid;
 
 	MODULE_CONTEXT_SET(list, mbox_mailbox_list_module, mlist);
 }
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/mbox/mbox-storage.h
--- a/src/lib-storage/index/mbox/mbox-storage.h	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/mbox/mbox-storage.h	Thu Dec 31 13:46:24 2009 -0500
@@ -14,7 +14,6 @@
 #define MBOX_SUBSCRIPTION_FILE_NAME ".subscriptions"
 #define MBOX_INDEX_PREFIX "dovecot.index"
 #define MBOX_INDEX_DIR_NAME ".imap"
-#define MBOX_DIR_GUID_FILE_NAME "dovecot-dir-guid"
 
 struct mbox_index_header {
 	uint64_t sync_size;
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/index/shared/shared-list.c
--- a/src/lib-storage/index/shared/shared-list.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/index/shared/shared-list.c	Thu Dec 31 13:46:24 2009 -0500
@@ -325,7 +325,6 @@ struct mailbox_list shared_mailbox_list 
 		shared_list_set_subscribed,
 		shared_list_delete_mailbox,
 		shared_list_rename_mailbox,
-		shared_list_rename_mailbox_pre,
-		NULL
+		shared_list_rename_mailbox_pre
 	}
 };
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/list/mailbox-list-fs.c
--- a/src/lib-storage/list/mailbox-list-fs.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/list/mailbox-list-fs.c	Thu Dec 31 13:46:24 2009 -0500
@@ -437,7 +437,6 @@ struct mailbox_list fs_mailbox_list = {
 		fs_list_set_subscribed,
 		fs_list_delete_mailbox,
 		fs_list_rename_mailbox,
-		NULL,
 		NULL
 	}
 };
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/list/mailbox-list-maildir.c
--- a/src/lib-storage/list/mailbox-list-maildir.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/list/mailbox-list-maildir.c	Thu Dec 31 13:46:24 2009 -0500
@@ -462,7 +462,6 @@ struct mailbox_list maildir_mailbox_list
 		maildir_list_set_subscribed,
 		maildir_list_delete_mailbox,
 		maildir_list_rename_mailbox,
-		NULL,
 		NULL
 	}
 };
@@ -491,7 +490,6 @@ struct mailbox_list imapdir_mailbox_list
 		maildir_list_set_subscribed,
 		maildir_list_delete_mailbox,
 		maildir_list_rename_mailbox,
-		NULL,
 		NULL
 	}
 };
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/mailbox-list-private.h
--- a/src/lib-storage/mailbox-list-private.h	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/mailbox-list-private.h	Thu Dec 31 13:46:24 2009 -0500
@@ -66,8 +66,6 @@ struct mailbox_list_vfuncs {
 				  const char *oldname,
 				  struct mailbox_list *newlist,
 				  const char *newname);
-	int (*get_guid)(struct mailbox_list *list, const char *name,
-			uint8_t mailbox_guid[MAIL_GUID_128_SIZE]);
 };
 
 struct mailbox_list_module_register {
@@ -155,6 +153,8 @@ void mailbox_list_add_change(struct mail
 			     const uint8_t mailbox_guid[MAIL_GUID_128_SIZE]);
 int mailbox_list_get_guid_path(struct mailbox_list *list, const char *path,
 			       uint8_t mailbox_guid[MAIL_GUID_128_SIZE]);
+void mailbox_name_get_sha128(const char *name,
+			     uint8_t guid[MAIL_GUID_128_SIZE]);
 
 void mailbox_list_clear_error(struct mailbox_list *list);
 void mailbox_list_set_error(struct mailbox_list *list,
diff -r de75c45e6765 -r f20bced53213 src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c	Thu Dec 31 15:15:54 2009 -0500
+++ b/src/lib-storage/mailbox-list.c	Thu Dec 31 13:46:24 2009 -0500
@@ -137,8 +137,6 @@ int mailbox_list_create(const char *driv
 	list->set.inbox_path = p_strdup(list->pool, set->inbox_path);
 	list->set.subscription_fname =
 		p_strdup(list->pool, set->subscription_fname);
-	list->set.dir_guid_fname =
-		p_strdup(list->pool, set->dir_guid_fname);
 	list->set.maildir_name = set->maildir_name == NULL ||
 		(list->props & MAILBOX_LIST_PROP_NO_MAILDIR_NAME) != 0 ? "" :
 		p_strdup(list->pool, set->maildir_name);
@@ -718,7 +716,6 @@ int mailbox_list_set_subscribed(struct m
 				const char *name, bool set)
 {
 	uint8_t guid[MAIL_GUID_128_SIZE];
-	unsigned char sha[SHA1_RESULTLEN];
 
 	if (list->v.set_subscribed(list, name, set) < 0)
 		return -1;
@@ -727,8 +724,7 @@ int mailbox_list_set_subscribed(struct m
 	   to have a subscription to non-existing mailbox. renames also don't
 	   change subscriptions. so instead of using actual GUIDs, we'll use
 	   hash of the name. */
-	sha1_get_digest(name, strlen(name), sha);
-	memcpy(guid, sha, I_MIN(sizeof(guid), sizeof(sha)));
+	mailbox_name_get_sha128(name, guid);
 	mailbox_list_add_change(list, set ? MAILBOX_LOG_RECORD_SUBSCRIBE :
 				MAILBOX_LOG_RECORD_UNSUBSCRIBE, guid);
 	return 0;
@@ -795,125 +791,23 @@ int mailbox_list_rename_mailbox(struct m
 		return -1;
 	}
 
-	(void)mailbox_list_get_guid(oldlist, oldname, guid);
 	if (oldlist->v.rename_mailbox(oldlist, oldname, newlist, newname,
 				      rename_children) < 0)
 		return -1;
+
+	/* we'll track mailbox names, instead of GUIDs. We may be renaming a
+	   non-selectable mailbox (directory), which doesn't even have a GUID */
+	mailbox_name_get_sha128(newname, guid);
 	mailbox_list_add_change(oldlist, MAILBOX_LOG_RECORD_RENAME, guid);
 	return 0;
 }
 
-static int mailbox_list_read_guid(struct mailbox_list *list, const char *path,
-				  uint8_t mailbox_guid[MAIL_GUID_128_SIZE])
-{
-	int fd, ret;
-
-	fd = open(path, O_RDONLY);
-	if (fd != -1) {
-		ret = read_full(fd, mailbox_guid, MAIL_GUID_128_SIZE);
-		close_keep_errno(fd);
-		if (ret > 0)
-			return 1;
-		if (ret < 0) {
-			mailbox_list_set_critical(list, "read(%s) failed: %m",
-						  path);
-			return -1;
-		}
-		/* recreate it */
-		mailbox_list_set_critical(list, "Corrupted mailbox GUID in %s",
-					  path);
-		(void)unlink(path);
-		return 0;
-	} else if (errno == ENOENT) {
-		return 0;
-	} else if (errno == EACCES) {
-		mailbox_list_set_critical(list, "%s",
-					  eacces_error_get("open", path));
-		return -1;
-	} else {
-		mailbox_list_set_critical(list, "open(%s) failed: %m", path);
-		return -1;
-	}
-}
-
-int mailbox_list_get_guid_path(struct mailbox_list *list, const char *path,
-			       uint8_t mailbox_guid[MAIL_GUID_128_SIZE])
-{
-	string_t *temp_path;
-	int fd, ret;
-
-	/* try reading the GUID from the file */
-	if ((ret = mailbox_list_read_guid(list, path, mailbox_guid)) < 0)
-		return -1;
-
-	/* create temp file containing a new GUID. the file must never be
-	   modified and it doesn't contain anything sensitive, so just make
-	   it world-readable. */
-	temp_path = t_str_new(256);
-	str_append(temp_path, path);
-	fd = safe_mkstemp_hostpid_group(temp_path, 0644, (gid_t)-1, NULL);
-	if (fd == -1) {
-		mailbox_list_set_critical(list,
-			"safe_mkstemp(%s) failed: %m", str_c(temp_path));
-		return -1;


More information about the dovecot-cvs mailing list