From bead59946a8b54398f4ba3c9c8ecd15eeac78c53 Mon Sep 17 00:00:00 2001 From: Daniel P. Berrange Date: Mon, 21 Dec 2015 12:04:21 +0000 Subject: io: fix setting of QIO_CHANNEL_FEATURE_FD_PASS on server connections The QIO_CHANNEL_FEATURE_FD_PASS feature flag is set in the qio_channel_socket_set_fd() method, however, this only deals with client side connections. To ensure server side connections also have the feature flag set, we must set it in qio_channel_socket_accept() too. This also highlighted a typo fix where the code updated the sockaddr struct in the wrong object instance. Reviewed-by: Eric Blake Signed-off-by: Daniel P. Berrange --- tests/test-io-channel-socket.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/test-io-channel-socket.c b/tests/test-io-channel-socket.c index e76d54c3f8..b0eb5381b7 100644 --- a/tests/test-io-channel-socket.c +++ b/tests/test-io-channel-socket.c @@ -210,13 +210,19 @@ static void test_io_channel_setup_async(SocketAddress *listen_addr, static void test_io_channel(bool async, SocketAddress *listen_addr, - SocketAddress *connect_addr) + SocketAddress *connect_addr, + bool passFD) { QIOChannel *src, *dst; QIOChannelTest *test; if (async) { test_io_channel_setup_async(listen_addr, connect_addr, &src, &dst); + g_assert(!passFD || + qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS)); + g_assert(!passFD || + qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS)); + test = qio_channel_test_new(); qio_channel_test_run_threads(test, true, src, dst); qio_channel_test_validate(test); @@ -226,6 +232,11 @@ static void test_io_channel(bool async, test_io_channel_setup_async(listen_addr, connect_addr, &src, &dst); + g_assert(!passFD || + qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS)); + g_assert(!passFD || + qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS)); + test = qio_channel_test_new(); qio_channel_test_run_threads(test, false, src, dst); qio_channel_test_validate(test); @@ -235,6 +246,11 @@ static void test_io_channel(bool async, } else { test_io_channel_setup_sync(listen_addr, connect_addr, &src, &dst); + g_assert(!passFD || + qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS)); + g_assert(!passFD || + qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS)); + test = qio_channel_test_new(); qio_channel_test_run_threads(test, true, src, dst); qio_channel_test_validate(test); @@ -244,6 +260,11 @@ static void test_io_channel(bool async, test_io_channel_setup_sync(listen_addr, connect_addr, &src, &dst); + g_assert(!passFD || + qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS)); + g_assert(!passFD || + qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS)); + test = qio_channel_test_new(); qio_channel_test_run_threads(test, false, src, dst); qio_channel_test_validate(test); @@ -269,7 +290,7 @@ static void test_io_channel_ipv4(bool async) connect_addr->u.inet->host = g_strdup("127.0.0.1"); connect_addr->u.inet->port = NULL; /* Filled in later */ - test_io_channel(async, listen_addr, connect_addr); + test_io_channel(async, listen_addr, connect_addr, false); qapi_free_SocketAddress(listen_addr); qapi_free_SocketAddress(connect_addr); @@ -303,7 +324,7 @@ static void test_io_channel_ipv6(bool async) connect_addr->u.inet->host = g_strdup("::1"); connect_addr->u.inet->port = NULL; /* Filled in later */ - test_io_channel(async, listen_addr, connect_addr); + test_io_channel(async, listen_addr, connect_addr, false); qapi_free_SocketAddress(listen_addr); qapi_free_SocketAddress(connect_addr); @@ -337,7 +358,7 @@ static void test_io_channel_unix(bool async) connect_addr->u.q_unix = g_new0(UnixSocketAddress, 1); connect_addr->u.q_unix->path = g_strdup(TEST_SOCKET); - test_io_channel(async, listen_addr, connect_addr); + test_io_channel(async, listen_addr, connect_addr, true); qapi_free_SocketAddress(listen_addr); qapi_free_SocketAddress(connect_addr); -- cgit v1.2.3-55-g7522