From patchwork Thu Oct 30 15:01:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gert Doering X-Patchwork-Id: 4546 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7001:2f13:b0:72f:f16c:e055 with SMTP id sa19csp978631mab; Thu, 30 Oct 2025 08:02:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVqAsYCHmQ6SrJ6Nb/b3e7RhqEx801l0PXZd9lY68pGa7fay9kICqUzRp8B+58glvsFeIyiNyFwGwM=@openvpn.net X-Google-Smtp-Source: AGHT+IHfx6HoLqbZE5gCDvjkK7ALb8qr6NCv0Y5ALdSBXI34nlymnkQYOD4HjOeQVxc8bpXM2JhH X-Received: by 2002:a05:6808:2389:b0:439:af2f:d1da with SMTP id 5614622812f47-44f7a3ded8fmr3195062b6e.14.1761836558247; Thu, 30 Oct 2025 08:02:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1761836558; cv=none; d=google.com; s=arc-20240605; b=SAO1AUuTxBnAIsHqzuDKxowgGcx/lzJ3gLcz+1wuOBaK0Neod2fvg9e90IEDvZvNKi mFvOjIn4iifZu3n2VtFjDf5nnaPSkQPKjiQSBPynosmSHoHY3U1OwCTbkm4khcTM8x5E ONKa0X+gkBeVpR8EMmTbGdoUqRx9qsTmUCaPVq8t4Ual0E85u1jpI0m89o92iPOP5XLC za5OlA/BnGTuErFOxAIlnzl6EBzzxrviJdNptYmzv7F/b7YcfiukLNeoC0RKpkHfsxFP mzZn0kXFo1TxnGgoN9xwc8Kc1ybGgmgqr+y3Jpw66+YYi9MAjs3eXxSHTup/xwqIG5lo wIkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=JcaJzTnCOr+ESJetbA5aOVwmgvezcBB74S415HDdKeA=; fh=4NbAC/LsuMLI0S0hprUlLSLCiHwg6SCAifhH718Jh0Q=; b=QLhUYvZE1gftNbENLUiptY7D1B3U+uN7i9p/5rywcMCBvdQHJ/mR8dpy8vAZUHC7p3 R43LSnekShzo+zjVsJhcjp6C4ydq6ZdLCWFuhR/qCQQsVHTDn8mMUi3YeRPGIOfdjLxi t193F2E/o5f6XqFrtnPLzPuRFEN3T7StOwWWfA0Kus+MXl3ypeqwgeiQqyQjEBqymWsS zlthmkK+43i+euEOgGo5KhcZQKE35juUmYn900d8mqw9id7LV+fzzti2bSSpX6wEunpq cfsplsNHvx8B0XfyrI4t6yEHwvqYZsi6gM3Vmtu8MWmLWoez4xfWQqpo3LhtpNsRypjJ xVSw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=Fhpn0PlL; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=nUU0cpg2; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=RxqbVwXr; 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=NONE dis=NONE) header.from=muc.de Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 8926c6da1cb9f-5aec8312012si12252682173.146.2025.10.30.08.02.36 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Oct 2025 08:02:37 -0700 (PDT) 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=pass header.i=@lists.sourceforge.net header.s=beta header.b=Fhpn0PlL; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=nUU0cpg2; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=RxqbVwXr; 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=NONE dis=NONE) header.from=muc.de DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type: List-Subscribe:List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Subject:MIME-Version:References:In-Reply-To:Message-ID:Date:To:From:Sender: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=JcaJzTnCOr+ESJetbA5aOVwmgvezcBB74S415HDdKeA=; b=Fhpn0PlL8zJ1VZv7aCuRcZdegF zFr+B+HEbt0UUy9v+xGoQzCRsZLYRJ7yiXSuNF3J+O2AhAPelN1Hmn0bX4nB+USkua+V0Glxeq9nH 2jf4RwtnwYPDOHmCeH5piot6ztAH9xpKdSPD13lV9j8nPZv4dSKWmVjIStcIKt0Imo4U=; 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 1vEUAZ-0004vn-AI; Thu, 30 Oct 2025 15:02:32 +0000 Received: from [172.30.29.66] (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 1vEUAY-0004vh-BS for openvpn-devel@lists.sourceforge.net; Thu, 30 Oct 2025 15:02:31 +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: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:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=A4Mfsz9E5Fn1Y/BC6enKme0McrtaOPLXkG3F5sxt89I=; b=nUU0cpg2D/0RwzCyjXX/28Kftm mA9XMEvzRwg2mxwY9yL4Li6rIAV1dAITAZGP7v1C9gwMhtKzwTnw+3Md2u7UAmqqGIpogMt4LWUrB ZEUjzQbNfd3NWXVOkGcZ8m6J/5rqtEZLFQdd/X7piJXqCw7QvQVNQJ4p3HVyf2YJnLv4=; 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: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:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=A4Mfsz9E5Fn1Y/BC6enKme0McrtaOPLXkG3F5sxt89I=; b=RxqbVwXrBYrd6s2PICCjeLfqZc 8oOcK/V+LCJWYp2xFopkqu7uadg7xqzJXgKJr1hrDEo77OZ8KSFvCuwmrPvsF3G/sz8ghWAnYnjPT 9A0u2R0johHjc1sV1FAD2x49MWekArz4QmkArCWGncCVkdS9utxKpvaJJj2/AdIg/vOY=; Received: from [193.149.48.134] (helo=blue.greenie.muc.de) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1vEUAU-0004VE-R7 for openvpn-devel@lists.sourceforge.net; Thu, 30 Oct 2025 15:02:31 +0000 Received: from blue.greenie.muc.de (localhost [127.0.0.1]) by blue.greenie.muc.de (8.18.1/8.18.1) with ESMTP id 59UF2FiR004200 for ; Thu, 30 Oct 2025 16:02:15 +0100 Received: (from gert@localhost) by blue.greenie.muc.de (8.18.1/8.18.1/Submit) id 59UF2F9r004199 for openvpn-devel@lists.sourceforge.net; Thu, 30 Oct 2025 16:02:15 +0100 From: Gert Doering To: openvpn-devel@lists.sourceforge.net Date: Thu, 30 Oct 2025 16:01:49 +0100 Message-ID: <20251030150214.4161-1-gert@greenie.muc.de> X-Mailer: git-send-email 2.49.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "sfi-spamd-1.hosts.colo.sdot.me", 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: Heiko Hund We use the interface index with netsh everywhere else, so convert this invocation of netsh to index use as well. Remove CmpWString() as it is no longer used anywhere. Content analysis details: (1.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS X-Headers-End: 1vEUAU-0004VE-R7 Subject: [Openvpn-devel] [PATCH v3] iservice: use interface index with netsh 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?1847419529648833150?= X-GMAIL-MSGID: =?utf-8?q?1847419529648833150?= From: Heiko Hund We use the interface index with netsh everywhere else, so convert this invocation of netsh to index use as well. Remove CmpWString() as it is no longer used anywhere. Change-Id: I329b407693b97dd048bd3788ecad345d6e25dab2 Signed-off-by: Heiko Hund Acked-by: Lev Stipakov Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1308 --- This change was reviewed on Gerrit and approved by at least one developer. I request to merge it to master. Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1308 This mail reflects revision 3 of this Change. Acked-by according to Gerrit (reflected above): Lev Stipakov diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c index ce0d4dd..50f1627 100644 --- a/src/openvpnserv/interactive.c +++ b/src/openvpnserv/interactive.c @@ -995,16 +995,16 @@ } /** - * Run the command: netsh interface ip $action wins $if_name [static] $addr + * Run the command: netsh interface ip $action wins $if_index [static] $addr * @param action "delete", "add" or "set" - * @param if_name "name_of_interface" + * @param if_index index of the interface to modify WINS for * @param addr IPv4 address as a string * * If addr is null and action = "delete" all addresses are deleted. * if action = "set" then "static" is added before $addr */ static DWORD -netsh_wins_cmd(const wchar_t *action, const wchar_t *if_name, const wchar_t *addr) +netsh_wins_cmd(const wchar_t *action, int if_index, const wchar_t *addr) { DWORD err = 0; int timeout = 30000; /* in msec */ @@ -1030,10 +1030,10 @@ /* cmd template: * netsh interface ip $action wins $if_name $static $addr */ - const wchar_t *fmt = L"netsh interface ip %ls wins \"%ls\" %ls %ls"; + const wchar_t *fmt = L"netsh interface ip %ls wins %d %ls %ls"; /* max cmdline length in wchars -- include room for worst case and some */ - size_t ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(action) + wcslen(addr) + size_t ncmdline = wcslen(fmt) + 11 /*if_index*/ + wcslen(action) + wcslen(addr) + wcslen(addr_static) + 32 + 1; cmdline = malloc(ncmdline * sizeof(wchar_t)); if (!cmdline) @@ -1042,7 +1042,7 @@ goto out; } - swprintf(cmdline, ncmdline, fmt, action, if_name, addr_static, addr); + swprintf(cmdline, ncmdline, fmt, action, if_index, addr_static, addr); err = ExecCommand(argv0, cmdline, timeout); @@ -1051,12 +1051,6 @@ return err; } -static BOOL -CmpWString(LPVOID item, LPVOID str) -{ - return (wcscmp(item, str) == 0) ? TRUE : FALSE; -} - /** * Signal the DNS resolver (and others potentially) to reload the * group policy (DNS) settings on 32 bit Windows systems @@ -2882,7 +2876,7 @@ static DWORD HandleWINSConfigMessage(const wins_cfg_message_t *msg, undo_lists_t *lists) { - DWORD err = 0; + DWORD err = NO_ERROR; wchar_t addr[16]; /* large enough to hold string representation of an ipv4 */ int addr_len = msg->addr_len; @@ -2892,38 +2886,25 @@ addr_len = _countof(msg->addr); } - if (!msg->iface.name[0]) /* interface name is required */ + if (!msg->iface.index) /* interface index is required */ { return ERROR_MESSAGE_DATA; } - /* use a non-const reference with limited scope to enforce null-termination of strings from - * client */ - { - wins_cfg_message_t *msgptr = (wins_cfg_message_t *)msg; - msgptr->iface.name[_countof(msg->iface.name) - 1] = '\0'; - } - - wchar_t *wide_name = utf8to16(msg->iface.name); /* utf8 to wide-char */ - if (!wide_name) - { - return ERROR_OUTOFMEMORY; - } - /* We delete all current addresses before adding any * OR if the message type is del_wins_cfg */ if (addr_len > 0 || msg->header.type == msg_del_wins_cfg) { - err = netsh_wins_cmd(L"delete", wide_name, NULL); + err = netsh_wins_cmd(L"delete", msg->iface.index, NULL); if (err) { goto out; } - free(RemoveListItem(&(*lists)[undo_wins], CmpWString, wide_name)); + free(RemoveListItem(&(*lists)[undo_wins], CmpAny, NULL)); } - if (msg->header.type == msg_del_wins_cfg) + if (addr_len == 0 || msg->header.type == msg_del_wins_cfg) { goto out; /* job done */ } @@ -2931,7 +2912,7 @@ for (int i = 0; i < addr_len; ++i) { RtlIpv4AddressToStringW(&msg->addr[i].ipv4, addr); - err = netsh_wins_cmd(i == 0 ? L"set" : L"add", wide_name, addr); + err = netsh_wins_cmd(i == 0 ? L"set" : L"add", msg->iface.index, addr); if (i == 0 && err) { goto out; @@ -2941,22 +2922,23 @@ */ } - err = 0; - - if (addr_len > 0) + int *if_index = malloc(sizeof(msg->iface.index)); + if (if_index) { - wchar_t *tmp_name = _wcsdup(wide_name); - if (!tmp_name || AddListItem(&(*lists)[undo_wins], tmp_name)) - { - free(tmp_name); - netsh_wins_cmd(L"delete", wide_name, NULL); - err = ERROR_OUTOFMEMORY; - goto out; - } + *if_index = msg->iface.index; } + if (!if_index || AddListItem(&(*lists)[undo_wins], if_index)) + { + free(if_index); + netsh_wins_cmd(L"delete", msg->iface.index, NULL); + err = ERROR_OUTOFMEMORY; + goto out; + } + + err = 0; + out: - free(wide_name); return err; } @@ -3206,7 +3188,7 @@ break; case undo_wins: - netsh_wins_cmd(L"delete", item->data, NULL); + netsh_wins_cmd(L"delete", *(int *)item->data, NULL); break; case wfp_block: