]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: params: Add functions for dropping extra MAIL/RCPT parameters.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sun, 16 Sep 2018 20:07:16 +0000 (22:07 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 12 Feb 2019 13:40:51 +0000 (15:40 +0200)
src/lib-smtp/smtp-params.c
src/lib-smtp/smtp-params.h

index d849c840af4a5340a8785573bb62f4ed748bec7b..dbf1c3a3aed9c0008c5c99cefdd4dba61151f058 100644 (file)
@@ -470,6 +470,27 @@ void smtp_params_mail_add_extra(struct smtp_params_mail *params, pool_t pool,
        array_append(&params->extra_params, &param, 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(&params->extra_params))
+               return FALSE;
+
+       array_foreach(&params->extra_params, param) {
+               if (strcasecmp(param->keyword, keyword) == 0) {
+                       if (value_r != NULL)
+                               *value_r = param->value;
+                       array_delete(&params->extra_params,
+                                    array_foreach_idx(&params->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(&params->extra_params, &param, 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(&params->extra_params))
+               return FALSE;
+
+       array_foreach(&params->extra_params, param) {
+               if (strcasecmp(param->keyword, keyword) == 0) {
+                       if (value_r != NULL)
+                               *value_r = param->value;
+                       array_delete(&params->extra_params,
+                                    array_foreach_idx(&params->extra_params,
+                                                      param), 1);
+                       return TRUE;
+               }
+       }
+       return FALSE;
+}
+
 /* write */
 
 static void
index 6e89425b3758ed4c0cd4a9baa6a72619e89ab71b..6decaaf79aa444a93cf0f21fc187b3a31bab701d 100644 (file)
@@ -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);