From patchwork Mon Jul 31 11:27:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "plaisthos (Code Review)" X-Patchwork-Id: 3309 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7300:a549:b0:d7:3b0f:3938 with SMTP id ca9csp1257687dyb; Mon, 31 Jul 2023 04:28:16 -0700 (PDT) X-Google-Smtp-Source: APBJJlHBdEFX+9CnjOtKyIsRKVCVkZsInFSnHzIHtc0dko92d3rSlJDxZA471s0hQcxqQJx9YhLs X-Received: by 2002:a05:6a21:6da7:b0:11f:c1a1:8c with SMTP id wl39-20020a056a216da700b0011fc1a1008cmr13105112pzb.54.1690802895875; Mon, 31 Jul 2023 04:28:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690802895; cv=none; d=google.com; s=arc-20160816; b=K/VIyJQpMggu55Gf/p8nZEzukox0r25CcxCI6p1uoGgHutRra8rW9Ifwz6iWeeKbU/ K50Va1l1RhjjUJnnBV4fUmt48r4vXhlFJiyF9OrZkIpBIuaeBq8O6EXrrdIPOfyrQGon LIipYrUlYrisJ2xTf+jpIWbS12TipvCibqCkq9E0YoS5OzZb2Ee29IS496Vl4Ef4NwEW 7m2opfiMZQXcuveSdMqszRjGyIxvHEsEMrNci5sNloikntwLthhofh5oOnSLVc/TIY/g 2Y9mIXLUOBRxIyOiD7TmEgstjopzGPm0YZaDHzN6CvDknDydjjlwilXUmLjifQU/dZ96 /Ltg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:cc:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:user-agent :mime-version:message-id:references:in-reply-to:auto-submitted:to :date:from:dkim-signature:dkim-signature:dkim-signature; bh=NjJcRGLPewE/o2z/u5PKQyND0cqArddpfqiWty1u7P4=; fh=/51We5BihDFiiexjGqzpN/i1vRtz8QWKjotmNJZ80fo=; b=TTJAve12OZpDebrJoxgq0udIGRpeGWGuDiyqXV6mDE69mmn+hxP2M4GLFgju+vpZN9 dyx8/0jKXZreAuDe/tnmZtmWxpO5CuKGfmIL2ogxupGJQzilANW392KuYT2i1XqAuqjy pbXyARODeHd+GBV9RaEgAVXBGtxXgS12dLXoAjKLtiBVp7WoXI5iIe2xmudxaEVp9yvm uZsza5Oksqr/MUnW+udBHfXMx4xksd67oUlP0PwRHmO19RZ/KKJSe+380nNJ11ahs2pu V2QSO2rFU+A0KwQ5eYA9DuoWyLngFl7JSxKHqr9KkThUJaQSFv1FBx2uAHqPHsFC9CQH Lr2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=c0Y5Vb7X; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b="jH0/DXdH"; dkim=neutral (body hash did not verify) header.i=@openvpn.net header.s=google header.b=YRGtdfH2; 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=openvpn.net Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id b4-20020a056a0002c400b00680a955d320si7086173pft.56.2023.07.31.04.28.15 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 31 Jul 2023 04:28:15 -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=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=c0Y5Vb7X; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b="jH0/DXdH"; dkim=neutral (body hash did not verify) header.i=@openvpn.net header.s=google header.b=YRGtdfH2; 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=openvpn.net 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.95) (envelope-from ) id 1qQR3X-0008Cf-Hc; Mon, 31 Jul 2023 11:27:20 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qQR3V-0008Bm-Qw for openvpn-devel@lists.sourceforge.net; Mon, 31 Jul 2023 11:27:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Type:Content-Transfer-Encoding:MIME-Version :Message-ID:Reply-To:References:In-Reply-To:Subject:List-Unsubscribe:List-Id: Cc:To:Date:From:Sender:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe :List-Post:List-Owner:List-Archive; bh=LB0pwijMuv32MfWT1C/jFHXcvM5Gb6GphlrPZiY5sdc=; b=c0Y5Vb7XDItGWtCO1AfgJjSKqU wxBgLLXClvu/PAvEjuOD3fTR/hQreS9VCXiENWRlYr2v3xy0vasf4azAAiyh+kbNaaIjICrBE8yj7 8GIYlnbz9opiw+W+xjIqCFRhKtv/4uBzNuzULMkt5EoNUHZztCG6m1ReWiKgR25eAKks=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Type:Content-Transfer-Encoding:MIME-Version:Message-ID:Reply-To: References:In-Reply-To:Subject:List-Unsubscribe:List-Id:Cc:To:Date:From: Sender:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe:List-Post: List-Owner:List-Archive; bh=LB0pwijMuv32MfWT1C/jFHXcvM5Gb6GphlrPZiY5sdc=; b=j H0/DXdHePkWsAS6L3k85JdFTuIXLV0jzsTyX1akoWxsu1c8SrEXjjYFqY5dsPkCOughfrpaRYkgCN 74tN9ItL7waNGUjUSpKkjxpRQ2P6z7Ja0C9f700pSaqlFsWToWUQfFQPSLHMsrGvYzSaWMuvEyR3F miBlUS5jQHwQZNB0=; Received: from mail-wr1-f44.google.com ([209.85.221.44]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1qQR3N-0002Dq-CC for openvpn-devel@lists.sourceforge.net; Mon, 31 Jul 2023 11:27:18 +0000 Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-31783d02093so4010373f8f.0 for ; Mon, 31 Jul 2023 04:27:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvpn.net; s=google; t=1690802823; x=1691407623; h=user-agent:content-disposition:content-transfer-encoding :mime-version:message-id:reply-to:references:in-reply-to:subject :list-unsubscribe:list-id:auto-submitted:cc:to:date:from:from:to:cc :subject:date:message-id:reply-to; bh=LB0pwijMuv32MfWT1C/jFHXcvM5Gb6GphlrPZiY5sdc=; b=YRGtdfH20N8W7qfdWIfWkNQpfHI8CLDiuVk64GUYQ+/ar+pC8LV5k+VTzty9vNI8vg y5O/nkltzccEiDLSVADZwLI5UhBaSpo5BtArW5C8llUkxZK0PcWSWYjGWINOcl3bQe2X LjJRDG8N3eFiBAI9NgexJv+z+aPzhQUSDeWrn3mH0onbnM+we91fXEhI2VWVa0VPdXYz Z9N2aBe/D5kQZG6KlxrbzS//rsI0vgvdxFWmTO9m3AZDOBYNJsSDfvT5MNSyHaJLOCi7 wWtU4CsPk9k8iedw0nWdzd3frkOq8UFKXpwe5NS7U2RYdm8xq07SoYJ5Rm+BfyqDd5Uv KUbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690802823; x=1691407623; h=user-agent:content-disposition:content-transfer-encoding :mime-version:message-id:reply-to:references:in-reply-to:subject :list-unsubscribe:list-id:auto-submitted:cc:to:date:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LB0pwijMuv32MfWT1C/jFHXcvM5Gb6GphlrPZiY5sdc=; b=HFNjthIwb3VV9Ue/bmorRdVl4OrwIQSL+YMmiqhMtM95P2zDkJlN9nsXYnKIteycog j63MEq285ci9klVhhkQPYrM+see+5+BGBYan+VkOYPmXrrS6eStofJyQ3UNWjD2qUbQe 1t6HpbnUjLOsXRP3g4JzxDO0N0Cjt4v9rmfOCFU6n4YIBkY66JEaz72V12msVlrpDtqQ zptSm8qL6FcDaENxr2IU7jLJKeaXH7Kf9ohv9VyKkFmuNxGJaNMLxd0Jw19SBvsC1xAh 1MVGAnR+tHgmO6qL+n5gZcu/JrJbFrHBXPnxf0yoOMYdjvQcFLKE/KfLbscc7Z/Wpql5 vMAQ== X-Gm-Message-State: ABy/qLYw6omGeILmsgkS9NRpTugER8P8hqk+hAUqQoO1pDNUmNbuf+oY 6aYxg6UOu4dUFgmLveZbRtiStg== X-Received: by 2002:a5d:4d90:0:b0:317:5ece:e169 with SMTP id b16-20020a5d4d90000000b003175ecee169mr8808721wru.68.1690802822650; Mon, 31 Jul 2023 04:27:02 -0700 (PDT) Received: from gerrit.openvpn.in (ec2-18-159-0-78.eu-central-1.compute.amazonaws.com. [18.159.0.78]) by smtp.gmail.com with ESMTPSA id k14-20020adfe3ce000000b00317643a93f4sm12782712wrm.96.2023.07.31.04.27.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Jul 2023 04:27:02 -0700 (PDT) From: "stipa (Code Review)" X-Google-Original-From: "stipa (Code Review)" X-Gerrit-PatchSet: 2 Date: Mon, 31 Jul 2023 11:27:00 +0000 To: plaisthos , flichtenheld , selvanair Auto-Submitted: auto-generated X-Gerrit-MessageType: newpatchset X-Gerrit-Change-Id: I47c22dcb728011dcedaae47cd03a57219e9c7607 X-Gerrit-Change-Number: 321 X-Gerrit-Project: openvpn X-Gerrit-ChangeURL: X-Gerrit-Commit: 05605201d9732148fe3ca6c30b0b558ee09d5fa6 In-Reply-To: References: Message-ID: <7e28afc340e2cc7db9be4f39687a2fe3b4e9ee1a-EmailReplacePatchSet-HTML@gerrit.openvpn.net> MIME-Version: 1.0 User-Agent: Gerrit/3.8.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: Attention is currently required from: cron2, ordex, plaisthos, selvanair, stipa. Hello cron2, flichtenheld, ordex, plaisthos, selvanair, I'd like you to reexamine a change. Please visit Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.221.44 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.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.221.44 listed in list.dnswl.org] 0.0 WEIRD_PORT URI: Uses non-standard port number for HTTP 0.0 HTML_MESSAGE BODY: HTML included in message -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -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_AU Message has a valid DKIM or DK signature from author's domain -0.0 T_SCC_BODY_TEXT_LINE No description available. 0.0 T_KAM_HTML_FONT_INVALID Test for Invalidly Named or Formatted Colors in HTML X-Headers-End: 1qQR3N-0002Dq-CC Subject: [Openvpn-devel] [M] Change in openvpn[release/2.6]: Set WINS servers via interactice service 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: , Reply-To: lstipakov@gmail.com, arne-openvpn@rfc2549.org, selva.nair@gmail.com, openvpn-devel@lists.sourceforge.net, frank@lichtenheld.com, a@unstable.cc Cc: openvpn-devel Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1772676550200988807?= X-GMAIL-MSGID: =?utf-8?q?1772935336841440330?= Attention is currently required from: cron2, ordex, plaisthos, selvanair, stipa. Hello cron2, flichtenheld, ordex, plaisthos, selvanair, I'd like you to reexamine a change. Please visit http://gerrit.openvpn.net/c/openvpn/+/321?usp=email to look at the new patch set (#2). Change subject: Set WINS servers via interactice service ...................................................................... Set WINS servers via interactice service At the moments WINS servers are set either: - via DHCP, which works only for tap-windows6 driver - via netsh when running without interactice service This means that in 2.6 default setup (interactive service and dco) WINS is silently ignored. Add WINS support for non-DHCP drivers (like dco) by passing WINS settings to interactive service and set them there with netsh call, similar approach as we use for setting DNS. Fixes https://github.com/OpenVPN/openvpn/issues/373 Change-Id: I47c22dcb728011dcedaae47cd03a57219e9c7607 Signed-off-by: Lev Stipakov --- M include/openvpn-msg.h M src/openvpn/tun.c M src/openvpnserv/interactive.c 3 files changed, 226 insertions(+), 1 deletion(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/21/321/2 diff --git a/include/openvpn-msg.h b/include/openvpn-msg.h index 8cd2631..a1464cd 100644 --- a/include/openvpn-msg.h +++ b/include/openvpn-msg.h @@ -40,7 +40,9 @@ msg_register_dns, msg_enable_dhcp, msg_register_ring_buffers, - msg_set_mtu + msg_set_mtu, + msg_add_wins_cfg, + msg_del_wins_cfg } message_type_t; typedef struct { @@ -89,6 +91,13 @@ typedef struct { message_header_t header; interface_t iface; + int addr_len; + inet_address_t addr[4]; /* support up to 4 dns addresses */ +} wins_cfg_message_t; + +typedef struct { + message_header_t header; + interface_t iface; int disable_nbt; int nbt_type; char scope_id[256]; diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index 4ef390a..f5c698c 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -282,6 +282,72 @@ } static bool +do_wins_service(bool add, const struct tuntap *tt) +{ + bool ret = false; + ack_message_t ack; + struct gc_arena gc = gc_new(); + HANDLE pipe = tt->options.msg_channel; + int len = tt->options.wins_len; + int addr_len = add ? len : 0; + + if (addr_len == 0 && add) /* no addresses to add */ + { + return true; + } + + wins_cfg_message_t wins = { + .header = { + (add ? msg_add_wins_cfg : msg_del_wins_cfg), + sizeof(wins_cfg_message_t), + 0 + }, + .iface = {.index = tt->adapter_index, .name = "" }, + .addr_len = addr_len + }; + + /* interface name is required */ + strncpy(wins.iface.name, tt->actual_name, sizeof(wins.iface.name)); + wins.iface.name[sizeof(wins.iface.name) - 1] = '\0'; + + if (addr_len > _countof(wins.addr)) + { + addr_len = _countof(wins.addr); + wins.addr_len = addr_len; + msg(M_WARN, "Number of WINS addresses sent to service truncated to %d", + addr_len); + } + + for (int i = 0; i < addr_len; ++i) + { + wins.addr[i].ipv4.s_addr = htonl(tt->options.wins[i]); + } + + msg(D_LOW, "%s WINS servers on '%s' (if_index = %d) using service", + (add ? "Setting" : "Deleting"), wins.iface.name, wins.iface.index); + + if (!send_msg_iservice(pipe, &wins, sizeof(wins), &ack, "TUN")) + { + goto out; + } + + if (ack.error_number != NO_ERROR) + { + msg(M_WARN, "TUN: %s WINS failed using service: %s [status=%u if_name=%s]", + (add ? "adding" : "deleting"), strerror_win32(ack.error_number, &gc), + ack.error_number, wins.iface.name); + goto out; + } + + msg(M_INFO, "WINS servers %s using service", (add ? "set" : "deleted")); + ret = true; + +out: + gc_free(&gc); + return ret; +} + +static bool do_set_mtu_service(const struct tuntap *tt, const short family, const int mtu) { bool ret = false; @@ -1557,6 +1623,7 @@ do_address_service(true, AF_INET, tt); do_dns_service(true, AF_INET, tt); do_dns_domain_service(true, tt); + do_wins_service(true, tt); } else { @@ -6979,6 +7046,7 @@ } else if (tt->options.msg_channel) { + do_wins_service(false, tt); do_dns_domain_service(false, tt); do_dns_service(false, AF_INET, tt); do_address_service(false, AF_INET, tt); diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c index d73cef0..a47db8a 100644 --- a/src/openvpnserv/interactive.c +++ b/src/openvpnserv/interactive.c @@ -93,6 +93,7 @@ undo_dns6, undo_domain, undo_ring_buffer, + undo_wins, _undo_type_max } undo_type_t; typedef list_item_t *undo_lists_t[_undo_type_max]; @@ -1084,6 +1085,63 @@ } /** + * Run the command: netsh interface ip $action wins $if_name [static] $addr + * @param action "delete", "add" or "set" + * @param if_name "name_of_interface" + * @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) +{ + DWORD err = 0; + int timeout = 30000; /* in msec */ + wchar_t argv0[MAX_PATH]; + wchar_t *cmdline = NULL; + const wchar_t *addr_static = (wcscmp(action, L"set") == 0) ? L"static" : L""; + + if (!addr) + { + if (wcscmp(action, L"delete") == 0) + { + addr = L"all"; + } + else /* nothing to do -- return success*/ + { + goto out; + } + } + + /* Path of netsh */ + openvpn_swprintf(argv0, _countof(argv0), L"%ls\\%ls", get_win_sys_path(), L"netsh.exe"); + + /* cmd template: + * netsh interface ip $action wins $if_name $static $addr + */ + const wchar_t *fmt = L"netsh interface ip %ls wins \"%ls\" %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) + +wcslen(addr_static) + 32 + 1; + cmdline = malloc(ncmdline * sizeof(wchar_t)); + if (!cmdline) + { + err = ERROR_OUTOFMEMORY; + goto out; + } + + openvpn_swprintf(cmdline, ncmdline, fmt, action, if_name, addr_static, addr); + + err = ExecCommand(argv0, cmdline, timeout); + +out: + free(cmdline); + return err; +} + +/** * Run command: wmic nicconfig (InterfaceIndex=$if_index) call $action ($data) * @param if_index "index of interface" * @param action e.g., "SetDNSDomain" @@ -1299,6 +1357,86 @@ } static DWORD +HandleWINSConfigMessage(const wins_cfg_message_t *msg, undo_lists_t *lists) +{ + DWORD err = 0; + wchar_t addr[16]; /* large enough to hold string representation of an ipv4 */ + int addr_len = msg->addr_len; + + /* sanity check */ + if (addr_len > _countof(msg->addr)) + { + addr_len = _countof(msg->addr); + } + + if (!msg->iface.name[0]) /* interface name 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); + if (err) + { + goto out; + } + free(RemoveListItem(&(*lists)[undo_wins], CmpWString, wide_name)); + } + + if (msg->header.type == msg_del_wins_cfg) + { + goto out; /* job done */ + } + + 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); + if (i == 0 && err) + { + goto out; + } + /* We do not check for duplicate addresses, so any error in adding + * additional addresses is ignored. + */ + } + + err = 0; + + if (addr_len > 0) + { + 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; + } + } + +out: + free(wide_name); + return err; +} + +static DWORD HandleEnableDHCPMessage(const enable_dhcp_message_t *dhcp) { DWORD err = 0; @@ -1487,6 +1625,7 @@ enable_dhcp_message_t dhcp; register_ring_buffers_message_t rrb; set_mtu_message_t mtu; + wins_cfg_message_t wins; } msg; ack_message_t ack = { .header = { @@ -1547,6 +1686,11 @@ ack.error_number = HandleDNSConfigMessage(&msg.dns, lists); break; + case msg_add_wins_cfg: + case msg_del_wins_cfg: + ack.error_number = HandleWINSConfigMessage(&msg.wins, lists); + break; + case msg_enable_dhcp: if (msg.header.size == sizeof(msg.dhcp)) { @@ -1608,6 +1752,10 @@ DeleteDNS(AF_INET6, item->data); break; + case undo_wins: + netsh_wins_cmd(L"delete", item->data, NULL); + break; + case undo_domain: SetDNSDomain(item->data, "", NULL); break;