Files
nginx-unit/src/test/nxt_tests.c
Tiago Natel 411daeaa53 Isolation: allowed the use of credentials with unpriv userns.
The setuid/setgid syscalls requires root capabilities but if the kernel
supports unprivileged user namespace then the child process has the full
set of capabilities in the new namespace, then we can allow setting "user"
and "group" in such cases (this is a common security use case).

Tests were added to ensure user gets meaningful error messages for
uid/gid mapping misconfigurations.
2019-12-06 16:52:50 +00:00

173 lines
3.2 KiB
C

/*
* Copyright (C) Igor Sysoev
* Copyright (C) NGINX, Inc.
*/
#include <nxt_main.h>
#include "nxt_tests.h"
extern char **environ;
nxt_module_init_t nxt_init_modules[1];
nxt_uint_t nxt_init_modules_n;
/* The function is defined here to prevent inline optimizations. */
static nxt_bool_t
nxt_msec_less(nxt_msec_t first, nxt_msec_t second)
{
return (nxt_msec_diff(first, second) < 0);
}
int nxt_cdecl
main(int argc, char **argv)
{
nxt_task_t task;
nxt_thread_t *thr;
if (nxt_lib_start("tests", argv, &environ) != NXT_OK) {
return 1;
}
nxt_main_log.level = NXT_LOG_INFO;
task.log = &nxt_main_log;
thr = nxt_thread();
thr->task = &task;
#if (NXT_TEST_RTDTSC)
if (nxt_process_argv[1] != NULL
&& nxt_memcmp(nxt_process_argv[1], "rbm", 3) == 0)
{
if (nxt_rbtree1_mb_start(thr) != NXT_OK) {
return 1;
}
if (nxt_rbtree_mb_start(thr) != NXT_OK) {
return 1;
}
if (nxt_lvlhsh_test(thr, 500 * 1000, 0) != NXT_OK) {
return 1;
}
nxt_rbtree1_mb_insert(thr);
nxt_rbtree_mb_insert(thr);
if (nxt_lvlhsh_test(thr, 500 * 1000, 0) != NXT_OK) {
return 1;
}
nxt_rbtree1_mb_delete(thr);
nxt_rbtree_mb_delete(thr);
return 0;
}
#endif
if (nxt_random_test(thr) != NXT_OK) {
return 1;
}
if (nxt_term_parse_test(thr) != NXT_OK) {
return 1;
}
if (nxt_msec_diff_test(thr, nxt_msec_less) != NXT_OK) {
return 1;
}
if (nxt_rbtree_test(thr, 100 * 1000) != NXT_OK) {
return 1;
}
if (nxt_rbtree_test(thr, 1000 * 1000) != NXT_OK) {
return 1;
}
if (nxt_rbtree1_test(thr, 100 * 1000) != NXT_OK) {
return 1;
}
if (nxt_rbtree1_test(thr, 1000 * 1000) != NXT_OK) {
return 1;
}
if (nxt_mp_test(thr, 100, 40000, 128 - 1) != NXT_OK) {
return 1;
}
if (nxt_mp_test(thr, 100, 1000, 4096 - 1) != NXT_OK) {
return 1;
}
if (nxt_mp_test(thr, 1000, 100, 64 * 1024 - 1) != NXT_OK) {
return 1;
}
if (nxt_mem_zone_test(thr, 100, 20000, 128 - 1) != NXT_OK) {
return 1;
}
if (nxt_mem_zone_test(thr, 100, 10000, 4096 - 1) != NXT_OK) {
return 1;
}
if (nxt_mem_zone_test(thr, 1000, 40, 64 * 1024 - 1) != NXT_OK) {
return 1;
}
if (nxt_lvlhsh_test(thr, 2, 1) != NXT_OK) {
return 1;
}
if (nxt_lvlhsh_test(thr, 100 * 1000, 1) != NXT_OK) {
return 1;
}
if (nxt_lvlhsh_test(thr, 100 * 1000, 0) != NXT_OK) {
return 1;
}
if (nxt_lvlhsh_test(thr, 1000 * 1000, 1) != NXT_OK) {
return 1;
}
if (nxt_gmtime_test(thr) != NXT_OK) {
return 1;
}
if (nxt_sprintf_test(thr) != NXT_OK) {
return 1;
}
if (nxt_malloc_test(thr) != NXT_OK) {
return 1;
}
if (nxt_utf8_test(thr) != NXT_OK) {
return 1;
}
if (nxt_http_parse_test(thr) != NXT_OK) {
return 1;
}
if (nxt_strverscmp_test(thr) != NXT_OK) {
return 1;
}
#if (NXT_HAVE_CLONE_NEWUSER)
if (nxt_clone_creds_test(thr) != NXT_OK) {
return 1;
}
#endif
return 0;
}