static void sieve_multiscript_execute (struct sieve_multiscript *mscript, struct sieve_error_handler *ehandler, enum sieve_execute_flags flags, bool *keep) { if ( mscript->status > 0 ) { mscript->status = sieve_result_execute (mscript->result, keep, ehandler, flags); } else { if ( sieve_result_implicit_keep (mscript->result, ehandler, flags, FALSE) <= 0 ) mscript->status = SIEVE_EXEC_KEEP_FAILED; else if ( keep != NULL ) *keep = TRUE; } }
bool testsuite_result_execute(const struct sieve_runtime_env *renv) { int ret; if ( _testsuite_result == NULL ) { sieve_runtime_error(renv, NULL, "testsuite: trying to execute result, but no result evaluated yet"); return FALSE; } testsuite_log_clear_messages(); /* Execute the result */ ret=sieve_result_execute(_testsuite_result, NULL); return ( ret > 0 ); }
int sieve_execute (struct sieve_binary *sbin, const struct sieve_message_data *msgdata, const struct sieve_script_env *senv, struct sieve_error_handler *exec_ehandler, struct sieve_error_handler *action_ehandler, enum sieve_runtime_flags flags, bool *keep) { struct sieve_result *result = NULL; int ret; if ( keep != NULL ) *keep = FALSE; /* Run the script */ ret = sieve_run(sbin, &result, msgdata, senv, exec_ehandler, flags); /* Evaluate status and execute the result: * Strange situations, e.g. currupt binaries, must be handled by the caller. * In that case no implicit keep is attempted, because the situation may be * resolved. */ if ( ret > 0 ) { /* Execute result */ ret = sieve_result_execute(result, keep, action_ehandler); } else if ( ret == SIEVE_EXEC_FAILURE ) { /* Perform implicit keep if script failed with a normal runtime error */ switch ( sieve_result_implicit_keep (result, action_ehandler) ) { case SIEVE_EXEC_OK: if ( keep != NULL ) *keep = TRUE; break; case SIEVE_EXEC_TEMP_FAILURE: ret = SIEVE_EXEC_TEMP_FAILURE; break; default: ret = SIEVE_EXEC_KEEP_FAILED; } } /* Cleanup */ if ( result != NULL ) sieve_result_unref(&result); return ret; }