]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-recipient - Add smtp_server_recipient_reply().
authorStephan Bosch <stephan.bosch@dovecot.fi>
Thu, 14 Mar 2019 21:31:09 +0000 (22:31 +0100)
committerMartti Rannanjärvi <martti.rannanjarvi@open-xchange.com>
Wed, 25 Sep 2019 08:25:20 +0000 (11:25 +0300)
This is a convenience wrapper around smtp_server_reply_index(). This implicitly
adds the <path> prefix to the reply (when it is not an RCPT success reply).

src/lib-smtp/smtp-server-recipient.c
src/lib-smtp/smtp-server.h

index e878732af855b19e6230fe5152c7c4b12206db7d..d47ecf8024d4bb9ceeaeeda89d41e9f74cefbf42 100644 (file)
@@ -136,6 +136,34 @@ void smtp_server_recipient_last_data(struct smtp_server_recipient *rcpt,
        rcpt->cmd = cmd;
 }
 
+void smtp_server_recipient_replyv(struct smtp_server_recipient *rcpt,
+                                 unsigned int status, const char *enh_code,
+                                 const char *fmt, va_list args)
+{
+       i_assert(rcpt->cmd != NULL);
+
+       if (smtp_server_command_is_rcpt(rcpt->cmd) && (status / 100) == 2) {
+               smtp_server_reply_indexv(rcpt->cmd, rcpt->index,
+                                        status, enh_code, fmt, args);
+               return;
+       }
+               
+       smtp_server_reply_index(rcpt->cmd, rcpt->index, status, enh_code,
+                               "<%s> %s", smtp_address_encode(rcpt->path),
+                               t_strdup_vprintf(fmt, args));
+}
+
+void smtp_server_recipient_reply(struct smtp_server_recipient *rcpt,
+                                unsigned int status, const char *enh_code,
+                                const char *fmt, ...)
+{
+       va_list args;
+
+       va_start(args, fmt);
+       smtp_server_recipient_replyv(rcpt, status, enh_code, fmt, args);
+       va_end(args);
+}
+
 void smtp_server_recipient_reset(struct smtp_server_recipient *rcpt)
 {
        i_assert(!rcpt->finished);
index 4895a3e779cac19bb9e58aa42da326366ff408ff..ab536fddc1e3b293c624b3cf27cbf87f8de01ec0 100644 (file)
@@ -83,6 +83,14 @@ struct smtp_server_recipient {
 };
 ARRAY_DEFINE_TYPE(smtp_server_recipient, struct smtp_server_recipient *);
 
+void smtp_server_recipient_replyv(struct smtp_server_recipient *rcpt,
+                                 unsigned int status, const char *enh_code,
+                                 const char *fmt, va_list args)
+                                 ATTR_FORMAT(4, 0);
+void smtp_server_recipient_reply(struct smtp_server_recipient *rcpt,
+                                unsigned int status, const char *enh_code,
+                                const char *fmt, ...) ATTR_FORMAT(4, 5);
+
 /* Hooks */
 
 void smtp_server_recipient_add_hook(struct smtp_server_recipient *rcpt,