From f716c910a8d6a9ed4d6c0fc8fbd5a09c4d92fd2d Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sun, 16 Sep 2018 22:07:16 +0200 Subject: [PATCH] lib-smtp: params: Add functions for dropping extra MAIL/RCPT parameters. --- src/lib-smtp/smtp-params.c | 42 ++++++++++++++++++++++++++++++++++++++ src/lib-smtp/smtp-params.h | 18 ++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/src/lib-smtp/smtp-params.c b/src/lib-smtp/smtp-params.c index d849c840af..dbf1c3a3ae 100644 --- a/src/lib-smtp/smtp-params.c +++ b/src/lib-smtp/smtp-params.c @@ -470,6 +470,27 @@ void smtp_params_mail_add_extra(struct smtp_params_mail *params, pool_t pool, array_append(¶ms->extra_params, ¶m, 1); } +bool smtp_params_mail_drop_extra(struct smtp_params_mail *params, + const char *keyword, const char **value_r) +{ + const struct smtp_param *param; + + if (!array_is_created(¶ms->extra_params)) + return FALSE; + + array_foreach(¶ms->extra_params, param) { + if (strcasecmp(param->keyword, keyword) == 0) { + if (value_r != NULL) + *value_r = param->value; + array_delete(¶ms->extra_params, + array_foreach_idx(¶ms->extra_params, + param), 1); + return TRUE; + } + } + return FALSE; +} + /* write */ static void @@ -952,6 +973,27 @@ void smtp_params_rcpt_add_extra(struct smtp_params_rcpt *params, pool_t pool, array_append(¶ms->extra_params, ¶m, 1); } +bool smtp_params_rcpt_drop_extra(struct smtp_params_rcpt *params, + const char *keyword, const char **value_r) +{ + const struct smtp_param *param; + + if (!array_is_created(¶ms->extra_params)) + return FALSE; + + array_foreach(¶ms->extra_params, param) { + if (strcasecmp(param->keyword, keyword) == 0) { + if (value_r != NULL) + *value_r = param->value; + array_delete(¶ms->extra_params, + array_foreach_idx(¶ms->extra_params, + param), 1); + return TRUE; + } + } + return FALSE; +} + /* write */ static void diff --git a/src/lib-smtp/smtp-params.h b/src/lib-smtp/smtp-params.h index 6e89425b37..6decaaf79a 100644 --- a/src/lib-smtp/smtp-params.h +++ b/src/lib-smtp/smtp-params.h @@ -86,6 +86,8 @@ void smtp_param_write(string_t *out, const struct smtp_param *param); * MAIL parameters */ +/* parse */ + int smtp_params_mail_parse(pool_t pool, const char *args, enum smtp_capability caps, const char *const *param_extensions, @@ -94,12 +96,17 @@ int smtp_params_mail_parse(pool_t pool, const char *args, enum smtp_param_parse_error *error_code_r, const char **error_r) ATTR_NULL(4, 5); +/* manipulate */ + void smtp_params_mail_copy(pool_t pool, struct smtp_params_mail *dst, const struct smtp_params_mail *src) ATTR_NULL(3); void smtp_params_mail_add_extra(struct smtp_params_mail *params, pool_t pool, const char *keyword, const char *value); +bool smtp_params_mail_drop_extra(struct smtp_params_mail *params, + const char *keyword, const char **value_r) + ATTR_NULL(3); /* write */ @@ -107,6 +114,8 @@ void smtp_params_mail_write(string_t *buffer, enum smtp_capability caps, const struct smtp_params_mail *params); +/* evaluate */ + const struct smtp_param * smtp_params_mail_get_extra(const struct smtp_params_mail *params, const char *keyword); @@ -115,6 +124,8 @@ smtp_params_mail_get_extra(const struct smtp_params_mail *params, * RCPT parameters */ +/* parse */ + int smtp_params_rcpt_parse(pool_t pool, const char *args, enum smtp_capability caps, const char *const *param_extensions, @@ -122,12 +133,17 @@ int smtp_params_rcpt_parse(pool_t pool, const char *args, enum smtp_param_parse_error *error_code_r, const char **error_r) ATTR_NULL(4); +/* manipulate */ + void smtp_params_rcpt_copy(pool_t pool, struct smtp_params_rcpt *dst, const struct smtp_params_rcpt *src) ATTR_NULL(3); void smtp_params_rcpt_add_extra(struct smtp_params_rcpt *params, pool_t pool, const char *keyword, const char *value); +bool smtp_params_rcpt_drop_extra(struct smtp_params_rcpt *params, + const char *keyword, const char **value_r) + ATTR_NULL(3); /* write */ @@ -135,6 +151,8 @@ void smtp_params_rcpt_write(string_t *buffer, enum smtp_capability caps, const struct smtp_params_rcpt *params); +/* evaluate */ + const struct smtp_param * smtp_params_rcpt_get_extra(const struct smtp_params_rcpt *params, const char *keyword); -- 2.47.3