struct sieve_binary *sieve_tool_script_compile (struct sieve_instance *svinst, const char *filename, const char *name) { struct sieve_error_handler *ehandler; struct sieve_binary *sbin; ehandler = sieve_stderr_ehandler_create(svinst, 0); sieve_error_handler_accept_infolog(ehandler, TRUE); sieve_error_handler_accept_debuglog(ehandler, svinst->debug); if ( (sbin = sieve_compile (svinst, filename, name, ehandler, 0, NULL)) == NULL ) i_error("failed to compile sieve script '%s'", filename); sieve_error_handler_unref(&ehandler); return sbin; }
struct imap_sieve *imap_sieve_init(struct mail_user *user, const struct lda_settings *lda_set) { struct sieve_environment svenv; struct imap_sieve *isieve; bool debug = user->mail_debug; pool_t pool; pool = pool_alloconly_create("imap_sieve", 256); isieve = p_new(pool, struct imap_sieve, 1); isieve->pool = pool; isieve->user = user; isieve->lda_set = lda_set; isieve->dup_ctx = duplicate_init(user); memset(&svenv, 0, sizeof(svenv)); svenv.username = user->username; (void)mail_user_get_home(user, &svenv.home_dir); svenv.hostname = lda_set->hostname; svenv.base_dir = user->set->base_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; svenv.location = SIEVE_ENV_LOCATION_MS; svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST; isieve->home_dir = p_strdup(pool, svenv.home_dir); isieve->svinst = sieve_init (&svenv, &mail_sieve_callbacks, isieve, debug); isieve->ext_imapsieve = sieve_extension_replace (isieve->svinst, &imapsieve_extension, TRUE); isieve->master_ehandler = sieve_master_ehandler_create (isieve->svinst, NULL, 0); // FIXME: prefix? sieve_system_ehandler_set(isieve->master_ehandler); sieve_error_handler_accept_infolog(isieve->master_ehandler, TRUE); sieve_error_handler_accept_debuglog(isieve->master_ehandler, debug); return isieve; }