This patch will gracefully terminate the daemon when it loses its connection to the OpenVPN daemon.
Fixes: #12963 Signed-off-by: Michael Tremer michael.tremer@ipfire.org --- config/ovpn/openvpn-authenticator | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/config/ovpn/openvpn-authenticator b/config/ovpn/openvpn-authenticator index 65844012b..5d9348d7e 100644 --- a/config/ovpn/openvpn-authenticator +++ b/config/ovpn/openvpn-authenticator @@ -116,11 +116,16 @@ class OpenVPNAuthenticator(object):
log.info("OpenVPN Authenticator started")
- while True: - line = self._read_line() + try: + while True: + line = self._read_line()
- if line.startswith(">CLIENT"): - self._client_event(line) + if line.startswith(">CLIENT"): + self._client_event(line) + + # Terminate the daemon when it loses its connection to the OpenVPN daemon + except ConnectionResetError as e: + log.error("Connection to OpenVPN has been lost: %s" % e)
log.info("OpenVPN Authenticator terminated")
@@ -269,7 +274,7 @@ class OpenVPNAuthenticator(object): @staticmethod def _b64decode(s): return base64.b64decode(s.encode()).decode() - + @staticmethod def _escape(s): return s.replace(" ", "\ ")
Signed-off-by: Michael Tremer michael.tremer@ipfire.org --- config/ovpn/openvpn-authenticator | 12 ------------ 1 file changed, 12 deletions(-)
diff --git a/config/ovpn/openvpn-authenticator b/config/ovpn/openvpn-authenticator index 5d9348d7e..c22e08f0a 100644 --- a/config/ovpn/openvpn-authenticator +++ b/config/ovpn/openvpn-authenticator @@ -97,18 +97,6 @@ class OpenVPNAuthenticator(object): # Send the command self._write_line(command)
- return # XXX Code below doesn't work - - # Read response - response = self._read_line() - - # Handle response - if not response.startswith("SUCCESS:"): - log.error("Command '%s' returned an error:" % command) - log.error(" %s" % response) - - return response - def run(self): # Connect to socket self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
Tested-by: Adolf Belka adolf.belka@ipfire.org
On 06/12/2022 11:01, Michael Tremer wrote:
Signed-off-by: Michael Tremer michael.tremer@ipfire.org
config/ovpn/openvpn-authenticator | 12 ------------ 1 file changed, 12 deletions(-)
diff --git a/config/ovpn/openvpn-authenticator b/config/ovpn/openvpn-authenticator index 5d9348d7e..c22e08f0a 100644 --- a/config/ovpn/openvpn-authenticator +++ b/config/ovpn/openvpn-authenticator @@ -97,18 +97,6 @@ class OpenVPNAuthenticator(object): # Send the command self._write_line(command)
return # XXX Code below doesn't work
# Read response
response = self._read_line()
# Handle response
if not response.startswith("SUCCESS:"):
log.error("Command '%s' returned an error:" % command)
log.error(" %s" % response)
return response
- def run(self): # Connect to socket self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
Fixes: #12963 Signed-off-by: Michael Tremer michael.tremer@ipfire.org --- config/ovpn/openvpn-authenticator | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/config/ovpn/openvpn-authenticator b/config/ovpn/openvpn-authenticator index c22e08f0a..4341993e6 100644 --- a/config/ovpn/openvpn-authenticator +++ b/config/ovpn/openvpn-authenticator @@ -68,6 +68,12 @@ class OpenVPNAuthenticator(object):
while True: char = self.sock.recv(1) + + # Break if we could not read from the socket + if not char: + raise EOFError("Could not read from socket") + + # Append to buffer buf.append(char)
# Reached end of line @@ -112,7 +118,7 @@ class OpenVPNAuthenticator(object): self._client_event(line)
# Terminate the daemon when it loses its connection to the OpenVPN daemon - except ConnectionResetError as e: + except (ConnectionResetError, EOFError) as e: log.error("Connection to OpenVPN has been lost: %s" % e)
log.info("OpenVPN Authenticator terminated")
Tested-by: Adolf Belka adolf.belka@ipfire.org
On 06/12/2022 11:01, Michael Tremer wrote:
Fixes: #12963 Signed-off-by: Michael Tremer michael.tremer@ipfire.org
config/ovpn/openvpn-authenticator | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/config/ovpn/openvpn-authenticator b/config/ovpn/openvpn-authenticator index c22e08f0a..4341993e6 100644 --- a/config/ovpn/openvpn-authenticator +++ b/config/ovpn/openvpn-authenticator @@ -68,6 +68,12 @@ class OpenVPNAuthenticator(object):
while True: char = self.sock.recv(1)
# Break if we could not read from the socket
if not char:
raise EOFError("Could not read from socket")
# Append to buffer buf.append(char) # Reached end of line
@@ -112,7 +118,7 @@ class OpenVPNAuthenticator(object): self._client_event(line)
# Terminate the daemon when it loses its connection to the OpenVPN daemon
except ConnectionResetError as e:
except (ConnectionResetError, EOFError) as e: log.error("Connection to OpenVPN has been lost: %s" % e)
log.info("OpenVPN Authenticator terminated")
Tested-by: Adolf Belka adolf.belka@ipfire.org
On 06/12/2022 11:01, Michael Tremer wrote:
This patch will gracefully terminate the daemon when it loses its connection to the OpenVPN daemon.
Fixes: #12963 Signed-off-by: Michael Tremer michael.tremer@ipfire.org
config/ovpn/openvpn-authenticator | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/config/ovpn/openvpn-authenticator b/config/ovpn/openvpn-authenticator index 65844012b..5d9348d7e 100644 --- a/config/ovpn/openvpn-authenticator +++ b/config/ovpn/openvpn-authenticator @@ -116,11 +116,16 @@ class OpenVPNAuthenticator(object):
log.info("OpenVPN Authenticator started")
while True:
line = self._read_line()
try:
while True:
line = self._read_line()
if line.startswith(">CLIENT"):
self._client_event(line)
if line.startswith(">CLIENT"):
self._client_event(line)
# Terminate the daemon when it loses its connection to the OpenVPN daemon
except ConnectionResetError as e:
log.error("Connection to OpenVPN has been lost: %s" % e)
log.info("OpenVPN Authenticator terminated")
@@ -269,7 +274,7 @@ class OpenVPNAuthenticator(object): @staticmethod def _b64decode(s): return base64.b64decode(s.encode()).decode()
- @staticmethod def _escape(s): return s.replace(" ", "\ ")