--- embedaddon/ipsec-tools/src/racoon/grabmyaddr.c 2013/07/22 12:28:07 1.1.1.1.2.1 +++ embedaddon/ipsec-tools/src/racoon/grabmyaddr.c 2016/11/02 10:45:58 1.1.1.2 @@ -1,4 +1,4 @@ -/* $NetBSD: grabmyaddr.c,v 1.28 2011/03/14 17:18:12 tteras Exp $ */ +/* $NetBSD: grabmyaddr.c,v 1.28.2.2 2013/04/12 09:53:52 tteras Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * Copyright (C) 2008 Timo Teras . @@ -274,13 +274,24 @@ myaddr_getsport(addr) 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 @@ -741,18 +752,19 @@ kernel_handle_message(msg) switch (rtm->rtm_type) { case RTM_NEWADDR: - parse_addresses((caddr_t) ifa + 1, msg + ifa->ifam_msglen, + parse_addresses(ifa + 1, msg + ifa->ifam_msglen, ifa->ifam_addrs, &addr); myaddr_open_all_configured((struct sockaddr *) &addr); break; case RTM_DELADDR: - parse_addresses((caddr_t) ifa + 1, msg + ifa->ifam_msglen, + parse_addresses(ifa + 1, msg + ifa->ifam_msglen, ifa->ifam_addrs, &addr); myaddr_close_all_open((struct sockaddr *) &addr); break; case RTM_ADD: case RTM_DELETE: case RTM_CHANGE: + case RTM_GET: case RTM_MISS: case RTM_IFINFO: #ifdef RTM_OIFINFO @@ -768,7 +780,7 @@ kernel_handle_message(msg) break; default: plog(LLV_WARNING, LOCATION, NULL, - "unrecognized route message with rtm_type: %d", + "unrecognized route message with rtm_type: %d\n", rtm->rtm_type); break; }