From patchwork Fri Jul 3 09:20:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lev Stipakov X-Patchwork-Id: 1201 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director7.mail.ord1d.rsapps.net ([172.30.191.6]) by backend30.mail.ord1d.rsapps.net with LMTP id EM8jNGGF/14YVAAAIUCqbw for ; Fri, 03 Jul 2020 15:22:09 -0400 Received: from proxy8.mail.ord1d.rsapps.net ([172.30.191.6]) by director7.mail.ord1d.rsapps.net with LMTP id +JIENGGF/14WcAAAovjBpQ ; Fri, 03 Jul 2020 15:22:09 -0400 Received: from smtp37.gate.ord1d ([172.30.191.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy8.mail.ord1d.rsapps.net with LMTP id kAC+M2GF/16segAAGdz6CA ; Fri, 03 Jul 2020 15:22:09 -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: smtp37.gate.ord1d.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; dkim=fail (signature verification failed) header.d=gmail.com; dmarc=fail (p=none; dis=none) header.from=gmail.com X-Suspicious-Flag: YES X-Classification-ID: 7cf9bd60-bd62-11ea-8008-525400a11cf3-1-1 Received: from [216.105.38.7] ([216.105.38.7:40580] helo=lists.sourceforge.net) by smtp37.gate.ord1d.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 7A/BC-32273-1658FFE5; Fri, 03 Jul 2020 15:22:09 -0400 Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1jrRFW-0002Eo-B2; Fri, 03 Jul 2020 19:21:26 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrRFU-0002Eh-MI for openvpn-devel@lists.sourceforge.net; Fri, 03 Jul 2020 19:21:24 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: MIME-Version:Content-Type:Content-Transfer-Encoding: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=EcG9RUUS9nE3n4bEVHE0+y2EEHSj/2B7jt86y2lQlbQ=; b=YzXif4oCj4TaF7HQ2x7Wt54LB3 iCBsrOMQUro6IvVNOB5VaoIRqnsusaeEubbQZQ4Hg7n7hjXQrL1flDCSZIWGDEbnSzCcyZcdMaZPp 1LaxHlgnT+u/wDt7h8RzypmyKJ0IuQBBg2K4q59Zo0T+M3fgb2mM9l0hLqIQp6jF+iVI=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:MIME-Version: Content-Type:Content-Transfer-Encoding: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=EcG9RUUS9nE3n4bEVHE0+y2EEHSj/2B7jt86y2lQlbQ=; b=H1t7aNbcqRusVyv/V8RS8rcTF6 3nkr83/tZRvnvm0n/jWBi2BPs6lkCBQkeibylcwivYCLbmV253mn4tzudGmz+D7P3FuPryte3PKAT xoccV6Zs9j+VaDKhhyKYod/xeHjwJ0bAI0F7/fo/oSQEVyhDGXrNolACd8X21uVJPdvo=; Received: from mail-lj1-f195.google.com ([209.85.208.195]) by sfi-mx-3.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92.2) id 1jrRFT-00736x-AR for openvpn-devel@lists.sourceforge.net; Fri, 03 Jul 2020 19:21:24 +0000 Received: by mail-lj1-f195.google.com with SMTP id f5so22310623ljj.10 for ; Fri, 03 Jul 2020 12:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=EcG9RUUS9nE3n4bEVHE0+y2EEHSj/2B7jt86y2lQlbQ=; b=meBvN+XDFcFSIhJjhr/bffvxRDZgQ7JWUJQrH5cic8jV0SPmTGBDrjp8EeE+SQwfwt HQPr2GDU0OtcxERHX0v/CVCCHF/QFunlyyy+pf0VS1m5lesPvwHQ/A5c5taWNGloyFvu aX8zHNO4pY6xqsLq024QmjjkR2YefjLYiiQ3kcxmoTzCzjYlaI845nlvuKj07Ek/vM8X sh4AoJF3nV8XLbCUb0QzIxkyQPYwDTMIOCinZU2y1JSQkD3PMrRynvD6Z3Z3vfs37Kkb cX9AbbgmVSBUUCv+mf8sf3+Dq9bWT9S51jAOShd9dMGussnt/qMnXk5OWc3dQrebG2iE /QeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=EcG9RUUS9nE3n4bEVHE0+y2EEHSj/2B7jt86y2lQlbQ=; b=e0B/eY9CHa6SbJc/5PA6I1qxxH9DszE6D0oOSE22Mrhm3j6X5apFNm1HPcSFwct3le 9zJiR5fc6zx3iK/HDY9LIq6r8+i8z7FBDheMx4DSMxFce5R4Wu3SXcPf5+jZaHzFZKVV 5ClUSnTRm/PLFRu3W7ZJN+2Bceic6dMskY/PsU4Yz2Y3/vZlyl2a1QBC5KtiOeHNveAy RkjWS/Zz22xgVm6+0FVJRqT9Pee5yTca0SzatY5cLB7SE3zle+CR42NGjl0Fs9D6Odr4 NaPTrIKkkM7IT3QEvCrACZY3EiXLp0mkwgP6ssL/t4TKbWaf22+Kiu9H0DVDP3h8E2sX 6G4Q== X-Gm-Message-State: AOAM533UKk9SPegB7ZMoyb4ddAtKDtmGllUv/D6vdADWFG+mkaKeZeeF 7U6hu6a3E7Y2ZrkOSCP7ngJJxuSP X-Google-Smtp-Source: ABdhPJz9fs+3JKcv9P3wF9IuebMEHfWTFYDoslO8qGbf7Y4QpHYHQJeQYpsumxtcc8Wr0iy2iYFDYQ== X-Received: by 2002:a2e:8216:: with SMTP id w22mr14355620ljg.2.1593804069101; Fri, 03 Jul 2020 12:21:09 -0700 (PDT) Received: from LAPTOP-4L3N7KFS.localdomain (81-175-130-136.bb.dnainternet.fi. [81.175.130.136]) by smtp.gmail.com with ESMTPSA id k14sm4396488ljc.48.2020.07.03.12.21.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jul 2020 12:21:08 -0700 (PDT) From: Lev Stipakov To: openvpn-devel@lists.sourceforge.net Date: Fri, 3 Jul 2020 22:20:29 +0300 Message-Id: <20200703192029.306-1-lstipakov@gmail.com> X-Mailer: git-send-email 2.17.1 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.208.195 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (lstipakov[at]gmail.com) 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: openvpn.net] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.208.195 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-Headers-End: 1jrRFT-00736x-AR Subject: [Openvpn-devel] [PATCH] tap.c: fix adapter renaming 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: , Cc: Lev Stipakov MIME-Version: 1.0 Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox From: Lev Stipakov Turns out that renaming adapter by setting registry key doesn't really work - while new adapter name is shown in control panel etc, when one tries to change adapter properties (like set DNS) with netsh call - it fails: Fri Mar 13 09:05:36 2020 us=569311 Setting IPv4 dns servers on 'OpenVPN Wintun' (if_index = 14) using service Fri Mar 13 09:05:37 2020 us=118028 TUN: adding IPv4 dns failed using service: Funktio ei kelpaa. [status=1 if_name=OpenVPN Wintun] This renames adapter with netsh command, like: netsh interface set interface name="Local Area Connection 2" newname="OpenVPN Wintun" Above functionality is used by tapctl.exe and openvpnsica.dll (during installation). Signed-off-by: Lev Stipakov Acked-by: Simon Rozman --- src/tapctl/tap.c | 74 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 17 deletions(-) diff --git a/src/tapctl/tap.c b/src/tapctl/tap.c index 8ece3fb9..c129c079 100644 --- a/src/tapctl/tap.c +++ b/src/tapctl/tap.c @@ -1099,6 +1099,43 @@ tap_enable_adapter( return execute_on_first_adapter(hwndParent, pguidAdapter, bEnable ? enable_device : disable_device, pbRebootRequired); } +// stripped version of ExecCommand in interactive.c +static DWORD +ExecCommand(const WCHAR* cmdline) +{ + DWORD exit_code; + STARTUPINFOW si; + PROCESS_INFORMATION pi; + DWORD proc_flags = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT; + WCHAR* cmdline_dup = NULL; + + ZeroMemory(&si, sizeof(si)); + ZeroMemory(&pi, sizeof(pi)); + + si.cb = sizeof(si); + + /* CreateProcess needs a modifiable cmdline: make a copy */ + cmdline_dup = _wcsdup(cmdline); + if (cmdline_dup && CreateProcessW(NULL, cmdline_dup, NULL, NULL, FALSE, + proc_flags, NULL, NULL, &si, &pi)) + { + WaitForSingleObject(pi.hProcess, INFINITE); + if (!GetExitCodeProcess(pi.hProcess, &exit_code)) + { + exit_code = GetLastError(); + } + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + else + { + exit_code = GetLastError(); + } + + free(cmdline_dup); + return exit_code; +} DWORD tap_set_adapter_name( @@ -1134,7 +1171,7 @@ tap_set_adapter_name( HKEY_LOCAL_MACHINE, szRegKey, 0, - KEY_SET_VALUE, + KEY_QUERY_VALUE, &hKey); if (dwResult != ERROR_SUCCESS) { @@ -1143,27 +1180,30 @@ tap_set_adapter_name( goto cleanup_szAdapterId; } - /* Set the adapter name. */ - size_t sizeName = ((_tcslen(szName) + 1) * sizeof(TCHAR)); -#ifdef _WIN64 - if (sizeName > DWORD_MAX) + LPTSTR szOldName = NULL; + dwResult = get_reg_string(hKey, TEXT("Name"), &szOldName); + if (dwResult != ERROR_SUCCESS) { - dwResult = ERROR_BAD_ARGUMENTS; - msg(M_NONFATAL, "%s: string too big (size %u).", __FUNCTION__, sizeName); + SetLastError(dwResult); + msg(M_NONFATAL | M_ERRNO, "%s: Error reading adapter name", __FUNCTION__); goto cleanup_hKey; } -#endif - dwResult = RegSetKeyValue( - hKey, - NULL, - TEXT("Name"), - REG_SZ, - szName, - (DWORD)sizeName); + + // rename adapter via netsh call + const TCHAR* szFmt = _T("netsh interface set interface name=\"%s\" newname=\"%s\""); + size_t ncmdline = _tcslen(szFmt) + _tcslen(szOldName) + _tcslen(szName) + 1; + WCHAR* szCmdLine = malloc(ncmdline * sizeof(TCHAR)); + _stprintf_s(szCmdLine, ncmdline, szFmt, szOldName, szName); + + free(szOldName); + + dwResult = ExecCommand(szCmdLine); + free(szCmdLine); + if (dwResult != ERROR_SUCCESS) { - SetLastError(dwResult); /* MSDN does not mention RegSetKeyValue() to set GetLastError(). But we do have an error code. Set last error manually. */ - msg(M_NONFATAL | M_ERRNO, "%s: RegSetKeyValue(\"Name\") failed", __FUNCTION__); + SetLastError(dwResult); + msg(M_NONFATAL | M_ERRNO, "%s: Error renaming adapter", __FUNCTION__); goto cleanup_hKey; }