Lines Matching defs:backend

14 #include "acl-backend-vfile.h"
28 acllist_clear(struct acl_backend_vfile *backend, uoff_t file_size)
30 if (backend->acllist_pool == NULL) {
31 backend->acllist_pool =
34 i_array_init(&backend->acllist, I_MAX(16, file_size / 60));
36 p_clear(backend->acllist_pool);
37 array_clear(&backend->acllist);
41 static bool acl_list_get_root_dir(struct acl_backend_vfile *backend,
49 if (backend->backend.globals_only)
52 storage = mailbox_list_get_namespace(backend->backend.list)->storage;
55 if (!mailbox_list_get_root_path(backend->backend.list, type, &rootdir))
61 maildir = mailbox_list_get_root_forced(backend->backend.list,
68 rootdir = mailbox_list_get_root_forced(backend->backend.list,
77 static bool acl_list_get_path(struct acl_backend_vfile *backend,
83 if (!acl_list_get_root_dir(backend, &root_dir, &type))
89 static int acl_backend_vfile_acllist_read(struct acl_backend_vfile *backend)
97 backend->acllist_last_check = ioloop_time;
99 if (!acl_list_get_path(backend, &path)) {
101 acllist_clear(backend, 0);
105 if (backend->acllist_mtime != 0) {
109 backend->acllist_mtime = 0;
114 if (st.st_mtime == backend->acllist_mtime)
121 backend->acllist_mtime = 0;
132 backend->acllist_mtime = st.st_mtime;
133 acllist_clear(backend, st.st_size);
147 acllist.name = p_strdup(backend->acllist_pool, p + 1);
148 array_append(&backend->acllist, &acllist, 1);
159 void acl_backend_vfile_acllist_refresh(struct acl_backend_vfile *backend)
161 i_assert(!backend->iterating_acllist);
163 if (backend->acllist_last_check +
164 (time_t)backend->cache_secs > ioloop_time)
167 if (acl_backend_vfile_acllist_read(backend) < 0) {
168 acllist_clear(backend, 0);
169 if (!backend->rebuilding_acllist)
170 (void)acl_backend_vfile_acllist_rebuild(backend);
175 acllist_append(struct acl_backend_vfile *backend, struct ostream *output,
185 name = mailbox_list_get_storage_name(backend->backend.list, vname);
186 acl_cache_flush(backend->backend.cache, name);
187 aclobj = acl_object_init_from_name(&backend->backend, name);
200 acllist.name = p_strdup(backend->acllist_pool, name);
201 array_append(&backend->acllist, &acllist, 1);
215 acl_backend_vfile_acllist_try_rebuild(struct acl_backend_vfile *backend)
217 struct mailbox_list *list = backend->backend.list;
229 i_assert(!backend->rebuilding_acllist);
231 if (!acl_list_get_root_dir(backend, &rootdir, &type))
251 if (mailbox_list_mkdir_root(backend->backend.list,
271 acllist_clear(backend, 0);
273 backend->rebuilding_acllist = TRUE;
278 if (acllist_append(backend, output, info->vname) < 0) {
305 if (!acl_list_get_path(backend, &acllist_path))
316 backend->acllist_mtime = st.st_mtime;
317 backend->acllist_last_check = ioloop_time;
321 acllist_clear(backend, 0);
324 backend->rebuilding_acllist = FALSE;
328 int acl_backend_vfile_acllist_rebuild(struct acl_backend_vfile *backend)
332 if (acl_backend_vfile_acllist_try_rebuild(backend) == 0)
336 if (!acl_list_get_path(backend, &acllist_path))
344 acl_backend_vfile_acllist_find(struct acl_backend_vfile *backend,
349 array_foreach(&backend->acllist, acllist) {
356 void acl_backend_vfile_acllist_verify(struct acl_backend_vfile *backend,
361 if (backend->rebuilding_acllist || backend->iterating_acllist)
364 acl_backend_vfile_acllist_refresh(backend);
365 acllist = acl_backend_vfile_acllist_find(backend, name);
367 (void)acl_backend_vfile_acllist_rebuild(backend);
373 struct acl_backend_vfile *backend =
377 acl_backend_vfile_acllist_refresh(backend);
380 ctx->ctx.backend = _backend;
381 backend->iterating_acllist = TRUE;
390 struct acl_backend_vfile *backend =
391 (struct acl_backend_vfile *)_ctx->backend;
398 acllist = array_get(&backend->acllist, &count);
411 struct acl_backend_vfile *backend =
412 (struct acl_backend_vfile *)ctx->backend;
415 backend->iterating_acllist = FALSE;
428 struct acl_backend_vfile *backend =
431 return acl_backend_vfile_acllist_rebuild(backend);