SHA256
1
0
forked from pool/vpnc
vpnc/vpnc-restart-after-timeout.diff
Stefan Seyfried c55752ef37 Accepting request 98755 from home:seife:testing
- Add "vpnc: " prefix to stderr logmessages

- change License field to GPL-2.0+ (bnc#731966)

- update to rev 481 of nortel branch
  - better version of vpnc-ipid.diff upstream
  - various code cleanups
  - log to stdout instead of syslog in debug mode

- fix pidfile writing (/var/run/vpnc does not necessarily exist)

OBS-URL: https://build.opensuse.org/request/show/98755
OBS-URL: https://build.opensuse.org/package/show/network/vpnc?expand=0&rev=63
2012-01-04 14:20:36 +00:00

79 lines
2.2 KiB
Diff

Index: b/tunip.c
===================================================================
--- a/tunip.c
+++ b/tunip.c
@@ -882,10 +882,13 @@ static void vpnc_main_loop(struct sa_blo
time(NULL) - s->ipsec.life.start,
s->ipsec.life.seconds,
s->ipsec.life.rx/1024,
s->ipsec.life.tx/1024,
s->ipsec.life.kbytes));
+ if (s->ipsec.life.seconds &&
+ (time(NULL) - s->ipsec.life.start + 1 >= s->ipsec.life.seconds))
+ do_kill = -3;
} while ((presult == 0 || (presult == -1 && errno == EINTR)) && !do_kill);
if (presult == -1) {
logmsg(LOG_ERR, "select: %m");
continue;
}
@@ -943,10 +946,13 @@ static void vpnc_main_loop(struct sa_blo
}
}
switch (do_kill) {
+ case -3:
+ logmsg(LOG_NOTICE, "connection terminated by timeout -> restart");
+ break;
case -2:
logmsg(LOG_NOTICE, "connection terminated by dead peer detection");
break;
case -1:
logmsg(LOG_NOTICE, "connection terminated by peer");
Index: b/vpnc.c
===================================================================
--- a/vpnc.c
+++ b/vpnc.c
@@ -3777,24 +3777,25 @@ int main(int argc, char **argv)
#endif
gcry_check_version("1.1.90");
gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0);
group_init();
- memset(s, 0, sizeof(*s));
- s->ipsec.encap_mode = IPSEC_ENCAP_TUNNEL;
- s->ike.timeout = 1000; /* 1 second */
-
do_config(argc, argv);
if (opt_vendor == VENDOR_NORTEL)
group_id = tolowercase(config[CONFIG_IPSEC_ID]);
else
group_id = config[CONFIG_IPSEC_ID];
DEBUG(1, printf("\nvpnc version " VERSION "\n"));
hex_dump("hex_test", hex_test, sizeof(hex_test), NULL);
+ do {
+ memset(s, 0, sizeof(*s));
+ s->ipsec.encap_mode = IPSEC_ENCAP_TUNNEL;
+ s->ike.timeout = 1000; /* 1 second */
+
DEBUGTOP(2, printf("S1 init_sockaddr\n"));
init_sockaddr(&s->dst, config[CONFIG_IPSEC_GATEWAY]);
init_sockaddr(&s->opt_src_ip, config[CONFIG_LOCAL_ADDR]);
DEBUGTOP(2, printf("S2 make_socket\n"));
s->ike.src_port = atoi(config[CONFIG_LOCAL_PORT]);
@@ -3845,10 +3846,11 @@ int main(int argc, char **argv)
close_tunnel(s);
/* Free resources */
DEBUGTOP(2, printf("S9 cleanup\n"));
cleanup(s);
+ } while (do_kill == -3);
if (opt_vendor == VENDOR_NORTEL)
free((void *)group_id);
return 0;
}