[1/3] openvpn-authenticator: Avoid infinite loop when losing socket connection
Commit Message
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(-)
Comments
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(" ", "\ ")
@@ -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(" ", "\ ")