]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
acl: Add and use ACL_LIST_CONTEXT_REQUIRE
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 22 Jan 2018 12:00:37 +0000 (14:00 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 24 Jan 2018 11:24:32 +0000 (13:24 +0200)
Satisfies static analyzers

src/plugins/acl/acl-mailbox-list.c
src/plugins/acl/acl-mailbox.c
src/plugins/acl/acl-plugin.h

index ad0bea815290f3d3bb35bf0e50e4f1dfdfadad0f..96b317a00c719a96e31334e977be18ec85831aa7 100644 (file)
@@ -48,7 +48,7 @@ struct acl_mailbox_list_module acl_mailbox_list_module =
 
 struct acl_backend *acl_mailbox_list_get_backend(struct mailbox_list *list)
 {
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(list);
 
        return alist->rights.backend;
 }
@@ -57,7 +57,7 @@ int acl_mailbox_list_have_right(struct mailbox_list *list, const char *name,
                                bool parent, unsigned int acl_storage_right_idx,
                                bool *can_see_r)
 {
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(list);
        struct acl_backend *backend = alist->rights.backend;
        const unsigned int *idx_arr = alist->rights.acl_storage_right_idx;
        struct acl_object *aclobj;
@@ -87,7 +87,7 @@ acl_mailbox_try_list_fast(struct mailbox_list_iterate_context *_ctx)
 {
        struct acl_mailbox_list_iterate_context *ctx =
                ACL_LIST_ITERATE_CONTEXT(_ctx);
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(_ctx->list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(_ctx->list);
        struct acl_backend *backend = alist->rights.backend;
        const unsigned int *idxp;
        const struct acl_mask *acl_mask;
@@ -144,7 +144,7 @@ acl_mailbox_list_iter_init_shared(struct mailbox_list *list,
                                  const char *const *patterns,
                                  enum mailbox_list_iter_flags flags)
 {
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(list);
        struct mailbox_list_iterate_context *ctx;
        int ret;
 
@@ -163,7 +163,7 @@ acl_mailbox_list_iter_init(struct mailbox_list *list,
                           const char *const *patterns,
                           enum mailbox_list_iter_flags flags)
 {
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(list);
        struct mailbox_list_iterate_context *_ctx;
        struct acl_mailbox_list_iterate_context *ctx;
        const char *p;
@@ -210,7 +210,7 @@ acl_mailbox_list_iter_next_info(struct mailbox_list_iterate_context *_ctx)
 {
        struct acl_mailbox_list_iterate_context *ctx =
                ACL_LIST_ITERATE_CONTEXT(_ctx);
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(_ctx->list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(_ctx->list);
        const struct mailbox_info *info;
 
        while ((info = alist->module_ctx.super.iter_next(_ctx)) != NULL) {
@@ -481,7 +481,7 @@ acl_mailbox_list_iter_deinit(struct mailbox_list_iterate_context *_ctx)
 {
        struct acl_mailbox_list_iterate_context *ctx =
                ACL_LIST_ITERATE_CONTEXT(_ctx);
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(_ctx->list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(_ctx->list);
        int ret = _ctx->failed ? -1 : 0;
 
         if (ctx->lookup_boxes != NULL)
@@ -493,7 +493,7 @@ acl_mailbox_list_iter_deinit(struct mailbox_list_iterate_context *_ctx)
 
 static void acl_mailbox_list_deinit(struct mailbox_list *list)
 {
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(list);
 
        if (alist->rights.backend != NULL)
                acl_backend_deinit(&alist->rights.backend);
index 5ebf783c6a26ade7012324d722aba98b1b4e81a6..b63421545384d2dcf94d3d355eaf7e1c4697950e 100644 (file)
@@ -34,12 +34,13 @@ struct acl_object *acl_mailbox_get_aclobj(struct mailbox *box)
 int acl_mailbox_right_lookup(struct mailbox *box, unsigned int right_idx)
 {
        struct acl_mailbox *abox = ACL_CONTEXT_REQUIRE(box);
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(box->list);
        int ret;
 
        if (abox->skip_acl_checks)
                return 1;
 
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(box->list);
+
        ret = acl_object_have_right(abox->aclobj,
                        alist->rights.acl_storage_right_idx[right_idx]);
        if (ret > 0)
@@ -90,7 +91,7 @@ static void acl_mailbox_free(struct mailbox *box)
 static void acl_mailbox_copy_acls_from_parent(struct mailbox *box)
 {
        struct acl_mailbox *abox = ACL_CONTEXT_REQUIRE(box);
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(box->list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(box->list);
        struct acl_object *parent_aclobj;
        struct acl_object_list_iter *iter;
        struct acl_rights_update update;
@@ -490,7 +491,7 @@ static int acl_mailbox_exists(struct mailbox *box, bool auto_boxes,
 static int acl_mailbox_open_check_acl(struct mailbox *box)
 {
        struct acl_mailbox *abox = ACL_CONTEXT_REQUIRE(box);
-       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(box->list);
+       struct acl_mailbox_list *alist = ACL_LIST_CONTEXT_REQUIRE(box->list);
        const unsigned int *idx_arr = alist->rights.acl_storage_right_idx;
        enum acl_storage_rights open_right;
        int ret;
index ba6d59bd67f1af8ce14e44137e4db54fdd9ea8da..eb1c8ad813e4f981d77a29642d603c8e188098ba 100644 (file)
@@ -12,6 +12,8 @@
        MODULE_CONTEXT_REQUIRE(obj, acl_storage_module)
 #define ACL_LIST_CONTEXT(obj) \
        MODULE_CONTEXT(obj, acl_mailbox_list_module)
+#define ACL_LIST_CONTEXT_REQUIRE(obj) \
+       MODULE_CONTEXT_REQUIRE(obj, acl_mailbox_list_module)
 #define ACL_USER_CONTEXT(obj) \
        MODULE_CONTEXT(obj, acl_user_module)