diff options
Diffstat (limited to 'check')
-rw-r--r-- | check/magma/servers/smtp/auth_check.c | 32 | ||||
-rw-r--r-- | check/magma/servers/smtp/smtp_check.c | 20 | ||||
-rw-r--r-- | check/magma/servers/smtp/smtp_check.h | 3 |
3 files changed, 55 insertions, 0 deletions
diff --git a/check/magma/servers/smtp/auth_check.c b/check/magma/servers/smtp/auth_check.c new file mode 100644 index 00000000..7760d5a1 --- /dev/null +++ b/check/magma/servers/smtp/auth_check.c @@ -0,0 +1,32 @@ +/** + * @file /check/magma/servers/smtp/auth_check.c + * + * @brief SMTP auth test functions. + */ + +#include "magma_check.h" + +bool_t check_smtp_auth_from_field_sthread(stringer_t *errmsg) { + + client_t *client = NULL; + + // Connect the client. + if (!(client = client_connect("localhost", port)) || client_read_line(client) <= 0 || + client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("220")) || + !st_search_cs(&(client->line), NULLER(" ESMTP "), &location)) { + + st_sprint(errmsg, "Failed to connect with the SMTP server."); + client_close(client); + return false; + } + // Issue EHLO. + else if (client_print(client, "EHLO localhost\r\n") != 16 || !check_smtp_client_read_line_to_end(client) || + client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("250"))) { + + st_sprint(errmsg, "Failed to return successful status after EHLO."); + client_close(client); + return false; + } + + return true; +} diff --git a/check/magma/servers/smtp/smtp_check.c b/check/magma/servers/smtp/smtp_check.c index 25506ee3..6d1a1267 100644 --- a/check/magma/servers/smtp/smtp_check.c +++ b/check/magma/servers/smtp/smtp_check.c @@ -70,6 +70,25 @@ START_TEST (check_smtp_checkers_filters_s) { } END_TEST +START_TEST (check_smtp_auth_from_field_s) { + + log_disable(); + bool_t outcome = true; + stringer_t *errmsg = MANAGEDBUF(1024); + + if (!(server = servers_get_by_protocol(SMTP, false))) { + st_sprint(errmsg, "No SMTP servers were configured and available for testing."); + outcome = false; + } + else if (status()) { + outcome = check_smtp_auth_from_field_sthread(errmsg, server->network.port); + } + + log_test("SMTP / AUTH / FROM FIELD / SINGLE THREADED:", errmsg); + ck_assert_msg(outcome, st_char_get(errmsg)); +} +END_TEST + Suite * suite_check_smtp(void) { Suite *s = suite_create("\tSMTP"); @@ -78,6 +97,7 @@ Suite * suite_check_smtp(void) { suite_check_testcase(s, "SMTP", "SMTP Checkers Greylist/S", check_smtp_checkers_greylist_s); suite_check_testcase(s, "SMTP", "SMTP Checkers Filters/S", check_smtp_checkers_filters_s); suite_check_testcase(s, "SMTP", "SMTP Network Basic/S", check_smtp_network_basic_s); + suite_check_testcase(s, "SMTP", "SMTP Auth From Field/S", check_smtp_auth_from_field_s); return s; } diff --git a/check/magma/servers/smtp/smtp_check.h b/check/magma/servers/smtp/smtp_check.h index 9e27bee4..2da001f5 100644 --- a/check/magma/servers/smtp/smtp_check.h +++ b/check/magma/servers/smtp/smtp_check.h @@ -10,6 +10,9 @@ /// accept_check.c bool_t check_smtp_accept_message_sthread(stringer_t *errmsg); +/// auth_check.c +bool_t check_smtp_auth_from_field_sthread(stringer_t *errmsg); + /// checkers_check.c bool_t check_smtp_checkers_greylist_sthread(stringer_t *errmsg); bool_t check_smtp_checkers_regex_sthread(stringer_t *errmsg); |