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-04-18 00:17:46 +0300
committerjpadkins <jacobpadkins@gmail.com>2017-04-18 00:17:46 +0300
commit832a14a4b8448ac807147a8bede3c211c96f9c65 (patch)
treec5a6ec693f15ec98ab1bf91edffca3de14ea7ab5
parent4afb6a2a1edca154812ccb9d26c3fa411515fb6c (diff)
Adding misc network tests.
-rw-r--r--check/magma/regression/regression_check.h1
-rw-r--r--check/magma/regression/regression_check_helpers.c4
-rw-r--r--check/magma/servers/camel/camel_check_network.c4
-rw-r--r--check/magma/servers/http/http_check.h2
-rw-r--r--check/magma/servers/http/http_check_network.c12
-rw-r--r--check/magma/servers/smtp/smtp_check.c42
-rw-r--r--check/magma/servers/smtp/smtp_check.h2
-rw-r--r--check/magma/servers/smtp/smtp_check_network.c83
-rw-r--r--sandbox/etc/.magma.sandbox.config.swpbin0 -> 16384 bytes
9 files changed, 140 insertions, 10 deletions
diff --git a/check/magma/regression/regression_check.h b/check/magma/regression/regression_check.h
index 58599727..655424d7 100644
--- a/check/magma/regression/regression_check.h
+++ b/check/magma/regression/regression_check.h
@@ -11,6 +11,7 @@
void check_regression_file_descriptors_leak_test(void);
bool_t check_client_dot_stuff(client_t *client, chr_t *token);
bool_t check_regression_smtp_dot_stuffing_sthread(stringer_t *errmsg);
+bool_t check_regression_imap_search_range_sthread(stringer_t *errmsg);
Suite * suite_check_regression(void);
diff --git a/check/magma/regression/regression_check_helpers.c b/check/magma/regression/regression_check_helpers.c
index bf2916bf..6f3f96a2 100644
--- a/check/magma/regression/regression_check_helpers.c
+++ b/check/magma/regression/regression_check_helpers.c
@@ -133,3 +133,7 @@ bool_t check_regression_smtp_dot_stuffing_sthread(stringer_t *errmsg) {
client_close(client);
return true;
}
+
+bool_t check_regression_imap_search_range_sthread(stringer_t *errmsg) {
+
+}
diff --git a/check/magma/servers/camel/camel_check_network.c b/check/magma/servers/camel/camel_check_network.c
index 047f4e76..9ac36964 100644
--- a/check/magma/servers/camel/camel_check_network.c
+++ b/check/magma/servers/camel/camel_check_network.c
@@ -68,7 +68,7 @@ stringer_t * check_camel_print(stringer_t *command, stringer_t *cookie, bool_t s
// Submit the command and check the status of the response.
if (!(client = check_camel_connect(secure)) || !check_camel_json_write(client, command, cookie, secure) ||
- !(length = check_http_content_length_get(client)) || !(json = check_camel_json_read(client, length))) {
+ (length = check_http_content_length_get(client)) < 0 || !(json = check_camel_json_read(client, length))) {
client_close(client);
return false;
@@ -315,7 +315,7 @@ bool_t check_camel_login(stringer_t *user, stringer_t *pass, stringer_t *cookie,
}
else if (client_print(client, st_char_get(message), length, id, st_length_int(user), st_char_get(user), st_length_int(pass),
st_char_get(pass)) != ((st_length_get(message) - 12) + uint32_digits(length) + uint32_digits(id) + st_length_get(user) +
- st_length_get(pass)) || !check_camel_status(client) || !(content_length = check_http_content_length_get(client)) ||
+ st_length_get(pass)) || !check_camel_status(client) || (content_length = check_http_content_length_get(client)) < 0 ||
!(json = check_camel_json_read(client, content_length))) {
client_close(client);
diff --git a/check/magma/servers/http/http_check.h b/check/magma/servers/http/http_check.h
index ee6cd2dd..75387e88 100644
--- a/check/magma/servers/http/http_check.h
+++ b/check/magma/servers/http/http_check.h
@@ -9,7 +9,7 @@
/// http_check_network.c
bool_t check_http_read_to_empty(client_t *client);
-size_t check_http_content_length_get(client_t *client);
+int32_t check_http_content_length_get(client_t *client);
bool_t check_http_content_length_test(client_t *client, uint32_t content_length, stringer_t *errmsg);
bool_t check_http_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_t secure);
bool_t check_http_network_options_sthread(stringer_t *errmsg, uint32_t port, bool_t secure);
diff --git a/check/magma/servers/http/http_check_network.c b/check/magma/servers/http/http_check_network.c
index 5d823c4f..0d81c94c 100644
--- a/check/magma/servers/http/http_check_network.c
+++ b/check/magma/servers/http/http_check_network.c
@@ -30,7 +30,7 @@ bool_t check_http_read_to_empty(client_t *client) {
* @param client A client_t containing the response of an HTTP request.
* @return The value of Content-Length in the HTTP message header.
*/
-size_t check_http_content_length_get(client_t *client) {
+int32_t check_http_content_length_get(client_t *client) {
placer_t cl_placer = pl_null();
size_t location = 0, content_length = 0;
@@ -40,16 +40,16 @@ size_t check_http_content_length_get(client_t *client) {
}
if (!st_search_chr(&(client->line), ' ', &location)) {
- //st_sprint(errmsg, "The Content-Length line was improperly formed.");
+ return -1;
}
else if (pl_empty(cl_placer = pl_init(pl_data_get(client->line) + location, pl_length_get(client->line) - location))) {
- //st_sprint(errmsg, "Failed to initialize content length placer.");
+ return -1;
}
else if (!pl_inc(&cl_placer, pl_length_get(client->line) - location) || !(cl_placer.length = pl_length_get(cl_placer)-2)) {
- //st_sprint(errmsg, "Failed to increment placer to location of content-length value.");
+ return -1;
}
else if (!size_conv_bl(pl_char_get(cl_placer), pl_length_get(cl_placer), &content_length)) {
- //st_sprint(errmsg, "Failed to convert the content-length string to a uint32");
+ return -1;
}
return content_length;
@@ -119,7 +119,7 @@ bool_t check_http_network_basic_sthread(stringer_t *errmsg, uint32_t port, bool_
}
// Test submitting a GET request.
else if (client_write(client, PLACER("GET / HTTP/1.1\r\nHost: localhost\r\n\r\n", 35)) != 35 ||
- client_status(client) != 1 || !(content_length = check_http_content_length_get(client))) {
+ client_status(client) != 1 || (content_length = check_http_content_length_get(client)) < 0) {
if (st_empty(errmsg)) st_sprint(errmsg, "Failed to return a valid GET response.");
client_close(client);
return false;
diff --git a/check/magma/servers/smtp/smtp_check.c b/check/magma/servers/smtp/smtp_check.c
index 836d3072..aa7e6b8d 100644
--- a/check/magma/servers/smtp/smtp_check.c
+++ b/check/magma/servers/smtp/smtp_check.c
@@ -138,6 +138,46 @@ START_TEST (check_smtp_network_auth_login_s) {
}
END_TEST
+START_TEST (check_smtp_network_quotas_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() && !check_smtp_network_quotas_sthread(errmsg, server->network.port, true)) {
+ outcome = false;
+ }
+
+ log_test("SMTP / NETWORK / QUOTAS / SINGLE THREADED:", NULLER("SKIPPED"));
+ ck_assert_msg(outcome, st_char_get(errmsg));
+}
+END_TEST
+
+START_TEST (check_smtp_network_starttls_advertisement_s) {
+
+ log_disable();
+ bool_t outcome = true;
+ server_t *tcp_server = NULL, *tls_server = NULL;
+ stringer_t *errmsg = MANAGEDBUF(1024);
+
+ if (!(tcp_server = servers_get_by_protocol(SMTP, false)) || !(tls_server = servers_get_by_protocol(SMTP, true))) {
+ st_sprint(errmsg, "No SMTP servers were configured and available for testing for both TCP and TLS.");
+ outcome = false;
+ }
+ else if (status() && !check_smtp_network_starttls_advertisement_sthread(errmsg, tcp_server->network.port, tls_server->network.port)) {
+ outcome = false;
+ }
+
+ log_test("SMTP/ NETWORK / STARTTLS ADVERTISEMENT / SINGLE THREADED:", errmsg);
+ ck_assert_msg(outcome, st_char_get(errmsg));
+}
+END_TEST
+
Suite * suite_check_smtp(void) {
Suite *s = suite_create("\tSMTP");
@@ -149,6 +189,8 @@ Suite * suite_check_smtp(void) {
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);
+ suite_check_testcase(s, "SMTP", "SMTP Network Quotas/S", check_smtp_network_quotas_s);
+ suite_check_testcase(s, "SMTP", "SMTP Network STARTTLS Advertisement/S", check_smtp_network_starttls_advertisement_s);
return s;
}
diff --git a/check/magma/servers/smtp/smtp_check.h b/check/magma/servers/smtp/smtp_check.h
index 845b9f43..592c9599 100644
--- a/check/magma/servers/smtp/smtp_check.h
+++ b/check/magma/servers/smtp/smtp_check.h
@@ -23,6 +23,8 @@ bool_t check_smtp_client_auth_login(client_t *client, stringer_t *user, stringer
bool_t check_smtp_client_quit(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_sthread(stringer_t *errmsg, uint32_t port, bool_t login);
+bool_t check_smtp_network_quotas_sthread(stringer_t *errmsg, uint32_t port, bool_t secure);
+bool_t check_smtp_network_starttls_advertisement_sthread(stringer_t *errmsg, uint32_t tcp_port, uint32_t tls_port);
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 2f75098f..f1206128 100644
--- a/check/magma/servers/smtp/smtp_check_network.c
+++ b/check/magma/servers/smtp/smtp_check_network.c
@@ -123,7 +123,6 @@ bool_t check_smtp_client_quit(client_t *client, stringer_t *errmsg) {
st_sprint(errmsg, "Failed to return successful status following the QUIT command.");
return false;
}
-
else if (client_read_line(client) > 0) {
st_sprint(errmsg, "The server failed to close the connection after issuing a QUIT command.");
@@ -279,3 +278,85 @@ bool_t check_smtp_network_auth_sthread(stringer_t *errmsg, uint32_t port, bool_t
client_close(client);
return true;
}
+
+bool_t check_smtp_network_quotas_sthread(stringer_t *errmsg, uint32_t port, bool_t secure) {
+
+ // Set the quota low for the magma user.
+ if (sql_query(PLACER("UPDATE Users SET quota = 1 WHERE usernum = 1;", 0)) != 0) {
+ return false;
+ }
+
+ // Reset the quota for the magma user.
+ else if (sql_query(PLACER("UPDATE Users SET quota = 4294967296 WHERE usernum = 1;", 0)) != 0) {
+ return false;
+ }
+
+ return true;
+}
+
+bool_t check_smtp_network_starttls_advertisement_sthread(stringer_t *errmsg, uint32_t tcp_port, uint32_t tls_port) {
+
+ client_t *client = NULL;
+ bool_t found_starttls_ad = false;
+
+ // Connect the client over TCP.
+ if (!(client = client_connect("localhost", tcp_port)) || client_read_line(client) <= 0 ||
+ !net_set_timeout(client->sockd, 20, 20)) {
+
+ st_sprint(errmsg, "Failed to connect with the SMTP server over TCP.");
+ client_close(client);
+ return false;
+ }
+ // Issue EHLO.
+ else if (client_write(client, PLACER("EHLO localhost\r\n", 16)) != 16) {
+
+ st_sprint(errmsg, "Failed to return successful status after TCP EHLO.");
+ client_close(client);
+ return false;
+ }
+ // Check for "250-STARTTLS" in the EHLO response over an insecure connection.
+ else {
+ while (client_read_line(client) > 0 && pl_char_get(client->line)[3] != ' ') {
+ if (st_cmp_cs_starts(&(client->line), PLACER("250-STARTTLS", 12))) found_starttls_ad = true;
+ }
+ if (!found_starttls_ad) {
+
+ st_sprint(errmsg, "Failed to find STARTTLS advertised in TCP EHLO response.");
+ client_close(client);
+ return false;
+ }
+ }
+
+ found_starttls_ad = false;
+ client_close(client);
+ client = NULL;
+
+ // Connect the client over TLS.
+ if (!(client = client_connect("localhost", tls_port)) || client_secure(client) != 0) {
+
+ st_sprint(errmsg, "Failed to connect with the SMTP server over TLS.");
+ client_close(client);
+ return false;
+ }
+ // Issue EHLO.
+ else if (client_write(client, PLACER("EHLO localhost\r\n", 16)) != 16) {
+
+ st_sprint(errmsg, "Failed to return successful status after TLS EHLO.");
+ client_close(client);
+ return false;
+ }
+ // Check for "250-STARTTLS" in the EHLO response over an insecure connection.
+ else {
+ while (client_read_line(client) > 0 && pl_char_get(client->line)[3] != ' ') {
+ if (st_cmp_cs_starts(&(client->line), PLACER("250-STARTTLS", 12))) found_starttls_ad = true;
+ }
+ if (found_starttls_ad) {
+ st_sprint(errmsg, "Found an unnecessary STARTTLS advertisement in TLS connection EHLO response.");
+ client_close(client);
+ return false;
+ }
+ }
+
+ client_close(client);
+ return true;
+}
diff --git a/sandbox/etc/.magma.sandbox.config.swp b/sandbox/etc/.magma.sandbox.config.swp
new file mode 100644
index 00000000..1610a19e
--- /dev/null
+++ b/sandbox/etc/.magma.sandbox.config.swp
Binary files differ