From 57b7d7482293a8060bb18a1c852d4a7207e50773 Mon Sep 17 00:00:00 2001 From: Jeremy Lakeman Date: Fri, 20 Dec 2013 11:13:00 +1030 Subject: [PATCH] Fix comparisons for removing mdp port bindings --- overlay_mdp.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/overlay_mdp.c b/overlay_mdp.c index 50354660..18e8c1dd 100644 --- a/overlay_mdp.c +++ b/overlay_mdp.c @@ -167,14 +167,6 @@ struct mdp_binding mdp_bindings[MDP_MAX_BINDINGS]; int mdp_bindings_initialised=0; mdp_port_t next_port_binding=256; -static int compare_client(struct socket_address *one, struct socket_address *two) -{ - if (one->addrlen==two->addrlen - && memcmp(&one->addr, &two->addr, two->addrlen)==0) - return 1; - return 0; -} - static int overlay_mdp_reply(int sock, struct socket_address *client, overlay_mdp_frame *mdpreply) { @@ -229,7 +221,7 @@ static int overlay_mdp_releasebindings(struct socket_address *client) /* Free up any MDP bindings held by this client. */ int i; for(i=0;isid):"All", @@ -1355,8 +1347,13 @@ static void mdp_process_packet(struct socket_address *client, struct mdp_header // double check that this binding belongs to this connection if (!binding || binding->internal - || !compare_client(&binding->client, client)) + || cmp_sockaddr(&binding->client, client)!=0){ mdp_reply_error(client, header); + WHYF("Already bound by someone else? %s vs %s", + alloca_socket_address(&binding->client), + alloca_socket_address(client)); + + } break; case MDP_IDENTITY: if (config.debug.mdprequests) @@ -1381,7 +1378,7 @@ static void mdp_process_packet(struct socket_address *client, struct mdp_header || binding->internal || !source || header->local.port == 0 - || !compare_client(&binding->client, client)){ + || cmp_sockaddr(&binding->client, client)!=0){ mdp_reply_error(client, header); WHY("No matching binding found"); return; @@ -1435,7 +1432,7 @@ static void mdp_process_packet(struct socket_address *client, struct mdp_header if (binding && !binding->internal && header->flags & MDP_FLAG_CLOSE - && compare_client(&binding->client, client)){ + && cmp_sockaddr(&binding->client, client)==0){ if (config.debug.mdprequests) DEBUGF("Unbind MDP %s:%d from %s", binding->subscriber?alloca_tohex_sid_t(binding->subscriber->sid):"All",