Mercurial > dovecot > original-hg > dovecot-1.2
changeset 9154:8206c38856ff HEAD
acl: If dovecot-acl-list writing fails, delete it so it gets rebuilt later.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 22 Jun 2009 00:42:56 -0400 |
parents | f2426d980426 |
children | 1c91fa0d804b |
files | src/plugins/acl/acl-backend-vfile-acllist.c |
diffstat | 1 files changed, 23 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/acl/acl-backend-vfile-acllist.c Mon Jun 22 00:29:13 2009 -0400 +++ b/src/plugins/acl/acl-backend-vfile-acllist.c Mon Jun 22 00:42:56 2009 -0400 @@ -164,7 +164,8 @@ return ret < 0 ? -1 : 0; } -int acl_backend_vfile_acllist_rebuild(struct acl_backend_vfile *backend) +static int +acl_backend_vfile_acllist_try_rebuild(struct acl_backend_vfile *backend) { struct mailbox_list *list = backend->backend.list; struct mail_namespace *ns; @@ -224,6 +225,10 @@ } } + if (output->stream_errno != 0) { + i_error("write(%s) failed: %m", str_c(path)); + ret = -1; + } if (mailbox_list_iter_deinit(&iter) < 0) ret = -1; o_stream_destroy(&output); @@ -263,6 +268,23 @@ return ret; } +int acl_backend_vfile_acllist_rebuild(struct acl_backend_vfile *backend) +{ + const char *rootdir, *acllist_path; + + if (acl_backend_vfile_acllist_try_rebuild(backend) == 0) + return 0; + else { + /* delete it to make sure it gets rebuilt later */ + rootdir = mailbox_list_get_path(backend->backend.list, NULL, + MAILBOX_LIST_PATH_TYPE_DIR); + acllist_path = t_strdup_printf("%s/"ACLLIST_FILENAME, rootdir); + if (unlink(acllist_path) < 0 && errno != ENOENT) + i_error("unlink(%s) failed: %m", acllist_path); + return -1; + } +} + static const struct acl_backend_vfile_acllist * acl_backend_vfile_acllist_find(struct acl_backend_vfile *backend, const char *name)