This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "IPFire 2.x development tree".
The branch, next has been updated via e11f536252fe1f4317c47c121f5026b9a458a311 (commit) via e1a51ebb851be156104d3971b85f2572fc7eeb73 (commit) from b8e2d10888412cbe37b0614e88fc739732305c79 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit e11f536252fe1f4317c47c121f5026b9a458a311 Author: Michael Tremer michael.tremer@ipfire.org Date: Sun Jan 12 15:40:50 2014 +0100
OpenVPN: Fix daemon stuck in WAIT state.
When the client is in the WAIT state, it is usally connected to the server.
commit e1a51ebb851be156104d3971b85f2572fc7eeb73 Author: Stefan Schantl stefan.schantl@ipfire.org Date: Sun Jan 12 15:34:27 2014 +0100
openvpnctrl: Pass external IP address to N2N daemons.
Fixes #10313.
-----------------------------------------------------------------------
Summary of changes: html/cgi-bin/index.cgi | 2 +- html/cgi-bin/ovpnmain.cgi | 2 +- src/misc-progs/openvpnctrl.c | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-)
Difference in files: diff --git a/html/cgi-bin/index.cgi b/html/cgi-bin/index.cgi index b3a2629..d6115bd 100644 --- a/html/cgi-bin/index.cgi +++ b/html/cgi-bin/index.cgi @@ -404,7 +404,7 @@ END
my $display; my $display_colour = $Header::colourred; - if ( $tustate[1] eq 'CONNECTED') { + if (($tustate[1] eq 'CONNECTED') || ($tustate[1] eq 'WAIT')) { $display_colour = $Header::colourgreen; $display = $Lang::tr{'capsopen'}; } else { diff --git a/html/cgi-bin/ovpnmain.cgi b/html/cgi-bin/ovpnmain.cgi index 75b6c75..b075cc5 100644 --- a/html/cgi-bin/ovpnmain.cgi +++ b/html/cgi-bin/ovpnmain.cgi @@ -4941,7 +4941,7 @@ END #EXITING -- A graceful exit is in progress. ####
- if ( $tustate[1] eq 'CONNECTED') { + if (($tustate[1] eq 'CONNECTED') || ($tustate[1] eq 'WAIT')) { $col1="bgcolor='${Header::colourgreen}'"; $active = "<b><font color='#FFFFFF'>$Lang::tr{'capsopen'}</font></b>"; }else { diff --git a/src/misc-progs/openvpnctrl.c b/src/misc-progs/openvpnctrl.c index 2af5372..272db0f 100644 --- a/src/misc-progs/openvpnctrl.c +++ b/src/misc-progs/openvpnctrl.c @@ -168,6 +168,29 @@ int readPidFile(const char *pidfile) { return pid; }
+int readExternalAddress(char* address) { + FILE *fp = fopen("/var/ipfire/red/local-ipaddress", "r"); + if (!fp) + goto ERROR; + + int r = fscanf(fp, "%s", address); + fclose(fp); + + if (r < 0) + goto ERROR; + + /* In case the read IP address is not valid, we empty + * the content of address and return non-zero. */ + if (!VALID_IP(address)) + goto ERROR; + + return 0; + +ERROR: + address = NULL; + return 1; +} + void ovpnInit(void) { // Read OpenVPN configuration kv = initkeyvalues(); @@ -482,10 +505,18 @@ int startNet2Net(char *name) { // Make sure all firewall rules are up to date. setFirewallRules();
+ // Get the external IP address. + char address[STRING_SIZE] = ""; + int r = readExternalAddress(address); + if (r) { + fprintf(stderr, "Could not read the external address\n"); + exit(1); + } + char command[STRING_SIZE]; snprintf(command, STRING_SIZE-1, "/sbin/modprobe tun"); executeCommand(command); - snprintf(command, STRING_SIZE-1, "/usr/sbin/openvpn --config %s", configfile); + snprintf(command, STRING_SIZE-1, "/usr/sbin/openvpn --local %s --config %s", address, configfile); executeCommand(command);
return 0;
hooks/post-receive -- IPFire 2.x development tree