From patchwork Sun Jan 1 21:51:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selva Nair X-Patchwork-Id: 2967 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7300:c95:b0:82:e4b3:40a0 with SMTP id p21csp6018291dyk; Sun, 1 Jan 2023 13:52:53 -0800 (PST) X-Google-Smtp-Source: AMrXdXuhfWFATasPMOqzDx7oXFkYjX3fR9yfOL6I3abJoq+ogK6K7v1NmfduQoX0HRdG888ZT8qH X-Received: by 2002:a05:6a20:c491:b0:a2:df6d:e56b with SMTP id eo17-20020a056a20c49100b000a2df6de56bmr39803901pzb.14.1672609973577; Sun, 01 Jan 2023 13:52:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672609973; cv=none; d=google.com; s=arc-20160816; b=ApDgbFeeZgVMt9vesm/wF1OzPIzRTLP9czSNGVlctaY6zAm2axJAxqglKEq3hkXNMQ 5RywxGZ6aK3Ohg8ZHKxKuwXDLUrWq9EIRwIM6vDhmFPTdcBQFpWPU83WI+g/4ZK4uLlw Nytyd/CjTQJBuLG59oizCWXE1z63G02c76VB23z01sn9oK4F1qNgfABT4gvIFF0Hs8ca 76kVszVEOeGto54kMc73tEaV/YvbV+9hDk156m+ZesRXvO23fTbXNKdwU6j5gIpQAGw9 4KYPxAmMqdsJpNocyugOj0vHhUJbZg1dGgla2TMfj3tAzzRqXgbkZvNRIA/1cRudnJsP e1TA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:references:in-reply-to:message-id:date:to:from :dkim-signature:dkim-signature:dkim-signature; bh=/EIK12jvSgJkY2dAIFMxEyJmy3Ezt2sVtFxsO3UQCyM=; b=lizv5UrNwwrLSp0gKs4dyssdr2lGThs7ZciAi/3VCKl5HEuSArU/TtFSfAX+yZeyMd xDDbfejLncJnKmIHEDbTvpIXib8KXDiqCBfS/bqZN+FVokqWqA81BLURKVeDj/f98ajq 1t6fUB5kr/IxpHk6fejGEB07bFyzY08ZW/DzsVNWrl8SW6FWmuMDTNrmUxNqd1dTzFlH Gn2ewvDtbkhVx7z98d8/9A3fRjyaL/bEt5K53n+0Fre+1AS6X19oNPyWztdAp3+MbXy1 OWX0Tt6dmqREBdkeKtsdau7DTIKHZlo3N+tzH5nX93FX/8Y38xHFXWHlqAye3VMmFooV kHpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b="fd30z/rt"; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=KmJf5xqP; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=RA7WUIdb; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id x24-20020a63db58000000b004982aa44074si20890296pgi.561.2023.01.01.13.52.53 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 01 Jan 2023 13:52:53 -0800 (PST) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b="fd30z/rt"; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=KmJf5xqP; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=RA7WUIdb; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1pC6FH-0004oU-0T; Sun, 01 Jan 2023 21:51:55 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pC6FF-0004oM-6k for openvpn-devel@lists.sourceforge.net; Sun, 01 Jan 2023 21:51:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Q2tA/onsnEiwyELEa2IVUBY9uRzZZqYYt3eeUs6QUPs=; b=fd30z/rtD+lXkybMA23WfxNf04 sDXLc4xeFLtFgaoypTlOIp+5ZE27YyrdHzEphhzG99l2ud/ylHwzPaB1wmzyyP4Pc0mno7TK+QMky C+Y4O5nT5y/vG6k1Z/0E4kmEPV3N7TMXpGlRZmIG+bAzjmOr/f6webKCl2W+6Obb8lfg=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Q2tA/onsnEiwyELEa2IVUBY9uRzZZqYYt3eeUs6QUPs=; b=KmJf5xqPIZLWgclYagDnhyQWbf GfQlPf7sbRQLJlguCBG55MzeJsfHk6J2Wx0o+v5gk/phPD6uYjlY77XlrIGxYHairWNd6P6Yos1Xd KwDsghBNhTZlO7CfP8WA/DkSIOke7cmY/Cxta3vozqJ2bsH3M52dNLgyIUluIj54+b90=; Received: from mail-io1-f45.google.com ([209.85.166.45]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1pC6FB-001bzW-0A for openvpn-devel@lists.sourceforge.net; Sun, 01 Jan 2023 21:51:53 +0000 Received: by mail-io1-f45.google.com with SMTP id b192so14192244iof.8 for ; Sun, 01 Jan 2023 13:51:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q2tA/onsnEiwyELEa2IVUBY9uRzZZqYYt3eeUs6QUPs=; b=RA7WUIdbnhycODpB/0Pvp/lOAaehNCtrRmwH0gy+qqNdTESvx9CF4vvMHdRzRjmOF2 pIKu5kHUenKlqby4pLB5Hwp/yKY4BCYwrPVwhN+NR5Qh8AI6vUr1uGAZ6AP2esaZXEO2 AmO8jbIOZDXkGhQwPOzbl+cL9S/h4FZTBjetJbQs4NIlqePe4+AMysgJXlKDU54/8UBn 1dmAzJqYvzPuW8TUiBoTi6SOxQr5qWL+CIhBSu5Pk8o96ie0CB+t8ovdDIGYUtuOVTrD lKxPbONPtn2uzC7rq9k01ZO0/BOcrmwTvGrAc9gYPHpjw4u8L5RcaSadnD5dUHR1dL68 pRKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q2tA/onsnEiwyELEa2IVUBY9uRzZZqYYt3eeUs6QUPs=; b=19XLfzpXlu43nH0vjyHxHFK9lxlZdV+UKG8dfkK28yKOx9S8s6uwXsR5UIGZWl8SmH W6Q9zv+MX3S0IJN5IzOPQUmG2bVWdyKX+USEtJAmP7teoOa20qtus9eBkKzNjjwaYqUY rzjIqbG78lIfIRVeTBpABp2pUzyCje5qMCVsG3adNimtgvwQW0AsxIhRjRl2NlyGgqZ4 1Ky8Z5QhguAufC2OO8gcMdbg1YZYC6ReRcF3GRJN2+EVUoUIMil0XOweQUqXm5bgVmLa PLZRYwcO3yQwNc5lNeXpqm0UFUTikA/yLmxzgGAacV0C/VZpEsRBLhGbSdI4AlW/Lohm xQKw== X-Gm-Message-State: AFqh2kqTQF7qmMt8LuChCXnVWQj/QJW3y3546W7c8hEL0+nAjVyvDFrH 48Ru7rVc0uYL53VLrmyy6gzwODvg+Dxg9w== X-Received: by 2002:a6b:7808:0:b0:6db:3123:261 with SMTP id j8-20020a6b7808000000b006db31230261mr4932765iom.2.1672609903210; Sun, 01 Jan 2023 13:51:43 -0800 (PST) Received: from uranus.sansel.ca (bras-vprn-tnhlon4053w-lp130-01-70-51-222-66.dsl.bell.ca. [70.51.222.66]) by smtp.gmail.com with ESMTPSA id w11-20020a022a0b000000b0038a44dbbd8fsm8975359jaw.123.2023.01.01.13.51.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Jan 2023 13:51:42 -0800 (PST) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Sun, 1 Jan 2023 16:51:08 -0500 Message-Id: <20230101215109.1521549-5-selva.nair@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230101215109.1521549-1-selva.nair@gmail.com> References: <20230101215109.1521549-1-selva.nair@gmail.com> MIME-Version: 1.0 X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "util-spamd-2.v13.lw.sourceforge.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Selva Nair - In win32_signal_get() re-order the check so that Windows signals are picked up even if signal_received is non-zero - When management is not active, management_sleep() becomes sleep() but it is not interruptible by signals on Windows. Fix this by periodically checking for signal. Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [selva.nair[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.166.45 listed in wl.mailspike.net] -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.166.45 listed in list.dnswl.org] X-Headers-End: 1pC6FB-001bzW-0A Subject: [Openvpn-devel] [PATCH 4/5] Fix signal handling on Windows X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1753858675529086307?= X-GMAIL-MSGID: =?utf-8?q?1753858675529086307?= From: Selva Nair - In win32_signal_get() re-order the check so that Windows signals are picked up even if signal_received is non-zero - When management is not active, management_sleep() becomes sleep() but it is not interruptible by signals on Windows. Fix this by periodically checking for signal. Fixes Trac #311 #639 (windows specific part) Github: Fixes OpenVPN/openvpn#205 (windows specific part) Note: if stuck in address resolution, press ctrl-C and wait for getaddrinfo() to timeout. Signed-off-by: Selva Nair --- src/openvpn/manage.c | 4 ++ src/openvpn/win32.c | 98 +++++++++++++++++++++++++++++--------------- 2 files changed, 68 insertions(+), 34 deletions(-) diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c index 5465b7e9..ac37e557 100644 --- a/src/openvpn/manage.c +++ b/src/openvpn/manage.c @@ -4091,10 +4091,14 @@ man_persist_client_stats(struct management *man, struct context *c) void management_sleep(const int n) { +#ifdef WIN32 + win32_sleep(n); +#else if (n > 0) { sleep(n); } +#endif /* ifdef WIN32 */ } #endif /* ENABLE_MANAGEMENT */ diff --git a/src/openvpn/win32.c b/src/openvpn/win32.c index c3520bca..e16d5461 100644 --- a/src/openvpn/win32.c +++ b/src/openvpn/win32.c @@ -642,50 +642,44 @@ int win32_signal_get(struct win32_signal *ws) { int ret = 0; - if (siginfo_static.signal_received) - { - ret = siginfo_static.signal_received; - } - else + + if (ws->mode == WSO_MODE_SERVICE) { - if (ws->mode == WSO_MODE_SERVICE) + if (win32_service_interrupt(ws)) { - if (win32_service_interrupt(ws)) - { - ret = SIGTERM; - } + ret = SIGTERM; } - else if (ws->mode == WSO_MODE_CONSOLE) + } + else if (ws->mode == WSO_MODE_CONSOLE) + { + switch (win32_keyboard_get(ws)) { - switch (win32_keyboard_get(ws)) - { - case 0x3B: /* F1 -> USR1 */ - ret = SIGUSR1; - break; + case 0x3B: /* F1 -> USR1 */ + ret = SIGUSR1; + break; - case 0x3C: /* F2 -> USR2 */ - ret = SIGUSR2; - break; + case 0x3C: /* F2 -> USR2 */ + ret = SIGUSR2; + break; - case 0x3D: /* F3 -> HUP */ - ret = SIGHUP; - break; + case 0x3D: /* F3 -> HUP */ + ret = SIGHUP; + break; - case 0x3E: /* F4 -> TERM */ - ret = SIGTERM; - break; + case 0x3E: /* F4 -> TERM */ + ret = SIGTERM; + break; - case 0x03: /* CTRL-C -> TERM */ - ret = SIGTERM; - break; - } - } - if (ret) - { - throw_signal(ret); /* this will update signinfo_static.signal received */ + case 0x03: /* CTRL-C -> TERM */ + ret = SIGTERM; + break; } } - return ret; + if (ret) + { + throw_signal(ret); /* this will update signinfo_static.signal received */ + } + return (siginfo_static.signal_received); } void @@ -1603,4 +1597,40 @@ set_openssl_env_vars() } } +void +win32_sleep(const int n) +{ + if (n < 0) + { + return; + } + + /* Sleep() is not interruptible. Use a WAIT_OBJECT to catch signal */ + if (HANDLE_DEFINED(win32_signal.in.read)) + { + time_t expire = 0; + update_time(); + expire = now + n; + while (expire >= now) + { + DWORD status = WaitForSingleObject(win32_signal.in.read, (expire - now)*1000); + if (win32_signal_get(&win32_signal) || status == WAIT_TIMEOUT) + { + return; + } + + update_time(); + + if (status == WAIT_FAILED && expire > now) + { + Sleep((expire-now)*1000); + return; + } + } + } + else + { + Sleep(n*1000); + } +} #endif /* ifdef _WIN32 */