Пример #1
0
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);
}
Пример #2
0
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;
}