From 3afa83c450379a4b0e645525f3dca7f2da91b2f6 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 13 Jan 2018 11:52:31 +0100 Subject: [PATCH] lib-smtp: params: Add function that allows checking whether RCPT parameters are equal. --- src/lib-smtp/smtp-params.c | 45 ++++++++++++++++++++++++++++++++++++++ src/lib-smtp/smtp-params.h | 3 +++ 2 files changed, 48 insertions(+) diff --git a/src/lib-smtp/smtp-params.c b/src/lib-smtp/smtp-params.c index 201f56908f..7f28be79fe 100644 --- a/src/lib-smtp/smtp-params.c +++ b/src/lib-smtp/smtp-params.c @@ -1022,3 +1022,48 @@ smtp_params_rcpt_get_extra(const struct smtp_params_rcpt *params, } return NULL; } + +bool smtp_params_rcpt_equals(const struct smtp_params_rcpt *params1, + const struct smtp_params_rcpt *params2) +{ + if (params1 == NULL || params2 == NULL) + return (params1 == params2); + + /* NOTIFY: RFC 3461, Section 4.1 */ + if (params1->notify != params2->notify) + return FALSE; + + /* ORCPT: RFC 3461, Section 4.2 */ + if (null_strcasecmp(params1->orcpt.addr_type, + params2->orcpt.addr_type) != 0) + return FALSE; + if (null_strcasecmp(params1->orcpt.addr_type, "rfc822") == 0) { + if (!smtp_address_equals(params1->orcpt.addr, + params2->orcpt.addr)) + return FALSE; + } else { + if (null_strcmp(params1->orcpt.addr_raw, + params2->orcpt.addr_raw) != 0) + return FALSE; + } + + /* extra parameters */ + if (array_is_created(¶ms1->extra_params) != + array_is_created(¶ms2->extra_params)) + return FALSE; + if (array_is_created(¶ms1->extra_params)) { + const struct smtp_param *param1, *param2; + + if (array_count(¶ms1->extra_params) != + array_count(¶ms2->extra_params)) + return FALSE; + array_foreach(¶ms1->extra_params, param1) { + param2 = smtp_params_rcpt_get_extra(params2, param1->keyword); + if (param2 == NULL) + return FALSE; + if (null_strcmp(param1->value, param2->value) != 0) + return FALSE; + } + } + return TRUE; +} diff --git a/src/lib-smtp/smtp-params.h b/src/lib-smtp/smtp-params.h index 301d25895c..fe9d779388 100644 --- a/src/lib-smtp/smtp-params.h +++ b/src/lib-smtp/smtp-params.h @@ -126,4 +126,7 @@ const struct smtp_param * smtp_params_rcpt_get_extra(const struct smtp_params_rcpt *params, const char *keyword); +bool smtp_params_rcpt_equals(const struct smtp_params_rcpt *params1, + const struct smtp_params_rcpt *params2); + #endif -- 2.47.3