Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4964:3ed0749731d2 HEAD
If debug is enabled, log some debugging messages. Also cleaned up the code
bit, and made "acl = vfile" not require ":" after the "vfile".
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 28 Dec 2006 16:47:38 +0200 |
parents | b13c7888563c |
children | 9246d9308caa |
files | src/plugins/acl/acl-api-private.h src/plugins/acl/acl-api.c src/plugins/acl/acl-backend-vfile.c src/plugins/acl/acl-backend.c src/plugins/acl/acl-plugin.c |
diffstat | 5 files changed, 68 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/acl/acl-api-private.h Thu Dec 28 14:26:46 2006 +0200 +++ b/src/plugins/acl/acl-api-private.h Thu Dec 28 16:47:38 2006 +0200 @@ -4,12 +4,12 @@ #include "acl-api.h" struct acl_backend_vfuncs { - struct acl_backend *(*init)(const char *data); + struct acl_backend *(*alloc)(void); + int (*init)(struct acl_backend *backend, const char *data); void (*deinit)(struct acl_backend *backend); struct acl_object *(*object_init)(struct acl_backend *backend, - const char *name, - const char *control_dir); + const char *name); void (*object_deinit)(struct acl_object *aclobj); int (*object_refresh_cache)(struct acl_object *aclobj); @@ -36,6 +36,8 @@ struct acl_mask *default_aclmask; struct acl_backend_vfuncs v; + + unsigned int debug:1; }; struct acl_object {
--- a/src/plugins/acl/acl-api.c Thu Dec 28 14:26:46 2006 +0200 +++ b/src/plugins/acl/acl-api.c Thu Dec 28 16:47:38 2006 +0200 @@ -9,10 +9,7 @@ struct acl_object *acl_object_init_from_name(struct acl_backend *backend, const char *name) { - const char *control_dir = - mail_storage_get_mailbox_control_dir(backend->storage, name); - - return backend->v.object_init(backend, name, control_dir); + return backend->v.object_init(backend, name); } struct acl_object *acl_object_init_from_mailbox(struct acl_backend *backend,
--- a/src/plugins/acl/acl-backend-vfile.c Thu Dec 28 14:26:46 2006 +0200 +++ b/src/plugins/acl/acl-backend-vfile.c Thu Dec 28 16:47:38 2006 +0200 @@ -65,19 +65,31 @@ { '\0', NULL } }; -static struct acl_backend *acl_backend_vfile_init(const char *data) +static struct acl_backend *acl_backend_vfile_alloc(void) { struct acl_backend_vfile *backend; pool_t pool; - pool = pool_alloconly_create("ACL backend", nearest_power(512)); + pool = pool_alloconly_create("ACL backend", 512); backend = p_new(pool, struct acl_backend_vfile, 1); - backend->global_dir = p_strdup(pool, data); backend->backend.pool = pool; - backend->backend.cache = - acl_cache_init(&backend->backend, + return &backend->backend; +} + +static int +acl_backend_vfile_init(struct acl_backend *_backend, const char *data) +{ + struct acl_backend_vfile *backend = + (struct acl_backend_vfile *)_backend; + + if (_backend->debug) + i_info("acl vfile: Global ACL directory: %s", data); + + backend->global_dir = p_strdup(_backend->pool, data); + _backend->cache = + acl_cache_init(_backend, sizeof(struct acl_backend_vfile_validity)); - return &backend->backend; + return 0; } static void acl_backend_vfile_deinit(struct acl_backend *backend) @@ -86,12 +98,15 @@ } static struct acl_object * -acl_backend_vfile_object_init(struct acl_backend *_backend, - const char *name, const char *control_dir) +acl_backend_vfile_object_init(struct acl_backend *_backend, const char *name) { struct acl_backend_vfile *backend = (struct acl_backend_vfile *)_backend; struct acl_object_vfile *aclobj; + const char *control_dir; + + control_dir = + mail_storage_get_mailbox_control_dir(_backend->storage, name); aclobj = i_new(struct acl_object_vfile, 1); aclobj->aclobj.backend = _backend; @@ -241,6 +256,9 @@ fd = nfs_safe_open(path, O_RDONLY); if (fd == -1) { if (errno == ENOENT) { + if (aclobj->backend->debug) + i_info("acl vfile: file %s not found", path); + validity->last_size = 0; validity->last_mtime = 0; validity->last_read_time = ioloop_time; @@ -268,6 +286,9 @@ return 0; } + if (aclobj->backend->debug) + i_info("acl vfile: reading file %s", path); + input = i_stream_create_file(fd, default_pool, 4096, FALSE); linenum = 1; @@ -453,6 +474,7 @@ } struct acl_backend_vfuncs acl_backend_vfile = { + acl_backend_vfile_alloc, acl_backend_vfile_init, acl_backend_vfile_deinit, acl_backend_vfile_object_init,
--- a/src/plugins/acl/acl-backend.c Thu Dec 28 14:26:46 2006 +0200 +++ b/src/plugins/acl/acl-backend.c Thu Dec 28 16:47:38 2006 +0200 @@ -32,21 +32,45 @@ { struct acl_backend *backend; unsigned int i, group_count; - bool storage_owner; + bool storage_owner, debug; + + debug = getenv("DEBUG") != NULL; + if (debug) { + i_info("acl: initializing backend with data: %s", data); + i_info("acl: acl username = %s", acl_username); + i_info("acl: owner username = %s", + owner_username != NULL ? owner_username : ""); + } group_count = strarray_length(groups); - if (strncmp(data, "vfile:", 6) != 0) + if (strncmp(data, "vfile:", 6) == 0) + data += 6; + else if (strcmp(data, "vfile") == 0) + data = ""; + else i_fatal("Unknown ACL backend: %s", t_strcut(data, ':')); - data += 6; - backend = acl_backend_vfile.init(data); + backend = acl_backend_vfile.alloc(); + backend->debug = debug; backend->v = acl_backend_vfile; backend->storage = storage; backend->username = p_strdup(backend->pool, acl_username); backend->owner_username = owner_username == NULL ? "" : p_strdup(backend->pool, owner_username); - backend->group_count = group_count; + + if (group_count > 0) { + backend->group_count = group_count; + backend->groups = + p_new(backend->pool, const char *, group_count); + for (i = 0; i < group_count; i++) + backend->groups[i] = groups[i]; + qsort(backend->groups, group_count, sizeof(const char *), + strcmp_p); + } + + if (acl_backend_vfile.init(backend, data) < 0) + i_fatal("acl: backend vfile init failed with data: %s", data); storage_owner = owner_username != NULL && strcmp(acl_username, owner_username) == 0; @@ -55,15 +79,6 @@ storage_owner ? owner_mailbox_rights : non_owner_mailbox_rights); - if (group_count > 0) { - backend->groups = - p_new(backend->pool, const char *, group_count); - for (i = 0; i < group_count; i++) - backend->groups[i] = groups[i]; - qsort(backend->groups, group_count, sizeof(const char *), - strcmp_p); - } - backend->default_aclobj = acl_object_init_from_name(backend, ""); return backend; }
--- a/src/plugins/acl/acl-plugin.c Thu Dec 28 14:26:46 2006 +0200 +++ b/src/plugins/acl/acl-plugin.c Thu Dec 28 16:47:38 2006 +0200 @@ -23,6 +23,9 @@ acl_next_hook_mailbox_list_created = hook_mailbox_list_created; hook_mailbox_list_created = acl_mailbox_list_created; + } else { + if (getenv("DEBUG") != NULL) + i_info("acl: ACL environment not set"); } }