From patchwork Fri Jul 28 13:18:10 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: 3307 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7301:3787:b0:d7:3b0f:3938 with SMTP id jw7csp642403dyb; Fri, 28 Jul 2023 07:54:57 -0700 (PDT) X-Google-Smtp-Source: APBJJlG9H/d0F2d7kbG3028+vKjOUbVV45ClXsAvx4pQGmt8Yp1vUQHbNK6XPKa+Vim1buRtAk0y X-Received: by 2002:a05:6a21:35c8:b0:133:bf9a:dd16 with SMTP id ba8-20020a056a2135c800b00133bf9add16mr1541765pzc.35.1690556097195; Fri, 28 Jul 2023 07:54:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690556097; cv=none; d=google.com; s=arc-20160816; b=RA3FW4O6i33SAea+y/zQGcaYYr9aGB/1eKMJ1k7WcBretK/3T19X0CqFasNFsxfULj 3LZnSeXWoafWJz17xE/uKlDIW/29nS4FV1clm475EEwqLVQJPsL23WC+GxQbI4fVRS0x fOQJn8IPeIcXq58e2nn22fauD3RgdxbEf1vy111o8Bxu9RtPP0WGnMR0Dv8ohM1hV3/V 2aa1Jvu2VGdddRnMc4OH76bh3ndzKx35QyqvZkLPfWt/fQ+/WgORxEb8rBhQVINS4Gf5 aarLQgL29JHQLokwk0gSjeo+J9qV9ALQa8AUQK9HJKdeR/hcKHYj+HXk/FpC+9VOJXmX Bkbg== 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:auto-submitted:to:date:from :dkim-signature:dkim-signature:dkim-signature; bh=fmWDUz5mFO6DCihIPorhNwTMNGfS3SKWfV5Gf6aihVI=; fh=BDiL1ogXi4wq0Z0qWJ1rMrFNnGvScO0tFJqWoAnia70=; b=W2YezNrmNNdElWSnH4zqvczab5J3DdacAeQ6OL3kPZ60kJ5i8V4tch7mduhASLiB+S 2BVC6AeN7WPvtbCde79LFFAmQ2WgWN6E5Ct9ephbyewEGhxLnnLjrbs6gfxuCLYk/Rda 8LdNmnSWbzdK835A2/+KpgqyXBl1nPXylvIMtcVGXnTvyTyPDBde0+ASSbWDhZiiei0P oDGrBSJ6Mk2huRW6bNpLxUDhxdNq9W9O6QdHV1oY1K+D52i1PCLNDtaJTlxc8SISWsld 36Tp1C+cyxIBrcP7ge7NtPMdTuEONYxGl1daX/qI4dI46QZRKPRJv1cM1M24yz8zpZU1 W/8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=iNGFy1Ad; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=hcgc+Vhx; dkim=neutral (body hash did not verify) header.i=@openvpn.net header.s=google header.b=bBGC5O4I; 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 z123-20020a633381000000b00563f2ac6eabsi3109427pgz.92.2023.07.28.07.54.56 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Jul 2023 07:54:57 -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=iNGFy1Ad; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=hcgc+Vhx; dkim=neutral (body hash did not verify) header.i=@openvpn.net header.s=google header.b=bBGC5O4I; 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-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1qPOqw-0001wi-3S; Fri, 28 Jul 2023 14:54:02 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1qPOqt-0001wS-Me for openvpn-devel@lists.sourceforge.net; Fri, 28 Jul 2023 14:54:00 +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: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:In-Reply-To:List-Help: List-Subscribe:List-Post:List-Owner:List-Archive; bh=xJPosJlGgeE6jYYifKejxoJPiRaJOA0KLWspsMzI10k=; b=iNGFy1AddJsFGG9GDOKBOnaaAD WDm+28bh+wTtrqIybxOv26kzesswaESorZr9Ln3UG1tJmHKkALdWZZFNAkjjO9eDoovTEM4qevmxT n8jFFNY/EZUc1mL2HUVMeifzoBaz12/qGTFWAoMj72taHVycNbTOIbqRnqItcsezzelk=; 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: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:In-Reply-To:List-Help:List-Subscribe:List-Post: List-Owner:List-Archive; bh=xJPosJlGgeE6jYYifKejxoJPiRaJOA0KLWspsMzI10k=; b=h cgc+VhxW+VK+RCH6E8sQuGunmh0ooWnadlSj/N80Map7PKgNtT35qZwtRj83R/jl6MWyUpkC3d+cz yhijV6oeM10WhIE0MhxfrEZdOCBkkMmsuSqR7j40YOVIBWLnfE7lOFyqCFiAVClkg8rYB7pxXlgWp flZd6Mv9Jk4+1+vA=; Received: from mail-wm1-f43.google.com ([209.85.128.43]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1qPOqq-005bOq-V7 for openvpn-devel@lists.sourceforge.net; Fri, 28 Jul 2023 14:54:00 +0000 Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-3fbf1b82d9cso22247995e9.2 for ; Fri, 28 Jul 2023 07:53:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvpn.net; s=google; t=1690556030; x=1691160830; h=user-agent:content-disposition:content-transfer-encoding :mime-version:message-id:reply-to:references:subject :list-unsubscribe:list-id:auto-submitted:cc:to:date:from:from:to:cc :subject:date:message-id:reply-to; bh=xJPosJlGgeE6jYYifKejxoJPiRaJOA0KLWspsMzI10k=; b=bBGC5O4IkZjLC8TVL0LDMfWjcdju//08/8FUvTJ0Dx/GYiDSXExb7aTk0cOe3Kza2O eTBkzkGqpG8mxsjGTuux7Pkaj4Scyj/wjdCdhV1p0v3zyElEKod30veOzA33jvaJErsO Lp1d4A2v1yOGLqNxuYNQdOgzmZHp15BtrbESPRraqA8anmMTJy/32hwlKUG1bSCEpW70 fveC81LkHCJrSVZuDC25jByzVg29lp1wBBZ4ildxjgAb+c6mgAKF1l95UlSan6KyY3Fq mKLf8tqQOkX2s+gkwYWqCllyjF88GdQDe8UsWE6bThXOVRkr8bUj/j03dQW3EN1CzDzN ezFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690556030; x=1691160830; h=user-agent:content-disposition:content-transfer-encoding :mime-version:message-id:reply-to:references: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=xJPosJlGgeE6jYYifKejxoJPiRaJOA0KLWspsMzI10k=; b=B8duZZ0LjB4Xd4pnLcJscmTJ1cpjPvfaojha6R/RG/M8GQyah/z2Jb1CR3hl4If4bx XZrcTR6Nm9L5hJkZMAMgJ5VSavhvqobtEbO/JFB1m9iOgQoKC+AEWganN4EXPiZdch9W R2dVx42WJIQxogb4nyQgecdPQBZdWmZigmmmtRJNPvEb6XVxpbO+RDuq5KJQWwMiSBwj RNvk87wPCA0IbuZbJWezrlCGoceGll5IfE/BP2ObBxpSmmDY73RYlzGkyCtmz045py8z 0jrwtsY0Ov5dN6whfZ5Wrulzk2ucZAA3L8YEBCerQ4Sw2lUWtMgNnFipLvCs1ZGKaeP+ YJFA== X-Gm-Message-State: ABy/qLb3fmAESvszKVSCYKViDrYnK6JC0RCJHVBJ9/vzN+MGaQsUq2B9 6PpTcgQ1zIDzJERGAQp5awiOqT/n3hLe+8qz8hU= X-Received: by 2002:a05:600c:2194:b0:3fd:d763:4499 with SMTP id e20-20020a05600c219400b003fdd7634499mr1661950wme.36.1690550291162; Fri, 28 Jul 2023 06:18:11 -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 p3-20020a1c7403000000b003fbc9d178a8sm6968986wmc.4.2023.07.28.06.18.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Jul 2023 06:18:10 -0700 (PDT) From: "stipa (Code Review)" X-Google-Original-From: "stipa (Code Review)" X-Gerrit-PatchSet: 1 Date: Fri, 28 Jul 2023 13:18:10 +0000 To: flichtenheld Auto-Submitted: auto-generated X-Gerrit-MessageType: newchange X-Gerrit-Change-Id: I47c22dcb728011dcedaae47cd03a57219e9c7607 X-Gerrit-Change-Number: 321 X-Gerrit-Project: openvpn X-Gerrit-ChangeURL: X-Gerrit-Commit: 43af15708f8a3ab3417f39aebd52cdf09534dc0d References: Message-ID: <8de2c3f8ee1c48773bb81e5a4b00ad193a75499b-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: flichtenheld. Hello flichtenheld, I'd like you to do a code review. 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.128.43 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.128.43 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_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_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.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: 1qPOqq-005bOq-V7 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, openvpn-devel@lists.sourceforge.net, frank@lichtenheld.com 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?1772676550200988807?= Attention is currently required from: flichtenheld. Hello flichtenheld, I'd like you to do a code review. Please visit http://gerrit.openvpn.net/c/openvpn/+/321?usp=email to review the following change. 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, 240 insertions(+), 1 deletion(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/21/321/1 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 af959bb..1f2539d 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..6c54e62 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" or "add" + * @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; + bool add = wcscmp(action, L"set") == 0; + const wchar_t *addr_static = add ? L"static" : L""; + + if (!addr) + { + if (!add) + { + 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(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" @@ -1129,6 +1187,20 @@ return err; } +/* Delete all WINS servers for an interface */ +static DWORD +DeleteWINS(wchar_t *if_name) +{ + return netsh_wins_cmd(L"delete", if_name, NULL); +} + +/* Add WINS server to an interface */ +static DWORD +AddWINS(wchar_t *if_name, wchar_t *addr) +{ + return netsh_wins_cmd(L"set", if_name, addr); +} + /* Delete all IPv4 or IPv6 dns servers for an interface */ static DWORD DeleteDNS(short family, wchar_t *if_name) @@ -1299,6 +1371,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 = DeleteWINS(wide_name); + 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 = AddWINS(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 (msg->addr_len > 0) + { + wchar_t *tmp_name = _wcsdup(wide_name); + if (!tmp_name || AddListItem(&(*lists)[undo_wins], tmp_name)) + { + free(tmp_name); + DeleteWINS(wide_name); + 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 +1639,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 +1700,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 +1766,10 @@ DeleteDNS(AF_INET6, item->data); break; + case undo_wins: + DeleteWINS(item->data); + break; + case undo_domain: SetDNSDomain(item->data, "", NULL); break;