From patchwork Wed Nov 20 17:42:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "mrbff (Code Review)" X-Patchwork-Id: 3949 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7000:1e84:b0:5d9:9f4c:3bc7 with SMTP id hq4csp156138mab; Wed, 20 Nov 2024 09:43:12 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCW2tr3RdMCkCuvXwU9dQ8JS1IB/Nfis9S75qGxFrXdPKMN0yV9lLuwGsJ9swegEIRkVuwTeizAiVt8=@openvpn.net X-Google-Smtp-Source: AGHT+IGqAMmi55Zx3/0mZLszY76GLQq+OBB6MQlRY0GoJa9sqXQf8qpCgiXhhKsSUvBk8uLQd/Dx X-Received: by 2002:a05:6602:134b:b0:82d:16fa:52dd with SMTP id ca18e2360f4ac-83eb5fb936dmr481814739f.7.1732124592108; Wed, 20 Nov 2024 09:43:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1732124592; cv=none; d=google.com; s=arc-20240605; b=KVBXlVQ4L1qVbYGnhudAhKQsvx9KX1uOAFbA8bJSwUkVdODqHMKDkRnvwgqjypftSe Jjw0OTGYTtrNtJQbaNtUAdDZG8FSP+W2smdHUvq7iThT+33OPEJX8pRnhjFGLFdBSqjG z42fvkjT5yic9PYduhUFEodFRjm0U9uJLbK0s5HqwecgFSx9pd3X+5JzNpOTxFOJmSOJ QC+ikAe6OElA9TtMT/Shqo9x84vvQAdJa5YkJIbGHdKY6fcv3z3UjSvgiOwdjsdgNtE7 MwXmj6f6trWIc3lR7qPZY3qI7uVnDGkF8GBVxEcqRRl7glF74la4+AOvQg7/NWLTFS+T e9ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=fjKRIH9xXawTlrVwL2G9qIP7D4HX2sFWLS7csD4o8ps=; fh=U7wEyxtwz2o5+UdevFSA47vNeG9knhWH0KV//QhD5a0=; b=HxLZd/JgSPL0XtClgvc++cbVfyrTixLvL7S2fRW5u/eksb3OKRFuf9ngEerJMtMliy 5eEEII+xJ33kDkY7IIJk9HyyKX2R/b9U3j29NeabNYxIRw6gg/C/O0nG5OTcVWoHukIc RsXuiwJTsTy/lisMnF5uAyiP+Jn1BqiMtxPYa/5q3l0N/7EIQHDjaZCJ3z3Mi5WsmzZI P/vmHigIQenkFISc1k5FT1K5kCEAy1YJdkmOTwnPWWyaITjmZA8I2aXLKzKlswY3X738 LKkvSyCNvas4gLdsex9Qq2lxDgxvuxg3GoGdtS5bTfK1ZcXca2G5t+CcSi9utOtrSu/v RPhw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=Bl3eMkpN; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Qr3B5kbk; dkim=neutral (body hash did not verify) header.i=@openvpn.net header.s=google header.b=EPnf7p0B; 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; dara=fail header.i=@openvpn.net Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 8926c6da1cb9f-4e1c1ffa7e3si328530173.144.2024.11.20.09.43.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Nov 2024 09:43:12 -0800 (PST) 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=Bl3eMkpN; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Qr3B5kbk; dkim=neutral (body hash did not verify) header.i=@openvpn.net header.s=google header.b=EPnf7p0B; 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; dara=fail header.i=@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 1tDojF-0001ql-6U; Wed, 20 Nov 2024 17:43:01 +0000 Received: from [172.30.29.66] (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 1tDojD-0001qS-Ew for openvpn-devel@lists.sourceforge.net; Wed, 20 Nov 2024 17:43: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=CBhmNFWf2NeyLp3q/2Mx5LNc8Qy/3JA3c+c8XXL+p8w=; b=Bl3eMkpNCrEOVMpBgnh8pxOSRp Cnw/SOhCC+B26Dx6SFlTvYrOTLx8f2R5YAnZSJTSHlWbUtDRVRpTW/81B5H7t8FLLEuitV4nBQEYx R+3aGS53x6dzOYMPEH25wD8bZ6YUs9Q1yKurndvyn9OJ0eFYgfG4vcRAmaJtyVRVZUmE=; 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=CBhmNFWf2NeyLp3q/2Mx5LNc8Qy/3JA3c+c8XXL+p8w=; b=Q r3B5kbkq1LWRBWJhk4XnCgKybkgP884l/b2agSx9NFZXM0erAVilnC1Lk4mHfhPSKCn+bu3ZW0HAw iSNoCCDbw4BHMoR09N5fZ1MQvl6GHNWcizH8ke8e69nL/jlJf6oVjjshTkPv5taobTJZM44NCMjeW aLxtHtWrARCrgsWo=; Received: from mail-wr1-f41.google.com ([209.85.221.41]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1tDoj6-0005dl-5s for openvpn-devel@lists.sourceforge.net; Wed, 20 Nov 2024 17:42:54 +0000 Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-382026ba43eso4308768f8f.1 for ; Wed, 20 Nov 2024 09:42:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvpn.net; s=google; t=1732124561; x=1732729361; darn=lists.sourceforge.net; 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=CBhmNFWf2NeyLp3q/2Mx5LNc8Qy/3JA3c+c8XXL+p8w=; b=EPnf7p0Bj5skA7foDVToJcaT6s98SoTAzoLzKzGhpn59YMnxt3j/XWa3Sw2hzq7Qcz rr6djgcwvsRcr6VHiF1hJS7usQ+TPjzokc95XmyQbqPpohKax6h4+M7kfY2NSH+f3GZF bvs5HfNu7f6DuludjJ43CqV/1npyTgTf4Zvz7tNcMNvS8Nwq6hwT+gnWxm4IE+L/BNQ0 zTWBNoZWLDOhn3Mhq6y1xyAYi5XvlepMh+3k+i2C/qIaiEHliN01ZGdJiozivMqbtpcA ajeYxyGJdW4z96TY2oHDrPLuJn7PPq7/lEpL8LF9dYwSfwRVRlN35pOzzYbUtUtmbzHL WoSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732124561; x=1732729361; 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=CBhmNFWf2NeyLp3q/2Mx5LNc8Qy/3JA3c+c8XXL+p8w=; b=HDbXsbGl2W5Gbv8YwIF7p4W6dwDLr7XnO1D330CqaruWmJXf+l1Ro8ou8ZaWY8cGM4 /yj9gY+/9ygrc1IhAYW3RX4SAplU2LBogvouOQJSdiQEpys27QZKMLq1kMPhn1SL0Fe7 sxLGfPlUvVFPaMJKT0MWcexwSHKASRl2WXui/KeH7e6vdmkBF55Q9Ie1zj9WkUfMZ/Bg aPsol0141d3BODW0hVyIQE24Vxv9YwJJyOCiYgjNeZBdEVFLl4wZv6y080mF0QlgpEFh sO+PQkBu82/wLIE23UnrqKiVkB/KiueWOgLxGlSC+XXcNgqgEqkRzIJbE+Ri3DPGDc4M z0+Q== X-Gm-Message-State: AOJu0YxLEmCbGGetwlFAypFtxZOBNd7rnhoqMvx8oa6tPpTbBR/0IdC9 8Nt7ZsNAYeNBQf/3EFUfDsTCqCj928Y7BYlstXQGa9u19/vr8Ev0LqNnUUjdiC0= X-Received: by 2002:a05:6000:154c:b0:382:4b9a:f500 with SMTP id ffacd0b85a97d-38254ae55a7mr2374873f8f.18.1732124560552; Wed, 20 Nov 2024 09:42:40 -0800 (PST) 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 ffacd0b85a97d-38254910796sm2671831f8f.47.2024.11.20.09.42.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Nov 2024 09:42:40 -0800 (PST) From: "mrbff (Code Review)" X-Google-Original-From: "mrbff (Code Review)" X-Gerrit-PatchSet: 1 Date: Wed, 20 Nov 2024 17:42:39 +0000 To: plaisthos , flichtenheld Auto-Submitted: auto-generated X-Gerrit-MessageType: newchange X-Gerrit-Change-Id: Ia45c99e6df7b3ad24020c10b8a9b3577984ecdc2 X-Gerrit-Change-Number: 810 X-Gerrit-Project: openvpn X-Gerrit-ChangeURL: X-Gerrit-Commit: 1ce3d243a1fb2c96126c0802b3983f8037554403 References: Message-ID: MIME-Version: 1.0 User-Agent: Gerrit/3.8.2 X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "util-spamd-1.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, plaisthos. Hello plaisthos, 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_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.221.41 listed in list.dnswl.org] 0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.221.41 listed in sa-trusted.bondedsender.org] 0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. [209.85.221.41 listed in bl.score.senderscore.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.221.41 listed in wl.mailspike.net] 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_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 T_KAM_HTML_FONT_INVALID Test for Invalidly Named or Formatted Colors in HTML X-Headers-End: 1tDoj6-0005dl-5s Subject: [Openvpn-devel] [M] Change in openvpn[master]: PUSH_UPDATE: Added update_option() function. 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: marco@mandelbit.com, arne-openvpn@rfc2549.org, 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?1816264275983610892?= X-GMAIL-MSGID: =?utf-8?q?1816264275983610892?= X-getmail-filter-classifier: gerrit message type newchange Attention is currently required from: flichtenheld, plaisthos. Hello plaisthos, flichtenheld, I'd like you to do a code review. Please visit http://gerrit.openvpn.net/c/openvpn/+/810?usp=email to review the following change. Change subject: PUSH_UPDATE: Added update_option() function. ...................................................................... PUSH_UPDATE: Added update_option() function. When the function receives an option to update, it first checks whether it has already received an option of the same type within the same update message. If it has already received it, it simply calls add_option(), otherwise it deletes all the values ​​already present regarding that option. Change-Id: Ia45c99e6df7b3ad24020c10b8a9b3577984ecdc2 Signed-off-by: Marco Baffo --- M src/openvpn/options.c 1 file changed, 216 insertions(+), 0 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/10/810/1 diff --git a/src/openvpn/options.c b/src/openvpn/options.c index 5b4419d..49bd242 100644 --- a/src/openvpn/options.c +++ b/src/openvpn/options.c @@ -5759,6 +5759,216 @@ err: msg(msglevel, "Error occurred trying to remove %s option", p[0]); } + +static void +update_option(struct context *c, + struct options *options, + char *p[], + bool is_inline, + const char *file, + int line, + const int level, + const int msglevel, + const unsigned int permission_mask, + unsigned int *option_types_found, + struct env_set *es, + unsigned int *update_options_found) +{ + const bool pull_mode = BOOL_CAST(permission_mask & OPT_P_PULL_MODE); + ASSERT(MAX_PARMS >= 7); + + if (streq(p[0], "route") && p[1] && !p[5]) + { + if (!(*update_options_found & OPT_P_U_ROUTE)) + { + VERIFY_PERMISSION(OPT_P_ROUTE); + rol_check_alloc(options); + if (pull_mode) + { + if (!ip_or_dns_addr_safe(p[1], options->allow_pull_fqdn) && !is_special_addr(p[1])) /* FQDN -- may be DNS name */ + { + msg(msglevel, "route parameter network/IP '%s' must be a valid address", p[1]); + goto err; + } + if (p[2] && !ip_addr_dotted_quad_safe(p[2])) /* FQDN -- must be IP address */ + { + msg(msglevel, "route parameter netmask '%s' must be an IP address", p[2]); + goto err; + } + if (p[3] && !ip_or_dns_addr_safe(p[3], options->allow_pull_fqdn) && !is_special_addr(p[3])) /* FQDN -- may be DNS name */ + { + msg(msglevel, "route parameter gateway '%s' must be a valid address", p[3]); + goto err; + } + } + if (c->c1.route_list) + { + destroy_routes_v4(c->c1.route_list, c->c1.tuntap, + ROUTE_OPTION_FLAGS(&c->options), + es, &c->net_ctx, options); + } + *update_options_found |= OPT_P_U_ROUTE; + } + } + else if (streq(p[0], "route-ipv6") && p[1] && !p[4]) + { + if (!(*update_options_found & OPT_P_U_ROUTE6)) + { + VERIFY_PERMISSION(OPT_P_ROUTE); + rol6_check_alloc(options); + if (pull_mode) + { + if (!ipv6_addr_safe_hexplusbits(p[1])) + { + msg(msglevel, "route-ipv6 parameter network/IP '%s' must be a valid address", p[1]); + goto err; + } + if (p[2] && !ipv6_addr_safe(p[2])) + { + msg(msglevel, "route-ipv6 parameter gateway '%s' must be a valid address", p[2]); + goto err; + } + /* p[3] is metric, if present */ + } + if (c->c1.route_ipv6_list) + { + destroy_routes_v6(c->c1.route_ipv6_list, c->c1.tuntap, + ROUTE_OPTION_FLAGS(&c->options), + es, &c->net_ctx, options); + } + *update_options_found |= OPT_P_U_ROUTE6; + } + } + else if (streq(p[0], "redirect-gateway") || streq(p[0], "redirect-private")) + { + if (!(*update_options_found & OPT_P_U_REDIR_GATEWAY)) + { + VERIFY_PERMISSION(OPT_P_ROUTE); + if (options->routes) + { + options->routes->flags = 0; + } + if (options->routes_ipv6) + { + options->routes_ipv6->flags = 0; + } + *update_options_found |= OPT_P_U_REDIR_GATEWAY; + } + } + else if (streq(p[0], "dns") && p[1]) + { + if (!(*update_options_found & OPT_P_U_DNS)) + { + VERIFY_PERMISSION(OPT_P_DHCPDNS); + if (streq(p[1], "server") && p[2] && p[3] && p[4]) + { + long priority; + if (!dns_server_priority_parse(&priority, p[2], pull_mode)) + { + msg(msglevel, "--dns server: invalid priority value '%s'", p[2]); + goto err; + } + + struct dns_server server; + CLEAR(server); + if (streq(p[3], "address") && p[4]) + { + for (int i = 4; p[i]; ++i) + { + if (!dns_server_addr_parse(&server, p[i])) + { + msg(msglevel, "--dns server %ld: malformed address or maximum exceeded '%s'", priority, p[i]); + goto err; + } + } + } + else if (streq(p[3], "dnssec") && !p[5]) + { + if (!streq(p[4], "yes") && !streq(p[4], "no") && !streq(p[4], "optional")) + { + msg(msglevel, "--dns server %ld: malformed dnssec value '%s'", priority, p[4]); + goto err; + } + } + else if (streq(p[3], "transport") && !p[5]) + { + if (!streq(p[4], "plain") && !streq(p[4], "DoH") && !streq(p[4], "DoT")) + { + msg(msglevel, "--dns server %ld: malformed transport value '%s'", priority, p[4]); + goto err; + } + } + else if (!streq(p[3], "resolve-domains") + && !(streq(p[3], "sni") && !p[5])) + { + msg(msglevel, "--dns server %ld: unknown option type '%s' or missing or unknown parameter", priority, p[3]); + goto err; + } + } + else if (!(streq(p[1], "search-domains") && p[2])) + { + msg(msglevel, "--dns: unknown option type '%s' or missing or unknown parameter", p[1]); + goto err; + } + + gc_free(&options->dns_options.gc); + CLEAR(options->dns_options); + *update_options_found |= OPT_P_U_DNS; + } + } +#if defined(_WIN32) || defined(TARGET_ANDROID) + else if (streq(p[0], "dhcp-option") && p[1] && !p[3]) + { + if (!(*update_options_found & OPT_P_U_DHCP)) + { + struct tuntap_options *o = &options->tuntap_options; + VERIFY_PERMISSION(OPT_P_DHCPDNS); + + o->domain = NULL; + o->netbios_scope = NULL; + o->netbios_node_type = 0; + o->dns6_len = 0; + CLEAR(o->dns6); + o->dns_len = 0; + CLEAR(o->dns); + o->wins_len = 0; + CLEAR(o->wins); + o->ntp_len = 0; + CLEAR(o->ntp); + o->nbdd_len = 0; + CLEAR(o->nbdd); + while (o->domain_search_list_len-- > 0) + { + o->domain_search_list[o->domain_search_list_len] = NULL; + } + o->disable_nbt = 0; + o->dhcp_options = 0; +#if defined(TARGET_ANDROID) + o->http_proxy_port = 0; + o->http_proxy = NULL; +#endif + *update_options_found |= OPT_P_U_DHCP; + } + } +#else /* if defined(_WIN32) || defined(TARGET_ANDROID) */ + else if (streq(p[0], "dhcp-option") && p[1] && !p[3]) + { + if (!(*update_options_found & OPT_P_U_DHCP)) + { + VERIFY_PERMISSION(OPT_P_DHCPDNS); + delete_all_dhcp_fo(options, &es->list); + *update_options_found |= OPT_P_U_DHCP; + } + } +#endif /* if defined(_WIN32) || defined(TARGET_ANDROID) */ + add_option(options, p, is_inline, file, line, + level, msglevel, permission_mask, + option_types_found, es); + return; +err: + msg(msglevel, "Error occurred trying to update %s option", p[0]); +} + bool apply_push_options(struct context *c, struct options *options, @@ -5772,6 +5982,7 @@ int line_num = 0; const char *file = "[PUSH-OPTIONS]"; const int msglevel = D_PUSH_ERRORS|M_OPTERR; + unsigned int update_options_found = 0; while (buf_parse(buf, ',', line, sizeof(line))) { @@ -5797,6 +6008,11 @@ remove_option(c, options, p, false, file, line_num, msglevel, permission_mask, option_types_found, es); } + else + { + update_option(c, options, p, false, file, line_num, 0, msglevel, + permission_mask, option_types_found, es, &update_options_found); + } } } return true;