MXS-662: Service protocol check no longer ignores bind

The address of a listener was ignored when service protocols were compared.
This commit is contained in:
Markus Makela
2016-04-14 19:04:54 +03:00
parent 25f4238231
commit 1fc27b39af
4 changed files with 10 additions and 7 deletions

View File

@ -2759,7 +2759,7 @@ int create_new_listener(CONFIG_CONTEXT *obj, bool startnow)
SSL_LISTENER *ssl_info = make_ssl_structure(obj, true, &error_count);
if (socket)
{
if (serviceHasProtocol(service, protocol, 0))
if (serviceHasProtocol(service, protocol, address, 0))
{
MXS_ERROR("Listener '%s', for service '%s', socket %s, already have socket.",
obj->object,
@ -2779,7 +2779,7 @@ int create_new_listener(CONFIG_CONTEXT *obj, bool startnow)
if (port)
{
if (serviceHasProtocol(service, protocol, atoi(port)))
if (serviceHasProtocol(service, protocol, address, atoi(port)))
{
MXS_ERROR("Listener '%s', for service '%s', already have port %s.",
obj->object,

View File

@ -708,8 +708,8 @@ serviceAddProtocol(SERVICE *service, char *protocol, char *address, unsigned sho
* @param port The port to listen on
* @return TRUE if the protocol/port is already part of the service
*/
int
serviceHasProtocol(SERVICE *service, char *protocol, unsigned short port)
int serviceHasProtocol(SERVICE *service, const char *protocol,
const char* address, unsigned short port)
{
SERV_LISTENER *proto;
@ -717,7 +717,9 @@ serviceHasProtocol(SERVICE *service, char *protocol, unsigned short port)
proto = service->ports;
while (proto)
{
if (strcmp(proto->protocol, protocol) == 0 && proto->port == port)
if (strcmp(proto->protocol, protocol) == 0 && proto->port == port &&
((address && proto->address && strcmp(proto->address, address) == 0) ||
(address == NULL && proto->address == NULL)))
{
break;
}

View File

@ -71,7 +71,7 @@ init_test_env(NULL);
ss_info_dassert(0 == strcmp("MyService", service_get_name(service)), "Service must have given name");
ss_dfprintf(stderr, "\t..done\nAdding protocol testprotocol.");
ss_info_dassert(0 != serviceAddProtocol(service, "testprotocol", "localhost", 9876, "MySQL", NULL), "Add Protocol should succeed");
ss_info_dassert(0 != serviceHasProtocol(service, "testprotocol", 9876), "Service should have new protocol as requested");
ss_info_dassert(0 != serviceHasProtocol(service, "testprotocol", "localhost", 9876), "Service should have new protocol as requested");
serviceStartProtocol(service, "testprotocol", 9876);
mxs_log_flush_sync();
ss_dfprintf(stderr, "\t..done\nStarting Service.");