Module Name: src Committed By: tteras Date: Tue Feb 5 11:36:18 UTC 2013
Modified Files: src/crypto/dist/ipsec-tools/src/racoon: grabmyaddr.c Log Message: Fix source port selection To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 \ src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c diff -u src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c:1.29 src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c:1.30 --- src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c:1.29 Sun Jan 1 15:54:51 2012 +++ src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c Tue Feb 5 11:36:17 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: grabmyaddr.c,v 1.29 2012/01/01 15:54:51 tteras Exp $ */ +/* $NetBSD: grabmyaddr.c,v 1.30 2013/02/05 11:36:17 tteras Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * Copyright (C) 2008 Timo Teras <timo.te...@iki.fi>. @@ -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; + } } - return -1; + if (port == 0) + port = PORT_ISAKMP; + + return port; } void