--- a/src/racoon/grabmyaddr.c 14 Mar 2011 17:18:12 -0000 1.28 +++ b/src/racoon/grabmyaddr.c 5 Feb 2013 11:32:59 -0000 @@ -274,13 +274,24 @@ struct sockaddr *addr; { struct myaddr *my; + int port = 0, wport; LIST_FOREACH(my, &opened, chain) { - if (cmpsaddr((struct sockaddr *) &my->addr, addr) <= CMPSADDR_WILDPORT_MATCH) + switch (cmpsaddr((struct sockaddr *) &my->addr, addr)) { + case CMPSADDR_MATCH: return extract_port((struct sockaddr *) &my->addr); + case CMPSADDR_WILDPORT_MATCH: + wport = extract_port((struct sockaddr *) &my->addr); + if (port == 0 || wport < port) + port = wport; + break; + } } + + if (port == 0) + port = PORT_ISAKMP; - return PORT_ISAKMP; + return port; } void