Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lavabit/magma.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjpadkins <jacobpadkins@gmail.com>2017-03-20 23:05:06 +0300
committerjpadkins <jacobpadkins@gmail.com>2017-03-20 23:05:06 +0300
commit0caebe074d88e38ef7817eab9d15f44c73128c92 (patch)
treeecf1227b664c0024d591e4f9a97265183f2f9d49 /check/magma
parente2ed8f77db50a37ed50670f67d31e084e8233301 (diff)
Added LOGIN and PLAIN auth tests for SMTP
Diffstat (limited to 'check/magma')
-rw-r--r--check/magma/servers/smtp/smtp_check.c23
-rw-r--r--check/magma/servers/smtp/smtp_check.h6
-rw-r--r--check/magma/servers/smtp/smtp_check_network.c60
3 files changed, 73 insertions, 16 deletions
diff --git a/check/magma/servers/smtp/smtp_check.c b/check/magma/servers/smtp/smtp_check.c
index 8f3baecd..7afaee6b 100644
--- a/check/magma/servers/smtp/smtp_check.c
+++ b/check/magma/servers/smtp/smtp_check.c
@@ -102,7 +102,7 @@ START_TEST (check_smtp_network_auth_plain_s) {
outcome = false;
}
else if (status()) {
- outcome = check_smtp_network_auth_plain_sthread(errmsg, server->network.port);
+ outcome = check_smtp_network_auth_sthread(errmsg, server->network.port, false);
}
log_test("SMTP / NETWORK / AUTH PLAIN / SINGLE THREADED:", errmsg);
@@ -110,6 +110,26 @@ START_TEST (check_smtp_network_auth_plain_s) {
}
END_TEST
+START_TEST (check_smtp_network_auth_login_s) {
+
+ log_disable();
+ bool_t outcome = true;
+ server_t *server = NULL;
+ 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_network_auth_sthread(errmsg, server->network.port, true);
+ }
+
+ log_test("SMTP / NETWORK / AUTH LOGIN / SINGLE THREADED:", errmsg);
+ ck_assert_msg(outcome, st_char_get(errmsg));
+}
+END_TEST
+
Suite * suite_check_smtp(void) {
Suite *s = suite_create("\tSMTP");
@@ -120,6 +140,7 @@ Suite * suite_check_smtp(void) {
suite_check_testcase(s, "SMTP", "SMTP Network Basic/ TCP/S", check_smtp_network_basic_tcp_s);
suite_check_testcase(s, "SMTP", "SMTP Network Basic/ TLS/S", check_smtp_network_basic_tls_s);
suite_check_testcase(s, "SMTP", "SMTP Network Auth Plain/S", check_smtp_network_auth_plain_s);
+ suite_check_testcase(s, "SMTP", "SMTP Network Auth Login/S", check_smtp_network_auth_login_s);
return s;
}
diff --git a/check/magma/servers/smtp/smtp_check.h b/check/magma/servers/smtp/smtp_check.h
index 691c39c7..e25bccd1 100644
--- a/check/magma/servers/smtp/smtp_check.h
+++ b/check/magma/servers/smtp/smtp_check.h
@@ -18,9 +18,11 @@ bool_t check_smtp_checkers_filters_sthread(stringer_t *errmsg, int_t action, int
/// smtp_check_network.c
bool_t check_smtp_client_read_end(client_t *client);
bool_t check_smtp_client_mail_rcpt_data(client_t *client, chr_t *from, chr_t *to, stringer_t *errmsg);
-bool_t check_smtp_client_quit_cleanup(client_t *client, stringer_t *errmsg);
+bool_t check_smtp_client_auth_plain(client_t *client, chr_t *pass, stringer_t *errmsg);
+bool_t check_smtp_client_auth_login(client_t *client, chr_t *user, chr_t *pass, stringer_t *errmsg);
+bool_t check_smtp_client_cleanup(client_t *client, stringer_t *errmsg);
bool_t check_smtp_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t secure);
-bool_t check_smtp_network_auth_plain_sthread(stringer_t *errmsg, uint32_t port);
+bool_t check_smtp_network_auth_sthread(stringer_t *errmsg, uint32_t port, bool_t login);
Suite * suite_check_smtp(void);
diff --git a/check/magma/servers/smtp/smtp_check_network.c b/check/magma/servers/smtp/smtp_check_network.c
index db72c617..d9ce7ceb 100644
--- a/check/magma/servers/smtp/smtp_check_network.c
+++ b/check/magma/servers/smtp/smtp_check_network.c
@@ -53,7 +53,46 @@ bool_t check_smtp_client_mail_rcpt_data(client_t *client, chr_t *from, chr_t *to
return true;
}
-bool_t check_smtp_client_quit_cleanup(client_t *client, stringer_t *errmsg) {
+bool_t check_smtp_client_auth_plain(client_t *client, chr_t *pass, stringer_t *errmsg) {
+
+ chr_t *line_auth = "AUTH PLAIN %s\r\n";
+
+ if (client_print(client, line_auth, pass) != (strlen(line_auth) + strlen(pass)) -2 ||
+ !check_smtp_client_read_end(client) || client_status(client) != 1 ||
+ st_cmp_cs_starts(&(client->line), NULLER("235"))) {
+
+ st_sprint(errmsg, "Failed to return a successful status after submitting credentials");
+ return false;
+ }
+
+ return true;
+}
+
+bool_t check_smtp_client_auth_login(client_t *client, chr_t *user, chr_t *pass, stringer_t *errmsg) {
+
+ if (client_print(client, "AUTH LOGIN\r\n") != 12 || !check_smtp_client_read_end(client) ||
+ client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("334"))) {
+
+ st_sprint(errmsg, "Failed to return a proceed status code after AUTH LOGIN.");
+ return false;
+ }
+ else if (client_print(client, "%s\r\n", user) != strlen(user) + 2 || !check_smtp_client_read_end(client) ||
+ client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("334"))) {
+
+ st_sprint(errmsg, "Failed to return a proceed status code after submitting username.");
+ return false;
+ }
+ else if (client_print(client, "%s\r\n", pass) != strlen(pass) + 2 || !check_smtp_client_read_end(client) ||
+ client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("235"))) {
+
+ st_sprint(errmsg, "Failed to return a successful status after submitting credentials.");
+ return false;
+ }
+
+ return true;
+}
+
+bool_t check_smtp_client_cleanup(client_t *client, stringer_t *errmsg) {
// Test the QUIT command.
if (client_print(client, "QUIT\r\n") != 6 || client_read_line(client) <= 0 ||
@@ -97,7 +136,6 @@ bool_t check_smtp_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_
return false;
}
-
// Test the EHLO command.
else if (client_print(client, "EHLO localhost\r\n") != 16 || !check_smtp_client_read_end(client) ||
client_status(client) != 1 || st_cmp_cs_starts(&(client->line), NULLER("250"))) {
@@ -158,7 +196,7 @@ bool_t check_smtp_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_
return true;
}
-bool_t check_smtp_network_auth_plain_sthread(stringer_t *errmsg, uint32_t port) {
+bool_t check_smtp_network_auth_sthread(stringer_t *errmsg, uint32_t port, bool_t login) {
size_t location = 0;
client_t *client = NULL;
@@ -181,25 +219,21 @@ bool_t check_smtp_network_auth_plain_sthread(stringer_t *errmsg, uint32_t port)
return false;
}
// Issue AUTH with incorrect credentials.
- else if (client_print(client, "AUTH PLAIN bWFnbWEAbWFnbWEAaW52YWxpZHBhc3N3b3Jk\r\n") != 49 ||
- !check_smtp_client_read_end(client) || client_status(client) != 1 ||
- st_cmp_cs_starts(&(client->line), NULLER("535"))) {
+ else if ((login ? check_smtp_client_auth_login(client, "bWFnbWE=", "aW52YWxpZHBhc3N3b3Jk", errmsg)
+ : check_smtp_client_auth_plain(client, "bWFnbWEAbWFnbWEAaW52YWxpZHBhc3N3b3Jk", errmsg))) {
- st_sprint(errmsg, "Failed to return error status after AUTH with incorrect credentials.");
client_close(client);
return false;
}
// Issue AUTH with correct credentials.
- else if (client_print(client, "AUTH PLAIN bWFnbWEAbWFnbWEAcGFzc3dvcmQ=\r\n") != 41 ||
- !check_smtp_client_read_end(client) || client_status(client) != 1 ||
- st_cmp_cs_starts(&(client->line), NULLER("235"))) {
+ else if (!(login ? check_smtp_client_auth_login(client, "bWFnbWE=", "cGFzc3dvcmQ=", errmsg)
+ : check_smtp_client_auth_plain(client, "bWFnbWEAbWFnbWEAcGFzc3dvcmQ=", errmsg))) {
- st_sprint(errmsg, "Failed to return successful status after AUTH with correct credentials.");
client_close(client);
return false;
}
// Try sending mail from an unauthenticated account (ladar@lavabit.com).
- else if (!check_smtp_client_mail_rcpt_data(client, "ladar@lavabit.com", "princess@example.com", errmsg) ||
+ else if ((errmsg = NULL) || !check_smtp_client_mail_rcpt_data(client, "ladar@lavabit.com", "princess@example.com", errmsg) ||
client_print(client, ".\r\n") != 3 || !check_smtp_client_read_end(client) || client_status(client) != 1 ||
st_cmp_cs_starts(&(client->line), NULLER("550"))) {
@@ -217,5 +251,5 @@ bool_t check_smtp_network_auth_plain_sthread(stringer_t *errmsg, uint32_t port)
return false;
}
- return check_smtp_client_quit_cleanup(client, errmsg);
+ return check_smtp_client_cleanup(client, errmsg);
}