From: Ralf Lici Date: Tue, 2 Sep 2025 16:35:09 +0000 (+0200) Subject: management: stop bytecount on client disconnection X-Git-Tag: v2.7_beta1~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fccdb21733d2826bcdc080fdfa93b0283b5231b8;p=thirdparty%2Fopenvpn.git management: stop bytecount on client disconnection When a management interface client requests periodic bytecount notifications, openvpn continues to emit them even after the client has disconnected. Additionally, upon reconnecting, the client starts receiving these notifications without having issued a new bytecount command. Stop the periodic bytecount operation when the management interface client disconnects, preventing unnecessary stats polling when using DCO and ensuring that clients only receive notifications they have explicitly requested. Change-Id: I1474d232278433d097baf85352dfc9a79853bad1 Signed-off-by: Ralf Lici Acked-by: Gert Doering Message-Id: <20250902163514.22339-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg32765.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c index 422aa0bc9..5b2a7deb8 100644 --- a/src/openvpn/manage.c +++ b/src/openvpn/manage.c @@ -500,6 +500,13 @@ man_status(struct management *man, const int version, struct status_output *so) } } +static void +man_bytecount_stop(struct management *man) +{ + man->connection.bytecount_update_seconds = 0; + event_timeout_clear(&man->connection.bytecount_update_interval); +} + static void man_bytecount(struct management *man, const int update_seconds) { @@ -511,8 +518,7 @@ man_bytecount(struct management *man, const int update_seconds) } else { - man->connection.bytecount_update_seconds = 0; - event_timeout_clear(&man->connection.bytecount_update_interval); + man_bytecount_stop(man); } /* The newly received bytecount interval may be sooner than the existing @@ -1992,6 +1998,7 @@ man_reset_client_socket(struct management *man, const bool exiting) { if (socket_defined(man->connection.sd_cli)) { + man_bytecount_stop(man); #ifdef _WIN32 man_stop_ne32(man); #endif