static void mail_sieve_user_deinit(struct mail_user *user) { struct sieve_mail_user *suser = SIEVE_USER_CONTEXT(user); if ( suser->svinst != NULL ) { if (suser->sieve_storage != NULL) sieve_storage_unref(&suser->sieve_storage); sieve_deinit(&suser->svinst); } suser->module_ctx.super.deinit(user); }
void imap_sieve_deinit(struct imap_sieve **_isieve) { struct imap_sieve *isieve = *_isieve; *_isieve = NULL; sieve_error_handler_unref(&isieve->master_ehandler); if (isieve->storage != NULL) sieve_storage_unref(&isieve->storage); sieve_extension_unregister(isieve->ext_imapsieve); sieve_deinit(&isieve->svinst); duplicate_deinit(&isieve->dup_ctx); pool_unref(&isieve->pool); }
static int doveadm_sieve_cmd_run (struct doveadm_mail_cmd_context *_ctx, struct mail_user *user) { struct doveadm_sieve_cmd_context *ctx = (struct doveadm_sieve_cmd_context *)_ctx; struct sieve_environment svenv; enum sieve_error error; int ret; memset((void*)&svenv, 0, sizeof(svenv)); svenv.username = user->username; (void)mail_user_get_home(user, &svenv.home_dir); svenv.base_dir = user->set->base_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; ctx->svinst = sieve_init (&svenv, &sieve_callbacks, (void *)ctx, user->mail_debug); ctx->storage = sieve_storage_create_main (ctx->svinst, user, SIEVE_STORAGE_FLAG_READWRITE, &error); if ( ctx->storage == NULL ) { switch ( error ) { case SIEVE_ERROR_NOT_FOUND: i_error("Failed to open Sieve storage: Sieve disabled for user"); break; default: i_error("Failed to open Sieve storage."); } doveadm_sieve_cmd_failed_error(ctx, error); ret = -1; } else { i_assert( ctx->v.run != NULL ); ret = ctx->v.run(ctx); sieve_storage_unref(&ctx->storage); } sieve_deinit(&ctx->svinst); return ret; }