Example #1
0
int test_starting_service(discovery_service *svc) {
    svc->receive_callback = starting_service_spy;
    int retval = discovery_service_start(svc, ASK_ONCE_STRATEGY);
    JNXCHECK(retval == 0);
    JNXCHECK(svc->sock_send->socket > 0
             && svc->sock_send->addrfamily == AF_INET
             && svc->sock_send->stype == SOCK_DGRAM);
    JNXCHECK(svc->udp_listener->socket > 0
             && svc->udp_listener->socket->addrfamily == AF_INET
             && svc->udp_listener->socket->stype == SOCK_DGRAM);

    if (svc->isrunning) {
        // check send socket is up and sending
        int error = 0;
        socklen_t len = sizeof(error);
        retval = getsockopt(svc->sock_send->socket, SOL_SOCKET, SO_ERROR, &error, &len);
        JNXCHECK(retval == 0);
    }

    wait_for_flag(&list_message_received);
    return CLEANUP;
}
Example #2
0
void do_child()
{
	wait_for_flag(2);
	exit(0);
}
Example #3
0
/*
 * do_master_child()
 */
void do_master_child(char **av)
{
	pid_t pid1;
	int status;

	char user1name[] = "nobody";
	char user2name[] = "bin";

	struct passwd *ltpuser1, *ltpuser2;

	TEST_EXP_ENOS(exp_enos);

	tst_count = 0;

	*flag = 0;

	pid1 = FORK_OR_VFORK();

	if (pid1 == -1)
		tst_brkm(TBROK | TERRNO, cleanup, "Fork failed");

	if (pid1 == 0) {
		ltpuser1 = SAFE_GETPWNAM(NULL, user1name);
		if (setreuid(ltpuser1->pw_uid, ltpuser1->pw_uid) == -1) {
			perror("setreuid failed (in child)");
			exit(1);
		}
		*flag = 1;
#ifdef UCLINUX
		if (self_exec(av[0], "") < 0) {
			perror("self_exec failed");
			exit(1);
		}
#else
		do_child();
#endif
	}
	ltpuser2 = SAFE_GETPWNAM(NULL, user2name);
	if (setreuid(ltpuser2->pw_uid, ltpuser2->pw_uid) == -1) {
		perror("seteuid failed");
		exit(1);
	}

	/* wait until child sets its euid */
	wait_for_flag(1);

	TEST(kill(pid1, TEST_SIG));

	/* signal the child that we're done */
	*flag = 2;

	if (waitpid(pid1, &status, 0) == -1) {
		perror("waitpid failed");
		exit(1);
	}

	if (TEST_RETURN != -1) {
		printf("kill succeeded unexpectedly\n");
		exit(1);
	}

	/*
	 * Check to see if the errno was set to the expected
	 * value of 1 : EPERM
	 */
	if (TEST_ERRNO == EPERM) {
		printf("kill failed with EPERM\n");
		exit(0);
	}
	perror("kill failed unexpectedly");
	exit(1);
}