From 98ea2c2e2f3f83761b25e346a0315b9f22f6e878 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Fri, 5 Oct 2018 00:26:03 +0200 Subject: [PATCH] lib-smtp: syntax: Add verification functions for EHLO keywords and parameters. --- src/lib-smtp/smtp-syntax.c | 42 ++++++++++++++++++++++++++++++++++++++ src/lib-smtp/smtp-syntax.h | 4 ++++ 2 files changed, 46 insertions(+) diff --git a/src/lib-smtp/smtp-syntax.c b/src/lib-smtp/smtp-syntax.c index 9088184d85..2577fb3049 100644 --- a/src/lib-smtp/smtp-syntax.c +++ b/src/lib-smtp/smtp-syntax.c @@ -165,6 +165,48 @@ int smtp_helo_domain_parse(const char *helo, * EHLO reply */ +bool smtp_ehlo_keyword_is_valid(const char *keyword) +{ + const char *p; + + for (p = keyword; *p != '\0'; p++) { + if (!i_isalnum(*p)) + return FALSE; + } + return TRUE; +} + +bool smtp_ehlo_param_is_valid(const char *param) +{ + const char *p; + + for (p = param; *p != '\0'; p++) { + if (!smtp_char_is_ehlo_param(*p)) + return FALSE; + } + return TRUE; +} + +bool smtp_ehlo_params_are_valid(const char *params) +{ + const char *p; + bool space = FALSE; + + for (p = params; *p != '\0'; p++) { + if (*p == ' ') { + if (space) + return FALSE; + space = TRUE; + continue; + } + space = FALSE; + + if (!smtp_char_is_ehlo_param(*p)) + return FALSE; + } + return TRUE; +} + static int smtp_parse_ehlo_line(struct smtp_parser *parser, const char **key_r, const char *const **params_r) { diff --git a/src/lib-smtp/smtp-syntax.h b/src/lib-smtp/smtp-syntax.h index bcfeb24a07..352108ec64 100644 --- a/src/lib-smtp/smtp-syntax.h +++ b/src/lib-smtp/smtp-syntax.h @@ -38,6 +38,10 @@ int smtp_helo_domain_parse(const char *helo, * EHLO reply */ +bool smtp_ehlo_keyword_is_valid(const char *keyword); +bool smtp_ehlo_param_is_valid(const char *param); +bool smtp_ehlo_params_are_valid(const char *params); + int smtp_ehlo_line_parse(const char *ehlo_line, const char **key_r, const char *const **params_r, const char **error_r); -- 2.47.3