summaryrefslogtreecommitdiff
path: root/smtp.c
diff options
context:
space:
mode:
Diffstat (limited to 'smtp.c')
-rw-r--r--smtp.c92
1 files changed, 78 insertions, 14 deletions
diff --git a/smtp.c b/smtp.c
index f536cec..f111ea4 100644
--- a/smtp.c
+++ b/smtp.c
@@ -131,7 +131,6 @@ void identities_cleanup(void)
static const char * message_cb (void **buf, int *len, void *arg)
{
message_t *message = (message_t *)arg;
- int octets;
if (len == NULL)
{
@@ -154,10 +153,6 @@ static const char * message_cb (void **buf, int *len, void *arg)
static void event_cb (smtp_session_t session, int event_no, void *arg, ...)
{
va_list ap;
- const char *mailbox;
- smtp_message_t message;
- smtp_recipient_t recipient;
- const smtp_status_t *status;
va_start (ap, arg);
@@ -165,12 +160,56 @@ static void event_cb (smtp_session_t session, int event_no, void *arg, ...)
case SMTP_EV_EXTNA_DSN:
fprintf(stderr, "Delivery Status Notification extension not supported by MTA\n");
break;
+
case SMTP_EV_EXTNA_8BITMIME:
fprintf(stderr, "8bit-MIME extension not supported by MTA\n");
break;
+
case SMTP_EV_EXTNA_STARTTLS:
fprintf(stderr, "StartTLS extension not supported by MTA\n");
break;
+
+ case SMTP_EV_WEAK_CIPHER:
+ {
+ int bits = va_arg (ap, int);
+ int *ok = va_arg (ap, int *);
+
+ fprintf(stderr, "Weak cipher (%d bits)\n", bits);
+
+ *ok = 0;
+ break;
+ }
+
+ case SMTP_EV_INVALID_PEER_CERTIFICATE:
+ {
+ long result = va_arg (ap, long);
+ int *ok = va_arg (ap, int *);
+
+ fprintf(stderr, "Invalid peer certificate (error %ld)\n", result);
+
+ *ok = 0;
+ break;
+ }
+
+ case SMTP_EV_NO_PEER_CERTIFICATE:
+ {
+ int *ok = va_arg (ap, int *);
+
+ fprintf(stderr, "No peer certificate\n");
+
+ *ok = 0;
+ break;
+ }
+
+ case SMTP_EV_WRONG_PEER_CERTIFICATE:
+ {
+ int *ok = va_arg (ap, int *);
+
+ fprintf(stderr, "Wrong peer certificate\n");
+
+ *ok = 0;
+ break;
+ }
}
if (verbose)
@@ -189,21 +228,28 @@ static void event_cb (smtp_session_t session, int event_no, void *arg, ...)
break;
case SMTP_EV_MAILSTATUS:
- mailbox = va_arg (ap, const char *);
- message = va_arg (ap, smtp_message_t);
- status = smtp_reverse_path_status (message);
+ {
+ const char *mailbox = va_arg (ap, const char *);
+ smtp_message_t message = message = va_arg (ap, smtp_message_t);
+ const smtp_status_t *status = smtp_reverse_path_status (message);
+
fprintf (stdout, "From %s: %d %s", mailbox, status->code, status->text);
break;
+ }
case SMTP_EV_RCPTSTATUS:
- mailbox = va_arg (ap, const char *);
- recipient = va_arg (ap, smtp_recipient_t);
- status = smtp_recipient_status (recipient);
+ {
+ const char *mailbox = va_arg (ap, const char *);
+ smtp_recipient_t recipient = va_arg (ap, smtp_recipient_t);
+ const smtp_status_t *status = smtp_recipient_status (recipient);
+
fprintf (stdout, "To %s: %d %s", mailbox, status->code, status->text);
break;
+ }
case SMTP_EV_MESSAGEDATA:
- message = va_arg (ap, smtp_message_t);
+ {
+ smtp_message_t message = message = va_arg (ap, smtp_message_t);
if (!sizeticking)
{
fputs("Message data: ", stdout);
@@ -217,16 +263,34 @@ static void event_cb (smtp_session_t session, int event_no, void *arg, ...)
sizeticker -= SIZETICKER;
}
break;
+ }
case SMTP_EV_MESSAGESENT:
- message = va_arg (ap, smtp_message_t);
- status = smtp_message_transfer_status (message);
+ {
+ smtp_message_t message = va_arg (ap, smtp_message_t);
+ const smtp_status_t *status = smtp_message_transfer_status (message);
+
fprintf (stdout, "Message sent: %d %s", status->code, status->text);
break;
+ }
case SMTP_EV_DISCONNECT:
fputs("Disconnected to MTA\n", stdout);
break;
+
+ case SMTP_EV_STARTTLS_OK:
+ {
+ void *ssl = va_arg(ap, void *);
+ void *cipher = va_arg(ap, void *);
+ int bits = va_arg(ap, int);
+
+ (void) ssl;
+ (void) cipher;
+
+ fprintf(stdout, "StartTLS OK (%d bits)\n", bits);
+ break;
+ }
+
}
}