Updating IPSec VPN client vpnc from 0.4.0 from 0.3.3 using the
attached diff appears to have solved the problems I did experience
with keep-alives and previously missing re-keying (VPN tunnels froze
within minutes resp. after 6-7 hours) when connecting to a Cisco 3005
from OpenBSD i386 4.1-current. I might still test from sparc64 and
eventually get rid of the four type mismatch warnings. It appears that
most patches from 0.3.3 made it into the upstream distribution, e.g.
0.4.0 builds without patches (but warnings).

Rolf
diff -urN --exclude=CVS vpnc/Makefile vpnc0.4.0/Makefile
--- vpnc/Makefile       Fri Aug  4 01:28:12 2006
+++ vpnc0.4.0/Makefile  Sun Apr 22 20:06:09 2007
@@ -2,8 +2,8 @@
 
 COMMENT=               "client for Cisco 3000 VPN concentrators"
 
-DISTNAME=              vpnc-0.3.3
-PKGNAME=               ${DISTNAME}p1
+DISTNAME=              vpnc-0.4.0
+PKGNAME=               ${DISTNAME}
 CATEGORIES=            security net
 
 HOMEPAGE=              http://www.unix-ag.uni-kl.de/~massar/vpnc/
diff -urN --exclude=CVS vpnc/patches/patch-Makefile 
vpnc0.4.0/patches/patch-Makefile
--- vpnc/patches/patch-Makefile Fri Nov 11 20:38:07 2005
+++ vpnc0.4.0/patches/patch-Makefile    Thu Jan  1 01:00:00 1970
@@ -1,16 +0,0 @@
-$OpenBSD: patch-Makefile,v 1.3 2005/11/11 19:38:07 sturm Exp $
---- Makefile.orig      Sun May  1 22:30:35 2005
-+++ Makefile   Fri Nov  4 00:03:54 2005
-@@ -22,9 +22,9 @@ ETCDIR=/etc/vpnc
- SBINDIR=$(PREFIX)/sbin
- MANDIR=$(PREFIX)/share/man
- 
--CC=gcc
--CFLAGS=-W -Wall -O -g '-DVERSION="$(shell cat VERSION)"' $(shell 
libgcrypt-config --cflags)
--LDFLAGS=-g $(shell libgcrypt-config --libs)
-+CC?=gcc
-+CFLAGS+=-W -Wall '-DVERSION="$(shell cat VERSION)"' $(shell libgcrypt-config 
--cflags)
-+LDFLAGS+=$(shell libgcrypt-config --libs)
- 
- ifeq ($(shell uname -s), Linux)
- SYSDEP=sysdep-linux.o
diff -urN --exclude=CVS vpnc/patches/patch-tunip_c 
vpnc0.4.0/patches/patch-tunip_c
--- vpnc/patches/patch-tunip_c  Fri Nov 11 20:38:07 2005
+++ vpnc0.4.0/patches/patch-tunip_c     Thu Jan  1 01:00:00 1970
@@ -1,21 +0,0 @@
-$OpenBSD: patch-tunip_c,v 1.3 2005/11/11 19:38:07 sturm Exp $
---- tunip.c.orig       Thu May  5 12:25:00 2005
-+++ tunip.c    Fri Nov  4 00:09:30 2005
-@@ -436,7 +436,7 @@ int update_sa_addr(struct sa_desc *p)
-       if (new_addr.sin_addr.s_addr != p->source.sin_addr.s_addr) {
-               char addr1[16];
-               p->source.sin_addr = new_addr.sin_addr;
--              strcpy(addr1, inet_ntoa(p->dest.sin_addr));
-+              strlcpy(addr1, inet_ntoa(p->dest.sin_addr), sizeof(addr1));
-               syslog(LOG_NOTICE,
-                       "local address for %s is %s", addr1, 
inet_ntoa(p->source.sin_addr));
-               return 1;
-@@ -844,7 +844,7 @@ static void vpnc_main_loop(struct peer_d
-                               || from.sin_addr.s_addr != 
peer->remote_sa->dest.sin_addr.s_addr) {
-                               /* remote end changed address */
-                               char addr1[16];
--                              strcpy(addr1, 
inet_ntoa(peer->remote_sa->dest.sin_addr));
-+                              strlcpy(addr1, 
inet_ntoa(peer->remote_sa->dest.sin_addr), sizeof(addr1));
-                               syslog(LOG_NOTICE,
-                                       "spi %u: remote address changed from %s 
to %s",
-                                       peer->remote_sa->spi, addr1, 
inet_ntoa(from.sin_addr));
diff -urN --exclude=CVS vpnc/patches/patch-vpnc-script 
vpnc0.4.0/patches/patch-vpnc-script
--- vpnc/patches/patch-vpnc-script      Fri Nov 11 20:38:07 2005
+++ vpnc0.4.0/patches/patch-vpnc-script Thu Jan  1 01:00:00 1970
@@ -1,64 +0,0 @@
-$OpenBSD: patch-vpnc-script,v 1.1 2005/11/11 19:38:07 sturm Exp $
---- vpnc-script.orig   Thu Nov  3 23:39:23 2005
-+++ vpnc-script        Thu Nov  3 23:51:02 2005
-@@ -70,7 +70,7 @@ do_ifconfig() {
-       ifconfig "$TUNDEV" inet "$INTERNAL_IP4_ADDRESS" $ifconfig_syntax_ptp 
"$INTERNAL_IP4_ADDRESS" netmask 255.255.255.255 mtu 1412 up
- }
- 
--if [ -n "$IPROUTE" ]; then
-+if [ -x "$IPROUTE" ]; then
-       fix_ip_get_output () {
-               sed 's/cache//;s/metric[0-9]\+ [0-9]\+//g'
-       }
-@@ -117,7 +117,11 @@ if [ -n "$IPROUTE" ]; then
-       }
- else
-       get_default_gw() {
--              netstat -r -n | grep '^0.0.0.0' | awk '{print $2}'
-+              if [ "$OS" = "OpenBSD" ]; then
-+                      netstat -r -n | grep '^default' | awk '{print $2}'
-+              else
-+                      netstat -r -n | grep '^0.0.0.0' | awk '{print $2}'
-+              fi
-       }
-       
-       set_vpngateway_route() {
-@@ -215,15 +219,21 @@ do_connect() {
-               echo "$CISCO_BANNER" | while read LINE ; do echo "|" "$LINE" ; 
done
-               echo
-       fi
--      
-+
-+      if [ ! -d /var/run/vpnc ]; then
-+              mkdir /var/run/vpnc || exit $?
-+      fi
-+
-       do_ifconfig
-       set_vpngateway_route
-       if [ -n "$CISCO_SPLIT_INC" ]; then
--              for ((i = 0 ; i < CISCO_SPLIT_INC ; i++ )) ; do
-+              i=0
-+              while [ $i -lt $CISCO_SPLIT_INC ]; do
-                       eval NETWORK="\${CISCO_SPLIT_INC_${i}_ADDR}"
-                       eval NETMASK="\${CISCO_SPLIT_INC_${i}_MASK}"
-                       eval NETMASKLEN="\${CISCO_SPLIT_INC_${i}_MASKLEN}"
-                       set_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN"
-+                      i=`expr $i + 1`
-               done
-               for i in $INTERNAL_IP4_DNS ; do
-                       set_network_route "$i" "255.255.255.255" "32"
-@@ -239,11 +249,13 @@ do_connect() {
- 
- do_disconnect() {
-       if [ -n "$CISCO_SPLIT_INC" ]; then
--              for ((i = 0 ; i < CISCO_SPLIT_INC ; i++ )) ; do
-+              i=0
-+              while [ $i -lt $CISCO_SPLIT_INC ]; do
-                       eval NETWORK="\${CISCO_SPLIT_INC_${i}_ADDR}"
-                       eval NETMASK="\${CISCO_SPLIT_INC_${i}_MASK}"
-                       eval NETMASKLEN="\${CISCO_SPLIT_INC_${i}_MASKLEN}"
-                       del_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN"
-+                      i=`expr $i + 1`
-               done
-               for i in $INTERNAL_IP4_DNS ; do
-                       del_network_route "$i" "255.255.255.255" "32"
diff -urN --exclude=CVS vpnc/patches/patch-vpnc_c vpnc0.4.0/patches/patch-vpnc_c
--- vpnc/patches/patch-vpnc_c   Fri Nov 11 20:38:07 2005
+++ vpnc0.4.0/patches/patch-vpnc_c      Thu Jan  1 01:00:00 1970
@@ -1,19 +0,0 @@
-$OpenBSD: patch-vpnc_c,v 1.2 2005/11/11 19:38:07 sturm Exp $
---- vpnc.c.orig        Fri Nov  4 00:09:49 2005
-+++ vpnc.c     Fri Nov  4 00:11:03 2005
-@@ -196,10 +196,11 @@ static void addenv(const void *name, con
- 
-       oldval = getenv(name);
-       if (oldval != NULL) {
--              strbuf = xallocc(strlen(oldval) + 1 + strlen(value) + 1);
--              strcat(strbuf, oldval);
--              strcat(strbuf, " ");
--              strcat(strbuf, value);
-+              size_t sz = strlen(oldval) + 1 + strlen(value) + 1;
-+              strbuf = xallocc(sz);
-+              strlcpy(strbuf, oldval, sz);
-+              strlcat(strbuf, " ", sz);
-+              strlcat(strbuf, value, sz);
-       }
- 
-       setenv(name, strbuf ? strbuf : value, 1);

Reply via email to