]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: syntax: Add verification functions for EHLO keywords and parameters.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Thu, 4 Oct 2018 22:26:03 +0000 (00:26 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 12 Feb 2019 13:40:54 +0000 (15:40 +0200)
src/lib-smtp/smtp-syntax.c
src/lib-smtp/smtp-syntax.h

index 9088184d85a7afe993ee41eede1444ebc26d3ffd..2577fb304965d23c982bce250f7ddf18be95d488 100644 (file)
@@ -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)
 {
index bcfeb24a078e1f4ca7babcec383ca619cb01e38b..352108ec643edeacf43c3cd71909523ad83f72a5 100644 (file)
@@ -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);