END_TEST START_TEST(test_tcpv4_inet) { int server_root_socket, server_client_socket, client_socket; char buffer[BUFFERSIZE]; char *msg; char ipbuffer[BUFFERSIZE]; ck_assert_int_ge((server_root_socket = OS_Bindporttcp(PORT, NULL, 0)), 0); ck_assert_int_ge((client_socket = OS_ConnectTCP(PORT, IPV4, 0, NULL)) , 0); ck_assert_int_ge((server_client_socket = OS_AcceptTCP(server_root_socket, ipbuffer, BUFFERSIZE)), 0); ck_assert_str_eq(ipbuffer, IPV4); ck_assert_int_eq(OS_SendTCP(client_socket, SENDSTRING), 0); ck_assert_int_eq(OS_RecvTCPBuffer(server_client_socket, buffer, BUFFERSIZE), 0); ck_assert_str_eq(buffer, SENDSTRING); ck_assert_int_eq(OS_SendTCPbySize(server_client_socket, 5, SENDSTRING), 0); ck_assert_ptr_ne((msg = OS_RecvTCP(client_socket, BUFFERSIZE)), NULL); ck_assert_str_eq(msg, "Hello"); /* only 5 bytes send */ free(msg); OS_CloseSocket(client_socket); OS_CloseSocket(server_client_socket); OS_CloseSocket(server_root_socket); }
/* Handle syslog TCP connections */ void HandleSyslogTCP() { int client_socket = 0; int st_errors = 0; int childcount = 0; char srcip[IPSIZE + 1]; /* Initialize some variables */ memset(srcip, '\0', IPSIZE + 1); /* Connecting to the message queue * Exit if it fails. */ if ((logr.m_queue = StartMQ(DEFAULTQUEUE, WRITE)) < 0) { ErrorExit(QUEUE_FATAL, ARGV0, DEFAULTQUEUE); } while (1) { /* Wait for the children */ while (childcount) { int wp; wp = waitpid((pid_t) - 1, NULL, WNOHANG); if (wp < 0) { merror(WAITPID_ERROR, ARGV0, errno, strerror(errno)); } /* if = 0, we still need to wait for the child process */ else if (wp == 0) { break; } else { childcount--; } } /* Accept new connections */ client_socket = OS_AcceptTCP(logr.sock, srcip, IPSIZE); if (client_socket < 0) { st_errors++; } /* Check if IP is allowed here */ if (OS_IPNotAllowed(srcip)) { merror(DENYIP_WARN, ARGV0, srcip); close(client_socket); } /* Fork to deal with new client */ if (fork() == 0) { HandleClient(client_socket, srcip); exit(0); } else { childcount++; /* Close client socket, since the child is handling it */ close(client_socket); continue; } } }
END_TEST START_TEST(test_tcpinvalidsockets) { char buffer[BUFFERSIZE]; ck_assert_int_eq(OS_SendTCP(-1, SENDSTRING), OS_SOCKTERR); ck_assert_int_eq(OS_SendTCPbySize(-1, strlen(SENDSTRING), SENDSTRING), OS_SOCKTERR); ck_assert_ptr_eq(OS_RecvTCP(-1, BUFFERSIZE), NULL); ck_assert_int_eq(OS_RecvTCPBuffer(-1, buffer, BUFFERSIZE), -1); ck_assert_int_eq(OS_AcceptTCP(-1, buffer, BUFFERSIZE), -1); }