libreswan/libreswan-3.10-autoroute.patch
2014-09-09 12:58:42 -04:00

81 lines
2.7 KiB
Diff

commit dded96917330dc7726d2520ef74deff710ed7673
Author: Paul Wouters <pwouters@redhat.com>
Date: Mon Sep 8 20:38:32 2014 -0400
addconn: routing should happen after listen (bug introduced in 3.10)
This caused auto=route (auto=ondemand) connections to not load properly,
because pluto wasn't listening yet so these connections could not orient.
diff --git a/programs/addconn/addconn.c b/programs/addconn/addconn.c
index 5961a14..4c605a7 100644
--- a/programs/addconn/addconn.c
+++ b/programs/addconn/addconn.c
@@ -1,8 +1,9 @@
/*
* A program to read the configuration file and load a single conn
* Copyright (C) 2005 Michael Richardson <mcr@xelerance.com>
- * Copyright (C) 2012 Paul Wouters <paul@libreswan.org>
- * Copyright (C) 2012 Kim B. Heino <b@bbbs.net>
+ * Copyright (C) 2012-2014 Paul Wouters <paul@libreswan.org>
+ * Copyright (C) 2014 D. Hugh Redelmeier <hugh@mimosa.com>
+ * Copyright (C) 2012-2013 Kim B. Heino <b@bbbs.net>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -725,19 +726,37 @@ int main(int argc, char *argv[])
conn->desired_state == STARTUP_START) {
if (verbose)
printf(" %s", conn->name);
- resolve_defaultroute(conn);
starter_whack_add_conn(cfg, conn);
}
- if (conn->desired_state == STARTUP_ONDEMAND)
- starter_whack_route_conn(cfg, conn);
}
- /* We added all connections, let pluto listen, then startup our conns */
+ /*
+ * We loaded all connections. Now tell pluto to listen,
+ * then route the conns and resolve default route.
+ */
starter_whack_listen(cfg);
if (verbose)
- printf(" Pass #2: Initiating auto=start connections\n");
+ printf(" Pass #2: Routing auto=route and auto=start connections\n");
+ for (conn = cfg->conns.tqh_first;
+ conn != NULL;
+ conn = conn->link.tqe_next) {
+ if (conn->desired_state == STARTUP_ADD ||
+ conn->desired_state == STARTUP_ONDEMAND ||
+ conn->desired_state == STARTUP_START) {
+ if (verbose)
+ printf(" %s", conn->name);
+ resolve_defaultroute(conn);
+ if (conn->desired_state == STARTUP_ONDEMAND ||
+ conn->desired_state == STARTUP_START) {
+ starter_whack_route_conn(cfg, conn);
+ }
+ }
+ }
+
+ if (verbose)
+ printf(" Pass #3: Initiating auto=start connections\n");
for (conn = cfg->conns.tqh_first;
conn != NULL;
@@ -745,10 +764,10 @@ int main(int argc, char *argv[])
if (conn->desired_state == STARTUP_START) {
if (verbose)
printf(" %s", conn->name);
- resolve_defaultroute(conn);
starter_whack_initiate_conn(cfg, conn);
}
}
+
if (verbose)
printf("\n");
} else {