diff --git a/src/lib-sieve/sieve-error.c b/src/lib-sieve/sieve-error.c index eb9737c7229bd9f89ca4abf06825ec9bf1523d8b..cecbdec5caa59a8436dfdece7d66ea7c14855148 100644 --- a/src/lib-sieve/sieve-error.c +++ b/src/lib-sieve/sieve-error.c @@ -173,12 +173,16 @@ void sieve_global_info_logv(struct sieve_instance *svinst, SIEVE_ERROR_FLAG_GLOBAL_MAX_INFO), fmt, args); } +#undef sieve_global_error void sieve_global_error(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -191,12 +195,16 @@ void sieve_global_error(struct sieve_instance *svinst, va_end(args); } +#undef sieve_global_warning void sieve_global_warning(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -209,12 +217,16 @@ void sieve_global_warning(struct sieve_instance *svinst, va_end(args); } +#undef sieve_global_info void sieve_global_info(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_INFO, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -227,12 +239,17 @@ void sieve_global_info(struct sieve_instance *svinst, va_end(args); } +#undef sieve_global_info_error void sieve_global_info_error(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -245,12 +262,17 @@ void sieve_global_info_error(struct sieve_instance *svinst, va_end(args); } +#undef sieve_global_info_warning void sieve_global_info_warning(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -267,11 +289,15 @@ void sieve_global_info_warning(struct sieve_instance *svinst, * Default (user) error functions */ +#undef sieve_internal_error void sieve_internal_error(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *user_prefix) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; char str[256]; @@ -314,14 +340,20 @@ void sieve_criticalv(struct sieve_instance *svinst, sieve_direct_logv(svinst, svinst->system_ehandler, &new_params, 0, fmt, args); - sieve_internal_error(ehandler, params->location, user_prefix); + sieve_internal_error(ehandler, + params->csrc.filename, params->csrc.linenum, + params->location, user_prefix); } -void sieve_error(struct sieve_error_handler *ehandler, const char *location, - const char *fmt, ...) +#undef sieve_error +void sieve_error(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -334,11 +366,15 @@ void sieve_error(struct sieve_error_handler *ehandler, const char *location, va_end(args); } -void sieve_warning(struct sieve_error_handler *ehandler, const char *location, - const char *fmt, ...) +#undef sieve_warning +void sieve_warning(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -351,11 +387,15 @@ void sieve_warning(struct sieve_error_handler *ehandler, const char *location, va_end(args); } -void sieve_info(struct sieve_error_handler *ehandler, const char *location, - const char *fmt, ...) +#undef sieve_info +void sieve_info(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_INFO, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -368,11 +408,15 @@ void sieve_info(struct sieve_error_handler *ehandler, const char *location, va_end(args); } -void sieve_debug(struct sieve_error_handler *ehandler, const char *location, - const char *fmt, ...) +#undef sieve_debug +void sieve_debug(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_DEBUG, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -385,12 +429,17 @@ void sieve_debug(struct sieve_error_handler *ehandler, const char *location, va_end(args); } +#undef sieve_critical void sieve_critical(struct sieve_instance *svinst, - struct sieve_error_handler *ehandler, const char *location, - const char *user_prefix, const char *fmt, ...) + struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *user_prefix, + const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -786,13 +835,16 @@ sieve_logfile_vprintf(struct sieve_logfile_ehandler *ehandler, } } -inline static void ATTR_FORMAT(4, 5) +inline static void ATTR_FORMAT(6, 7) sieve_logfile_printf(struct sieve_logfile_ehandler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *prefix, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_INFO, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -921,7 +973,8 @@ static void sieve_logfile_start(struct sieve_logfile_ehandler *ehandler) tm = localtime(&now); if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", tm) > 0) { - sieve_logfile_printf(ehandler, "sieve", "info", + sieve_logfile_printf(ehandler, __FILE__, __LINE__, + "sieve", "info", "started log at %s", buf); } } diff --git a/src/lib-sieve/sieve-error.h b/src/lib-sieve/sieve-error.h index 9b6e988f4e31b59b9d18856e92fcb1e67d16d047..564b704406952f711ea229d69dc2b64de865cb3e 100644 --- a/src/lib-sieve/sieve-error.h +++ b/src/lib-sieve/sieve-error.h @@ -23,6 +23,12 @@ struct sieve_error_handler; struct sieve_error_params { enum log_type log_type; + /* Location log command in C source code */ + struct { + const char *filename; + unsigned int linenum; + } csrc; + /* Location in Sieve source script */ const char *location; }; @@ -50,24 +56,46 @@ void sieve_global_info_logv(struct sieve_instance *svinst, void sieve_global_error(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(4, 5); + ATTR_FORMAT(6, 7); +#define sieve_global_error(svinst, ehandler, ...) \ + sieve_global_error(svinst, ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_global_warning(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(4, 5); + ATTR_FORMAT(6, 7); +#define sieve_global_warning(svinst, ehandler, ...) \ + sieve_global_warning(svinst, ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_global_info(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(4, 5); + ATTR_FORMAT(6, 7); +#define sieve_global_info(svinst, ehandler, ...) \ + sieve_global_info(svinst, ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_global_info_error(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(4, 5); + ATTR_FORMAT(6, 7); +#define sieve_global_info_error(svinst, ehandler, ...) \ + sieve_global_info_error(svinst, ehandler, __FILE__, __LINE__, \ + __VA_ARGS__) void sieve_global_info_warning(struct sieve_instance *svinst, struct sieve_error_handler *ehandler, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(4, 5); + ATTR_FORMAT(6, 7); +#define sieve_global_info_warning(svinst, ehandler, ...) \ + sieve_global_info_warning(svinst, ehandler, __FILE__, __LINE__, \ + __VA_ARGS__) /* * Main (user) error functions @@ -91,22 +119,41 @@ void sieve_criticalv(struct sieve_instance *svinst, ATTR_FORMAT(5, 0); void sieve_error(struct sieve_error_handler *ehandler, - const char *location, const char *fmt, ...) ATTR_FORMAT(3, 4); + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) ATTR_FORMAT(5, 6); +#define sieve_error(ehandler, ...) \ + sieve_error(ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_warning(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_warning(ehandler, ...) \ + sieve_warning(ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_info(struct sieve_error_handler *ehandler, - const char *location, const char *fmt, ...) ATTR_FORMAT(3, 4); + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) ATTR_FORMAT(5, 6); +#define sieve_info(ehandler, ...) \ + sieve_info(ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_debug(struct sieve_error_handler *ehandler, - const char *location, const char *fmt, ...) ATTR_FORMAT(3, 4); + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *fmt, ...) ATTR_FORMAT(5, 6); +#define sieve_debug(ehandler, ...) \ + sieve_debug(ehandler, __FILE__, __LINE__, __VA_ARGS__) void sieve_critical(struct sieve_instance *svinst, - struct sieve_error_handler *ehandler, const char *location, - const char *user_prefix, const char *fmt, ...) - ATTR_FORMAT(5, 6); + struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, + const char *location, const char *user_prefix, + const char *fmt, ...) ATTR_FORMAT(7, 8); +#define sieve_critical(svinst, ehandler, ...) \ + sieve_critical(svinst, ehandler, __FILE__, __LINE__, __VA_ARGS__) + void sieve_internal_error(struct sieve_error_handler *ehandler, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *user_prefix) - ATTR_NULL(1, 2, 3); + ATTR_NULL(1, 4, 5); +#define sieve_internal_error(ehandler, ...) \ + sieve_internal_error(ehandler, __FILE__, __LINE__, __VA_ARGS__) /* * Error handler configuration diff --git a/src/lib-sieve/sieve-generator.c b/src/lib-sieve/sieve-generator.c index 00f4989beb8f27d9b12bdc7e91db5f69cbe2a3ee..ae47067b80535e7d24bfaf8ff10cf71a7c088fb9 100644 --- a/src/lib-sieve/sieve-generator.c +++ b/src/lib-sieve/sieve-generator.c @@ -510,11 +510,15 @@ sieve_generator_run(struct sieve_generator *gentr, * Error handling */ +#undef sieve_generator_error void sieve_generator_error(struct sieve_generator *gentr, + const char *csrc_filename, unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -526,11 +530,16 @@ void sieve_generator_error(struct sieve_generator *gentr, va_end(args); } +#undef sieve_generator_warning void sieve_generator_warning(struct sieve_generator *gentr, + const char *csrc_filename, + unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -542,11 +551,16 @@ void sieve_generator_warning(struct sieve_generator *gentr, va_end(args); } +#undef sieve_generator_critical void sieve_generator_critical(struct sieve_generator *gentr, + const char *csrc_filename, + unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; diff --git a/src/lib-sieve/sieve-generator.h b/src/lib-sieve/sieve-generator.h index c31823cbad07df361961433554a73670a9ef2435..fab2023ba15b2a6ea76d075e6d39b84136ea8115 100644 --- a/src/lib-sieve/sieve-generator.h +++ b/src/lib-sieve/sieve-generator.h @@ -97,14 +97,25 @@ sieve_generator_run(struct sieve_generator *gentr, */ void sieve_generator_error(struct sieve_generator *gentr, - unsigned int source_line, - const char *fmt, ...) ATTR_FORMAT(3, 4); + const char *csrc_filename, unsigned int csrc_linenum, + unsigned int source_line, const char *fmt, ...) + ATTR_FORMAT(5, 6); +#define sieve_generator_error(gentr, ...) \ + sieve_generator_error(gentr, __FILE__, __LINE__, __VA_ARGS__) void sieve_generator_warning(struct sieve_generator *gentr, - unsigned int source_line, - const char *fmt, ...) ATTR_FORMAT(3, 4); + const char *csrc_filename, + unsigned int csrc_linenum, + unsigned int source_line, const char *fmt, ...) + ATTR_FORMAT(5, 6); +#define sieve_generator_warning(gentr, ...) \ + sieve_generator_warning(gentr, __FILE__, __LINE__, __VA_ARGS__) void sieve_generator_critical(struct sieve_generator *gentr, - unsigned int source_line, - const char *fmt, ...) ATTR_FORMAT(3, 4); + const char *csrc_filename, + unsigned int csrc_linenum, + unsigned int source_line, const char *fmt, ...) + ATTR_FORMAT(5, 6); +#define sieve_generator_critical(gentr, ...) \ + sieve_generator_critical(gentr, __FILE__, __LINE__, __VA_ARGS__) #endif diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c index 36df8c242d7179c72eaf2d731a542fadb4dd3b31..67a70351598c30e6a94fd73038d9c76d8dfd84f3 100644 --- a/src/lib-sieve/sieve-interpreter.c +++ b/src/lib-sieve/sieve-interpreter.c @@ -964,11 +964,15 @@ sieve_runtime_logv(const struct sieve_runtime_env *renv, } T_END; } +#undef sieve_runtime_error void sieve_runtime_error(const struct sieve_runtime_env *renv, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -978,11 +982,15 @@ void sieve_runtime_error(const struct sieve_runtime_env *renv, va_end(args); } +#undef sieve_runtime_warning void sieve_runtime_warning(const struct sieve_runtime_env *renv, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -992,11 +1000,15 @@ void sieve_runtime_warning(const struct sieve_runtime_env *renv, va_end(args); } +#undef sieve_runtime_log void sieve_runtime_log(const struct sieve_runtime_env *renv, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_INFO, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -1006,12 +1018,17 @@ void sieve_runtime_log(const struct sieve_runtime_env *renv, va_end(args); } +#undef sieve_runtime_critical void sieve_runtime_critical(const struct sieve_runtime_env *renv, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *user_prefix, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, .location = location, }; va_list args; @@ -1031,8 +1048,12 @@ void sieve_runtime_critical(const struct sieve_runtime_env *renv, va_end(args); } +#undef sieve_runtime_mail_error int sieve_runtime_mail_error(const struct sieve_runtime_env *renv, - struct mail *mail, const char *fmt, ...) + struct mail *mail, + const char *csrc_filename, + unsigned int csrc_linenum, + const char *fmt, ...) { const char *error_msg, *user_prefix; va_list args; @@ -1041,7 +1062,8 @@ int sieve_runtime_mail_error(const struct sieve_runtime_env *renv, va_start(args, fmt); user_prefix = t_strdup_vprintf(fmt, args); - sieve_runtime_critical(renv, NULL, user_prefix, "%s: %s", + sieve_runtime_critical(renv, csrc_filename, csrc_linenum, + NULL, user_prefix, "%s: %s", user_prefix, error_msg); va_end(args); diff --git a/src/lib-sieve/sieve-interpreter.h b/src/lib-sieve/sieve-interpreter.h index 1e28e03345e9d66d720faacbdb154e0389cf8bb1..2a81c8d05723a578c8be225b35e419a4b2299209 100644 --- a/src/lib-sieve/sieve-interpreter.h +++ b/src/lib-sieve/sieve-interpreter.h @@ -170,19 +170,36 @@ int sieve_interpreter_run(struct sieve_interpreter *interp, */ void sieve_runtime_error(const struct sieve_runtime_env *renv, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_runtime_error(renv, ...) \ + sieve_runtime_error(renv, __FILE__, __LINE__, __VA_ARGS__) void sieve_runtime_warning(const struct sieve_runtime_env *renv, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_runtime_warning(renv, ...) \ + sieve_runtime_warning(renv, __FILE__, __LINE__, __VA_ARGS__) void sieve_runtime_log(const struct sieve_runtime_env *renv, + const char *csrc_filename, unsigned int csrc_linenum, const char *location, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_runtime_log(renv, ...) \ + sieve_runtime_log(renv, __FILE__, __LINE__, __VA_ARGS__) void sieve_runtime_critical(const struct sieve_runtime_env *renv, + const char *csrc_filename, + unsigned int csrc_linenum, const char *location, const char *user_prefix, - const char *fmt, ...) ATTR_FORMAT(4, 5); + const char *fmt, ...) ATTR_FORMAT(6, 7); +#define sieve_runtime_critical(renv, ...) \ + sieve_runtime_critical(renv, __FILE__, __LINE__, __VA_ARGS__) int sieve_runtime_mail_error(const struct sieve_runtime_env *renv, - struct mail *mail, const char *fmt, ...) - ATTR_FORMAT(3, 4); + struct mail *mail, + const char *csrc_filename, + unsigned int csrc_linenum, + const char *fmt, ...) ATTR_FORMAT(5, 6); +#define sieve_runtime_mail_error(renv, mail, ...) \ + sieve_runtime_mail_error(renv, mail, __FILE__, __LINE__, __VA_ARGS__) #endif diff --git a/src/lib-sieve/sieve-lexer.c b/src/lib-sieve/sieve-lexer.c index 1e38556d0507407507f56a1a2986e26645cdfad7..1572a455a443b91e77fb49ec82172fc19f6bff22 100644 --- a/src/lib-sieve/sieve-lexer.c +++ b/src/lib-sieve/sieve-lexer.c @@ -120,12 +120,16 @@ void sieve_lexer_free(const struct sieve_lexer **_lexer) * Internal error handling */ -inline static void ATTR_FORMAT(2, 3) -sieve_lexer_error(const struct sieve_lexer *lexer, const char *fmt, ...) +inline static void ATTR_FORMAT(4, 5) +sieve_lexer_error(const struct sieve_lexer *lexer, + const char *csrc_filename, unsigned int csrc_linenum, + const char *fmt, ...) { struct sieve_lexical_scanner *scanner = lexer->scanner; struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -140,13 +144,19 @@ sieve_lexer_error(const struct sieve_lexer *lexer, const char *fmt, ...) va_end(args); } +#define sieve_lexer_error(lexer, ...) \ + sieve_lexer_error(lexer, __FILE__, __LINE__, __VA_ARGS__) -inline static void ATTR_FORMAT(2, 3) -sieve_lexer_warning(const struct sieve_lexer *lexer, const char *fmt, ...) +inline static void ATTR_FORMAT(4, 5) +sieve_lexer_warning(const struct sieve_lexer *lexer, + const char *csrc_filename, unsigned int csrc_linenum, + const char *fmt, ...) { struct sieve_lexical_scanner *scanner = lexer->scanner; struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -161,6 +171,8 @@ sieve_lexer_warning(const struct sieve_lexer *lexer, const char *fmt, ...) va_end(args); } +#define sieve_lexer_warning(lexer, ...) \ + sieve_lexer_warning(lexer, __FILE__, __LINE__, __VA_ARGS__) const char *sieve_lexer_token_description(const struct sieve_lexer *lexer) { diff --git a/src/lib-sieve/sieve-parser.c b/src/lib-sieve/sieve-parser.c index bfe38553e0c66f916d74da547a3dd4635cd078e5..71dc1f75084e8770e498461c4b716f02d633a480 100644 --- a/src/lib-sieve/sieve-parser.c +++ b/src/lib-sieve/sieve-parser.c @@ -88,11 +88,15 @@ void sieve_parser_free(struct sieve_parser **parser) * Internal error handling */ -inline static void ATTR_FORMAT(2, 3) -sieve_parser_error(struct sieve_parser *parser, const char *fmt, ...) +inline static void ATTR_FORMAT(4, 5) +sieve_parser_error(struct sieve_parser *parser, + const char *csrc_filename, unsigned int csrc_linenum, + const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -112,6 +116,8 @@ sieve_parser_error(struct sieve_parser *parser, const char *fmt, ...) va_end(args); } +#define sieve_parser_error(parser, ...) \ + sieve_parser_error(parser, __FILE__, __LINE__, __VA_ARGS__) /* * Sieve grammar parsing diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c index b409db63221c0dd87563b37a50f12316e902eead..a6694f71263725e940ccc22c2cbed9a2a1129fde 100644 --- a/src/lib-sieve/sieve-result.c +++ b/src/lib-sieve/sieve-result.c @@ -1530,11 +1530,15 @@ void sieve_side_effects_list_add(struct sieve_side_effects_list *list, * Error handling */ +#undef sieve_result_error void sieve_result_error(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1543,11 +1547,15 @@ void sieve_result_error(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_global_error void sieve_result_global_error(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1556,11 +1564,15 @@ void sieve_result_global_error(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_warning void sieve_result_warning(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1569,11 +1581,16 @@ void sieve_result_warning(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_global_warning void sieve_result_global_warning(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1582,11 +1599,15 @@ void sieve_result_global_warning(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_log void sieve_result_log(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_INFO, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1595,11 +1616,15 @@ void sieve_result_log(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_global_log void sieve_result_global_log(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_INFO, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1608,11 +1633,16 @@ void sieve_result_global_log(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_global_log_error void sieve_result_global_log_error(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1622,11 +1652,16 @@ void sieve_result_global_log_error(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_global_log_warning void sieve_result_global_log_warning(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1636,11 +1671,15 @@ void sieve_result_global_log_warning(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_critical void sieve_result_critical(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, unsigned int csrc_linenum, const char *user_prefix, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1654,8 +1693,11 @@ void sieve_result_critical(const struct sieve_action_exec_env *aenv, va_end(args); } +#undef sieve_result_mail_error int sieve_result_mail_error(const struct sieve_action_exec_env *aenv, - struct mail *mail, const char *fmt, ...) + struct mail *mail, + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) { const char *error_msg, *user_prefix; va_list args; @@ -1664,8 +1706,8 @@ int sieve_result_mail_error(const struct sieve_action_exec_env *aenv, va_start(args, fmt); user_prefix = t_strdup_vprintf(fmt, args); - sieve_result_critical(aenv, user_prefix, "%s: %s", - user_prefix, error_msg); + sieve_result_critical(aenv, csrc_filename, csrc_linenum, + user_prefix, "%s: %s", user_prefix, error_msg); va_end(args); return SIEVE_EXEC_TEMP_FAILURE; diff --git a/src/lib-sieve/sieve-result.h b/src/lib-sieve/sieve-result.h index 194720706157ced851d72b5fe036b456af3e9789..5d7f4ecf56f3b319636f71a7cee8fa4fdc4f686f 100644 --- a/src/lib-sieve/sieve-result.h +++ b/src/lib-sieve/sieve-result.h @@ -142,27 +142,69 @@ void sieve_side_effects_list_add(struct sieve_side_effects_list *list, */ void sieve_result_error(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, unsigned int csrc_linenum, + const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_error(aenv, ...) \ + sieve_result_error(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_global_error(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_global_error(aenv, ...) \ + sieve_result_global_error(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_warning(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, unsigned int csrc_linenum, + const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_warning(aenv, ...) \ + sieve_result_warning(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_global_warning(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, + unsigned int csrc_linenum, + const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_global_warning(aenv, ...) \ + sieve_result_global_warning(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_log(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, unsigned int csrc_linenum, + const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_log(aenv, ...) \ + sieve_result_log(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_global_log(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_global_log(aenv, ...) \ + sieve_result_global_log(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_global_log_error(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, + unsigned int csrc_linenum, + const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_global_log_error(aenv, ...) \ + sieve_result_global_log_error(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_global_log_warning(const struct sieve_action_exec_env *aenv, - const char *fmt, ...) ATTR_FORMAT(2, 3); + const char *csrc_filename, + unsigned int csrc_linenum, + const char *fmt, ...) + ATTR_FORMAT(4, 5); +#define sieve_result_global_log_warning(aenv, ...) \ + sieve_result_global_log_warning(aenv, __FILE__, __LINE__, __VA_ARGS__) void sieve_result_critical(const struct sieve_action_exec_env *aenv, + const char *csrc_filename, unsigned int csrc_linenum, const char *user_prefix, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_result_critical(aenv, ...) \ + sieve_result_critical(aenv, __FILE__, __LINE__, __VA_ARGS__) int sieve_result_mail_error(const struct sieve_action_exec_env *aenv, - struct mail *mail, const char *fmt, ...) - ATTR_FORMAT(3, 4); + struct mail *mail, + const char *csrc_filename, + unsigned int csrc_linenum, const char *fmt, ...) + ATTR_FORMAT(5, 6); +#define sieve_result_mail_error(aenv, mail, ...) \ + sieve_result_mail_error(aenv, mail, __FILE__, __LINE__, __VA_ARGS__) #endif diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c index 6f605564ada691fc5a0d12cfe64f4de0f2f53600..d0c96f81a5b09005426999df221e17bee75655f7 100644 --- a/src/lib-sieve/sieve-validator.c +++ b/src/lib-sieve/sieve-validator.c @@ -1659,11 +1659,15 @@ sieve_validator_object_registry_init(struct sieve_validator *valdtr, * Error handling */ +#undef sieve_validator_error void sieve_validator_error(struct sieve_validator *valdtr, + const char *csrc_filename, unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_ERROR, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; @@ -1675,11 +1679,16 @@ void sieve_validator_error(struct sieve_validator *valdtr, va_end(args); } +#undef sieve_validator_warning void sieve_validator_warning(struct sieve_validator *valdtr, + const char *csrc_filename, + unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) { struct sieve_error_params params = { .log_type = LOG_TYPE_WARNING, + .csrc.filename = csrc_filename, + .csrc.linenum = csrc_linenum, }; va_list args; diff --git a/src/lib-sieve/sieve-validator.h b/src/lib-sieve/sieve-validator.h index 43d9cf6c99870b07fda07a6d9d990c790f79b8e3..21b41ccf166d84c351870c9ae682ee06a76272bf 100644 --- a/src/lib-sieve/sieve-validator.h +++ b/src/lib-sieve/sieve-validator.h @@ -181,10 +181,17 @@ sieve_validator_object_registry_init(struct sieve_validator *valdtr, */ void sieve_validator_error(struct sieve_validator *valdtr, + const char *csrc_filename, unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_validator_error(valdtr, ...) \ + sieve_validator_error(valdtr, __FILE__, __LINE__, __VA_ARGS__) void sieve_validator_warning(struct sieve_validator *valdtr, + const char *csrc_filename, + unsigned int csrc_linenum, unsigned int source_line, const char *fmt, ...) - ATTR_FORMAT(3, 4); + ATTR_FORMAT(5, 6); +#define sieve_validator_warning(valdtr, ...) \ + sieve_validator_warning(valdtr, __FILE__, __LINE__, __VA_ARGS__) #endif