diff options
author | jpadkins <jacobpadkins@gmail.com> | 2017-04-18 00:17:46 +0300 |
---|---|---|
committer | jpadkins <jacobpadkins@gmail.com> | 2017-04-18 00:17:46 +0300 |
commit | 832a14a4b8448ac807147a8bede3c211c96f9c65 (patch) | |
tree | c5a6ec693f15ec98ab1bf91edffca3de14ea7ab5 | |
parent | 4afb6a2a1edca154812ccb9d26c3fa411515fb6c (diff) |
Adding misc network tests.
-rw-r--r-- | check/magma/regression/regression_check.h | 1 | ||||
-rw-r--r-- | check/magma/regression/regression_check_helpers.c | 4 | ||||
-rw-r--r-- | check/magma/servers/camel/camel_check_network.c | 4 | ||||
-rw-r--r-- | check/magma/servers/http/http_check.h | 2 | ||||
-rw-r--r-- | check/magma/servers/http/http_check_network.c | 12 | ||||
-rw-r--r-- | check/magma/servers/smtp/smtp_check.c | 42 | ||||
-rw-r--r-- | check/magma/servers/smtp/smtp_check.h | 2 | ||||
-rw-r--r-- | check/magma/servers/smtp/smtp_check_network.c | 83 | ||||
-rw-r--r-- | sandbox/etc/.magma.sandbox.config.swp | bin | 0 -> 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 Binary files differnew file mode 100644 index 00000000..1610a19e --- /dev/null +++ b/sandbox/etc/.magma.sandbox.config.swp |