void t01_listen_port() { INIT_LOCAL(); if (!geteuid()) { // current user is root // set user to nobody struct passwd * pwd = calloc(1, sizeof(struct passwd)); FAIL_IF_NOT(pwd); size_t buffer_length = sysconf(_SC_GETPW_R_SIZE_MAX); FAIL_IF_NOT(buffer_length > 0); char * buffer = malloc(buffer_length * sizeof(char)); FAIL_IF_NOT(buffer); int lookup_result = getpwnam_r("nobody", pwd, buffer, buffer_length, &pwd); FAIL_IF(lookup_result); FAIL_IF_NOT(pwd); int setuid_result = setuid(pwd->pw_uid); FAIL_IF(setuid_result); free(pwd); free(buffer); } // current user is not root // it has no permissions to bind to port 88 t01_server=onion_new(O_THREADED); onion_set_max_threads(t01_server, 2); t01_errors_count=0; t01_failed=false; onion_log=t01_listen_port_error_handler; onion_set_port(t01_server, "88"); onion_listen(t01_server); onion_free(t01_server); FAIL_IF(t01_failed); END_LOCAL(); }
/** * @short Sets the maximum number of threads. */ void setMaxThreads(int maxThreads) { onion_set_max_threads(ptr, maxThreads); }