acl-backend.c revision 7fb70daba4e571eab5b64f496d20b9e37e31141b
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen/* Copyright (C) 2006 Timo Sirainen */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenextern struct acl_backend_vfuncs acl_backend_vfile;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstatic const char *const owner_mailbox_rights[] = {
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenstatic const char *const non_owner_mailbox_rights[] = { NULL };
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenacl_backend_init(const char *data, struct mail_storage *storage,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen const char *acl_username, const char *const *groups,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen unsigned int i, group_count;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen i_fatal("Unknown ACL backend: %s", t_strcut(data, ':'));
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen backend->username = p_strdup(backend->pool, acl_username);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen backend->owner_username = p_strdup(backend->pool, owner_username);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen backend->aclobjs = hash_create(default_pool, backend->pool, 0,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen acl_cache_mask_init(backend->cache, backend->pool,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen p_new(backend->pool, const char *, group_count);
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen for (i = 0; i < group_count; i++)
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen qsort(backend->groups, group_count, sizeof(const char *),
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenvoid acl_backend_deinit(struct acl_backend **_backend)
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenbool acl_backend_user_is_authenticated(struct acl_backend *backend)
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenbool acl_backend_user_name_equals(struct acl_backend *backend,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen /* anonymous user never matches */
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen return strcmp(backend->username, username) == 0;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenbool acl_backend_user_is_in_group(struct acl_backend *backend,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen return bsearch(group_name, backend->groups, backend->group_count,
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen sizeof(const char *), bsearch_strcmp) != NULL;
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenunsigned int acl_backend_lookup_right(struct acl_backend *backend,