Module Name: src Committed By: tteras Date: Tue Feb 5 11:36:41 UTC 2013
Modified Files: src/crypto/dist/ipsec-tools/src/racoon [ipsec-tools-0_8-branch]: grabmyaddr.c Log Message: Fix source port selection To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.28.2.1 \ 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.28 src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c:1.28.2.1 --- src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c:1.28 Mon Mar 14 17:18:12 2011 +++ src/crypto/dist/ipsec-tools/src/racoon/grabmyaddr.c Tue Feb 5 11:36:41 2013 @@ -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.1 2013/02/05 11:36:41 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; + } } + + if (port == 0) + port = PORT_ISAKMP; - return PORT_ISAKMP; + return port; } void