Fixed port number extraction.
authorZdeněk Salvet <salvet@ics.muni.cz>
Fri, 19 Mar 2010 14:44:15 +0000 (14:44 +0000)
committerZdeněk Salvet <salvet@ics.muni.cz>
Fri, 19 Mar 2010 14:44:15 +0000 (14:44 +0000)
org.glite.lb.client/src/notification.c
org.glite.lb.server/src/notification.c

index fcecd6b..d4d69f4 100644 (file)
@@ -83,7 +83,7 @@ static void get_name_and_port(const char *address, char **name, int *port)
        char *n = NULL, *p;
        
        n = strdup(address);
-       p = strchr(n, ':');
+       p = strrchr(n, ':');
        if (p)
        {
                *port = atoi(p+1);
index 207062f..f35d690 100644 (file)
@@ -119,12 +119,13 @@ int edg_wll_NotifNewServer(
        {
                char   *aux;
 
-               if ( !(aux = strchr(address_override, ':')) )
+               if ( !(aux = strrchr(address_override, ':')) )
                {
                        edg_wll_SetError(ctx, EINVAL, "Addres overrirde not in format host:port");
                        goto cleanup;
                }
-               if ( !strncmp(address_override, "0.0.0.0", aux-address_override) )
+               if ( !strncmp(address_override, "0.0.0.0", aux-address_override) || 
+                    !strncmp(address_override, "::", aux-address_override) )
                        trio_asprintf(&addr_s, "%s:%s", ctx->connections->serverConnection->peerName, aux+1);
        }
 
@@ -241,12 +242,13 @@ int edg_wll_NotifBindServer(
                {
                        char   *aux;
 
-                       if ( !(aux = strchr(address_override, ':')) )
+                       if ( !(aux = strrchr(address_override, ':')) )
                        {
                                edg_wll_SetError(ctx, EINVAL, "Addres overrirde not in format host:port");
                                goto rollback;
                        }
-                       if ( !strncmp(address_override, "0.0.0.0", aux-address_override) )
+                       if ( !strncmp(address_override, "0.0.0.0", aux-address_override) ||
+                            !strncmp(address_override, "::", aux-address_override) )
                                trio_asprintf(&addr_s, "%s:%s", ctx->connections->serverConnection->peerName, aux+1);
                }