Merge
This commit is contained in:
@@ -80,13 +80,16 @@ START_TEST( test_signals_acl_updated )
|
|||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
|
||||||
int connect_client( char *addr, int actual_port )
|
int connect_client( char *addr, int actual_port, char *source_addr )
|
||||||
{
|
{
|
||||||
int client_fd;
|
int client_fd;
|
||||||
|
|
||||||
struct addrinfo hint;
|
struct addrinfo hint;
|
||||||
struct addrinfo *ailist, *aip;
|
struct addrinfo *ailist, *aip;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
memset( &hint, '\0', sizeof( struct addrinfo ) );
|
memset( &hint, '\0', sizeof( struct addrinfo ) );
|
||||||
hint.ai_socktype = SOCK_STREAM;
|
hint.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
@@ -96,6 +99,16 @@ int connect_client( char *addr, int actual_port )
|
|||||||
for( aip = ailist; aip; aip = aip->ai_next ) {
|
for( aip = ailist; aip; aip = aip->ai_next ) {
|
||||||
((struct sockaddr_in *)aip->ai_addr)->sin_port = htons( actual_port );
|
((struct sockaddr_in *)aip->ai_addr)->sin_port = htons( actual_port );
|
||||||
client_fd = socket( aip->ai_family, aip->ai_socktype, aip->ai_protocol );
|
client_fd = socket( aip->ai_family, aip->ai_socktype, aip->ai_protocol );
|
||||||
|
|
||||||
|
if (source_addr) {
|
||||||
|
struct sockaddr src;
|
||||||
|
if( !parse_ip_to_sockaddr(&src, source_addr)) {
|
||||||
|
close(client_fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
bind(client_fd, &src, sizeof(struct sockaddr_in6));
|
||||||
|
}
|
||||||
|
|
||||||
if( client_fd == -1) { continue; }
|
if( client_fd == -1) { continue; }
|
||||||
if( connect( client_fd, aip->ai_addr, aip->ai_addrlen) == 0 ) {
|
if( connect( client_fd, aip->ai_addr, aip->ai_addrlen) == 0 ) {
|
||||||
connected = 1;
|
connected = 1;
|
||||||
@@ -135,7 +148,7 @@ START_TEST( test_acl_update_closes_bad_client )
|
|||||||
serve_open_server_socket( s );
|
serve_open_server_socket( s );
|
||||||
actual_port = server_port( s );
|
actual_port = server_port( s );
|
||||||
|
|
||||||
client_fd = connect_client( "127.0.0.7", actual_port );
|
client_fd = connect_client( "127.0.0.7", actual_port, "127.0.0.1" );
|
||||||
server_accept( s );
|
server_accept( s );
|
||||||
entry = &s->nbd_client[0];
|
entry = &s->nbd_client[0];
|
||||||
c = entry->client;
|
c = entry->client;
|
||||||
@@ -166,9 +179,8 @@ START_TEST( test_acl_update_leaves_good_client )
|
|||||||
{
|
{
|
||||||
struct server * s = server_create( "127.0.0.7", "0", dummy_file, NULL, 0, 0, NULL );
|
struct server * s = server_create( "127.0.0.7", "0", dummy_file, NULL, 0, 0, NULL );
|
||||||
|
|
||||||
// Client source address may be IPv4 or IPv6 localhost. Should be explicit
|
char *lines[] = {"127.0.0.1"};
|
||||||
char *lines[] = {"127.0.0.1", "::1"};
|
struct acl * new_acl = acl_create( 1, lines, 1 );
|
||||||
struct acl * new_acl = acl_create( 2, lines, 1 );
|
|
||||||
struct client * c;
|
struct client * c;
|
||||||
struct client_tbl_entry * entry;
|
struct client_tbl_entry * entry;
|
||||||
|
|
||||||
@@ -176,12 +188,10 @@ START_TEST( test_acl_update_leaves_good_client )
|
|||||||
int client_fd;
|
int client_fd;
|
||||||
int server_fd;
|
int server_fd;
|
||||||
|
|
||||||
myfail_if(new_acl->len != 2, "sanity: new_acl length is not 2");
|
|
||||||
|
|
||||||
serve_open_server_socket( s );
|
serve_open_server_socket( s );
|
||||||
actual_port = server_port( s );
|
actual_port = server_port( s );
|
||||||
|
|
||||||
client_fd = connect_client( "127.0.0.7", actual_port );
|
client_fd = connect_client( "127.0.0.7", actual_port, "127.0.0.1" );
|
||||||
server_accept( s );
|
server_accept( s );
|
||||||
entry = &s->nbd_client[0];
|
entry = &s->nbd_client[0];
|
||||||
c = entry->client;
|
c = entry->client;
|
||||||
|
Reference in New Issue
Block a user