imap-acl-plugin.c revision bd63b5b860658b01b1f46f26d406e1e4a9dc019a
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2008-2012 Dovecot authors, see the included COPYING file */
39ed514f9d401b3cb589595c6a2f532050254d77Timo Sirainen#define ERROR_NOT_ADMIN "["IMAP_RESP_CODE_NOPERM"] " \
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen "You lack administrator privileges on this mailbox."
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainenstatic const struct imap_acl_letter_map imap_acl_letter_map[] = {
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainenconst char *imap_acl_plugin_version = DOVECOT_ABI_VERSION;
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainenstatic imap_client_created_func_t *next_hook_client_created;
39ed514f9d401b3cb589595c6a2f532050254d77Timo Sirainenstatic struct mailbox *
39ed514f9d401b3cb589595c6a2f532050254d77Timo Sirainenacl_mailbox_open_as_admin(struct client_command_context *cmd, const char *name)
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen enum mailbox_existence existence = MAILBOX_EXISTENCE_NONE;
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen if (ACL_USER_CONTEXT(cmd->client->user) == NULL) {
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainen client_send_command_error(cmd, "ACLs disabled.");
return NULL;
return NULL;
if (ret > 0)
return box;
return NULL;
static const struct imap_acl_letter_map *
return &imap_acl_letter_map[i];
return NULL;
if (append_c)
if (append_d)
case ACL_ID_ANYONE:
case ACL_ID_AUTHENTICATED:
case ACL_ID_OWNER:
case ACL_ID_USER:
case ACL_ID_GROUP:
case ACL_ID_GROUP_OVERRIDE:
case ACL_ID_TYPE_COUNT:
i_unreached();
case ACL_ID_OWNER:
return TRUE;
case ACL_ID_USER:
return FALSE;
return ret;
bool add_default)
const char *username;
int ret;
if (!convert_owner) {
return ret;
const char *mailbox;
int ret;
return FALSE;
return TRUE;
if (ret == 0) {
return TRUE;
const char *const *rights;
return FALSE;
return TRUE;
return TRUE;
return TRUE;
return TRUE;
return TRUE;
return FALSE;
return TRUE;
return TRUE;
const char **error_r)
switch (*letters) {
const char *env;
id);
const char *const *default_rights;
case ACL_MODIFY_MODE_ADD:
case ACL_MODIFY_MODE_REMOVE:
case ACL_MODIFY_MODE_REPLACE:
struct acl_rights *r;
return FALSE;
return TRUE;
identifier++;
switch (*rights) {
rights++;
rights++;
return TRUE;
return TRUE;
return TRUE;
return TRUE;
if (negative) {
return TRUE;
return FALSE;
return TRUE;
identifier++;
return TRUE;
return TRUE;
return TRUE;
void imap_acl_plugin_deinit(void)