From: Stephan Bosch Date: Thu, 4 Oct 2018 22:26:03 +0000 (+0200) Subject: lib-smtp: syntax: Add verification functions for EHLO keywords and parameters. X-Git-Tag: 2.3.5~140 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=946a45a94ca7f7bd115fe88f2a871a618b760b7d;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: syntax: Add verification functions for EHLO keywords and parameters. --- 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);