int sieve_test (struct sieve_binary *sbin, const struct sieve_message_data *msgdata, const struct sieve_script_env *senv, struct sieve_error_handler *ehandler, struct ostream *stream, enum sieve_execute_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, ehandler, flags); /* Print result if successful */ if ( ret > 0 ) { ret = ( sieve_result_print(result, senv, stream, keep) ? SIEVE_EXEC_OK : SIEVE_EXEC_FAILURE ); } else if ( ret == 0 ) { if ( keep != NULL ) *keep = TRUE; } /* Cleanup */ if ( result != NULL ) sieve_result_unref(&result); return ret; }
void testsuite_result_reset (const struct sieve_runtime_env *renv) { struct sieve_instance *svinst = testsuite_sieve_instance; if ( _testsuite_result != NULL ) { sieve_result_unref(&_testsuite_result); } _testsuite_result = sieve_result_create (svinst, &testsuite_msgdata, testsuite_scriptenv, testsuite_log_ehandler); sieve_interpreter_set_result(renv->interp, _testsuite_result); }
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; }
int sieve_multiscript_finish(struct sieve_multiscript **_mscript, struct sieve_error_handler *action_ehandler, enum sieve_execute_flags flags, bool *keep) { struct sieve_multiscript *mscript = *_mscript; struct sieve_result *result = mscript->result; int ret = mscript->status; sieve_result_set_keep_action (mscript->result, NULL, &act_store); if ( mscript->active ) { if ( mscript->teststream != NULL ) { mscript->keep = TRUE; } else { switch ( sieve_result_implicit_keep (result, action_ehandler, flags, TRUE) ) { case SIEVE_EXEC_OK: mscript->keep = TRUE; break; case SIEVE_EXEC_TEMP_FAILURE: if (!sieve_result_executed(result)) { ret = SIEVE_EXEC_TEMP_FAILURE; break; } /* fall through */ default: ret = SIEVE_EXEC_KEEP_FAILED; } } } if ( keep != NULL ) *keep = mscript->keep; /* Cleanup */ sieve_result_unref(&result); *_mscript = NULL; return ret; }
static int testsuite_run (struct sieve_binary *sbin, const struct sieve_message_data *msgdata, const struct sieve_script_env *senv, struct sieve_error_handler *ehandler) { struct sieve_interpreter *interp; struct sieve_result *result; int ret = 0; /* Create the interpreter */ if ( (interp=sieve_interpreter_create(sbin, msgdata, senv, ehandler)) == NULL ) return SIEVE_EXEC_BIN_CORRUPT; /* Run the interpreter */ result = testsuite_result_get(); sieve_result_ref(result); ret = sieve_interpreter_run(interp, result); sieve_result_unref(&result); /* Free the interpreter */ sieve_interpreter_free(&interp); return ret; }
void testsuite_result_deinit(void) { if ( _testsuite_result != NULL ) { sieve_result_unref(&_testsuite_result); } }