static void mail_log_append_mailbox_name(string_t *str, struct mailbox *box) { const char *mailbox_str; /* most operations are for INBOX, and POP3 has only INBOX, so don't add it. */ mailbox_str = mailbox_get_name(box); if (strcmp(mailbox_str, "INBOX") != 0) { str_printfa(str, "box=%s, ", str_sanitize(mailbox_str, MAILBOX_NAME_LOG_LEN)); } }
void acl_mailbox_allocated(struct mailbox *box) { struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(box->list); struct mailbox_vfuncs *v = box->vlast; struct acl_mailbox *abox; if (alist == NULL) { /* ACLs disabled */ return; } if (box->list->ns->type == MAIL_NAMESPACE_TYPE_SHARED && (box->list->ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0) { /* this is the root shared namespace, which itself doesn't have any existing mailboxes. */ return; } abox = p_new(box->pool, struct acl_mailbox, 1); abox->module_ctx.super = *v; box->vlast = &abox->module_ctx.super; /* aclobj can be used for setting ACLs, even when mailbox is opened with IGNORE_ACLS flag */ abox->aclobj = acl_object_init_from_name(alist->rights.backend, mailbox_get_name(box)); v->free = acl_mailbox_free; if ((box->flags & MAILBOX_FLAG_IGNORE_ACLS) == 0) { abox->acl_enabled = TRUE; v->is_readonly = acl_is_readonly; v->exists = acl_mailbox_exists; v->open = acl_mailbox_open; v->get_status = acl_mailbox_get_status; v->create_box = acl_mailbox_create; v->update_box = acl_mailbox_update; v->delete_box = acl_mailbox_delete; v->rename_box = acl_mailbox_rename; v->save_begin = acl_save_begin; v->copy = acl_copy; v->transaction_commit = acl_transaction_commit; v->attribute_set = acl_attribute_set; v->attribute_get = acl_attribute_get; v->attribute_iter_init = acl_attribute_iter_init; v->attribute_iter_next = acl_attribute_iter_next; v->attribute_iter_deinit = acl_attribute_iter_deinit; } MODULE_CONTEXT_SET(box, acl_storage_module, abox); }