From patchwork Fri Jun 18 07:19:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gert Doering X-Patchwork-Id: 1865 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director13.mail.ord1d.rsapps.net ([172.28.255.1]) by backend30.mail.ord1d.rsapps.net with LMTP id uGbUKgvWzGDXEAAAIUCqbw (envelope-from ) for ; Fri, 18 Jun 2021 13:21:15 -0400 Received: from proxy2.mail.ord1c.rsapps.net ([172.28.255.1]) by director13.mail.ord1d.rsapps.net with LMTP id kFN+KgvWzGCABgAA91zNiA (envelope-from ) for ; Fri, 18 Jun 2021 13:21:15 -0400 Received: from smtp7.gate.ord1c ([172.28.255.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy2.mail.ord1c.rsapps.net with LMTPS id YJo1KgvWzGAgcwAA311kuQ (envelope-from ) for ; Fri, 18 Jun 2021 13:21:15 -0400 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp7.gate.ord1c.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dmarc=none (p=nil; dis=none) header.from=greenie.muc.de X-Suspicious-Flag: YES X-Classification-ID: 959d5b82-d059-11eb-bf5f-bc305bf04148-1-1 Received: from [216.105.38.7] ([216.105.38.7:46350] helo=lists.sourceforge.net) by smtp7.gate.ord1c.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id D1/C5-10411-A06DCC06; Fri, 18 Jun 2021 13:21:15 -0400 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.92.3) (envelope-from ) id 1luI9u-00016K-CE; Fri, 18 Jun 2021 17:19:58 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) (envelope-from ) id 1luI9r-000168-OJ for openvpn-devel@lists.sourceforge.net; Fri, 18 Jun 2021 17:19:55 +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:Message-Id: Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=xlsarD/lQIgcAN23TdF5AoXvs7Sur7qMa1ry7VJ+fkQ=; b=gGj2rACmYQbHPK+xNlRgFJqN0z en6CLMtHgSj7SLgl7PKK1KsFVdmxHjCBIMCABAtEg9YQl4H99vxj/YlRjMWQF/gXzmVEffkxuUcJ+ odGPCsP84zvRAAvZboEcmiiDBMZtaNLsexqdMeRwjdQ2PyMN84Tcisdtg1daMcRd6m2I=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject:To:From: Sender:Reply-To:Cc:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=xlsarD/lQIgcAN23TdF5AoXvs7Sur7qMa1ry7VJ+fkQ=; b=g elqG+ECgbeVchU0gF5ASlj8wXA0g4KjNiwW6TwTjeQ/rwaROpfe3PNMODerDN6RTX64DZkNWciUIP 5Jlq1sv83HhNhY9gzmj6PGkyDpAB5m5hd1w+WIEt57SUjWqChW6wlsP3HEF0QBUkTpLsK5rd7IkTo UzsT2fkFeRA2YTPU=; Received: from dhcp-174.greenie.muc.de ([193.149.48.174] helo=blue.greenie.muc.de) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) id 1luI9h-0004Y3-Ap for openvpn-devel@lists.sourceforge.net; Fri, 18 Jun 2021 17:19:56 +0000 Received: from blue.greenie.muc.de (localhost [127.0.0.1]) by blue.greenie.muc.de (8.15.2/8.14.9) with ESMTP id 15IHJZYP029034 for ; Fri, 18 Jun 2021 19:19:35 +0200 Received: (from gert@localhost) by blue.greenie.muc.de (8.15.2/8.14.9/Submit) id 15IHJZaE029033 for openvpn-devel@lists.sourceforge.net; Fri, 18 Jun 2021 19:19:35 +0200 From: Gert Doering To: openvpn-devel@lists.sourceforge.net Date: Fri, 18 Jun 2021 19:19:33 +0200 Message-Id: <20210618171933.28985-1-gert@greenie.muc.de> X-Mailer: git-send-email 2.26.3 MIME-Version: 1.0 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: muc.de] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-Headers-End: 1luI9h-0004Y3-Ap Subject: [Openvpn-devel] [PATCH] Add error reporting to get_console_input_win32(). 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 When the function setup fails due to invalid file handles, or because WriteFile(err, ...) fails (due to file handle corruption elsewhere), the function used to silently "return false" Change this to print a M_WARN|M_ERRNO message. Also, change the function style to early-return style (= large diff, but most are indent changes only). Signed-off-by: Gert Doering --- src/openvpn/console_builtin.c | 96 ++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/src/openvpn/console_builtin.c b/src/openvpn/console_builtin.c index 3214cb5f..fedabade 100644 --- a/src/openvpn/console_builtin.c +++ b/src/openvpn/console_builtin.c @@ -75,66 +75,70 @@ get_console_input_win32(const char *prompt, const bool echo, char *input, const in = GetStdHandle(STD_INPUT_HANDLE); err = get_orig_stderr(); - if (in != INVALID_HANDLE_VALUE - && err != INVALID_HANDLE_VALUE - && !win32_service_interrupt(&win32_signal) - && WriteFile(err, prompt, strlen(prompt), &len, NULL)) + if (in == INVALID_HANDLE_VALUE + || err == INVALID_HANDLE_VALUE + || win32_service_interrupt(&win32_signal) + || !WriteFile(err, prompt, strlen(prompt), &len, NULL)) { - bool is_console = (GetFileType(in) == FILE_TYPE_CHAR); - DWORD flags_save = 0; - int status = 0; - WCHAR *winput; + msg(M_WARN|M_ERRNO, "get_console_input_win32(): unexpected error"); + return false; + } - if (is_console) - { - if (GetConsoleMode(in, &flags_save)) - { - DWORD flags = ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; - if (echo) - { - flags |= ENABLE_ECHO_INPUT; - } - SetConsoleMode(in, flags); - } - else - { - is_console = 0; - } - } + bool is_console = (GetFileType(in) == FILE_TYPE_CHAR); + DWORD flags_save = 0; + int status = 0; + WCHAR *winput; - if (is_console) + if (is_console) + { + if (GetConsoleMode(in, &flags_save)) { - winput = malloc(capacity * sizeof(WCHAR)); - if (winput == NULL) + DWORD flags = ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; + if (echo) { - return false; + flags |= ENABLE_ECHO_INPUT; } - - status = ReadConsoleW(in, winput, capacity, &len, NULL); - WideCharToMultiByte(CP_UTF8, 0, winput, len, input, capacity, NULL, NULL); - free(winput); + SetConsoleMode(in, flags); } else { - status = ReadFile(in, input, capacity, &len, NULL); + is_console = 0; } + } - string_null_terminate(input, (int)len, capacity); - chomp(input); - - if (!echo) - { - WriteFile(err, "\r\n", 2, &len, NULL); - } - if (is_console) - { - SetConsoleMode(in, flags_save); - } - if (status && !win32_service_interrupt(&win32_signal)) + if (is_console) + { + winput = malloc(capacity * sizeof(WCHAR)); + if (winput == NULL) { - return true; + return false; } + + status = ReadConsoleW(in, winput, capacity, &len, NULL); + WideCharToMultiByte(CP_UTF8, 0, winput, len, input, capacity, NULL, NULL); + free(winput); + } + else + { + status = ReadFile(in, input, capacity, &len, NULL); + } + + string_null_terminate(input, (int)len, capacity); + chomp(input); + + if (!echo) + { + WriteFile(err, "\r\n", 2, &len, NULL); + } + if (is_console) + { + SetConsoleMode(in, flags_save); } + if (status && !win32_service_interrupt(&win32_signal)) + { + return true; + } +} return false; }