project/luci.git
2 years agoluci-app-smartdns: update to 1.2022.38 6018/head
Nick Peng [Fri, 14 Oct 2022 09:46:16 +0000 (17:46 +0800)]
luci-app-smartdns: update to 1.2022.38

Signed-off-by: Nick Peng <pymumu@gmail.com>
2 years agoMerge pull request #6017 from jcassette/issue-4926-22.03
Florian Eckert [Wed, 12 Oct 2022 11:57:16 +0000 (13:57 +0200)]
Merge pull request #6017 from jcassette/issue-4926-22.03

[22.03] luci-app-ddns: fix creation of custom service (fix #4926)

2 years agoluci-app-ddns: fix creation of custom service (fix #4926) 6017/head
Julien Cassette [Sun, 2 Oct 2022 18:14:19 +0000 (20:14 +0200)]
luci-app-ddns: fix creation of custom service (fix #4926)

The `service_name` option must be empty for custom services,
otherwise an error is raised in `dynamic_dns_updater.sh`.

Signed-off-by: Julien Cassette <julien.cassette@gmail.com>
(cherry picked from commit 85ff9db2bffd3d2bf119300d9297f1b524608e1b)

2 years agoMerge pull request #6005 from stangri/openwrt-22.03-luci-app-https-dns-proxy
Stan Grishin [Wed, 5 Oct 2022 06:41:19 +0000 (23:41 -0700)]
Merge pull request #6005 from stangri/openwrt-22.03-luci-app-https-dns-proxy

[22.03] luci-app-https-dns-proxy: update to 2021-11-22-7 (settings for Canary…

2 years agoluci-app-https-dns-proxy: update to 2021-11-22-7 (settings for Canary Domains) 6005/head
Stan Grishin [Tue, 4 Oct 2022 22:23:28 +0000 (22:23 +0000)]
luci-app-https-dns-proxy: update to 2021-11-22-7 (settings for Canary Domains)

Signed-off-by: Stan Grishin <stangri@melmac.ca>
(cherry picked from commit 060e671c82f7d9abf3e581347a5162ef8b16f63c)

2 years agotreewide: Backport and sync translations
Hannu Nyman [Tue, 4 Oct 2022 20:02:08 +0000 (23:02 +0300)]
treewide: Backport and sync translations

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-app-opkg: relax dependency parsing
Jo-Philipp Wich [Fri, 30 Sep 2022 07:59:39 +0000 (09:59 +0200)]
luci-app-opkg: relax dependency parsing

Align depdendency parse logic with opkg to properly process certain
malformed dependency specifications. In particular do not require a
depdendency specification to end after the closing paren of a version
constraint and perform non-greedy matching in order to extract the
first version constraint only.

Fixes: #5997
Ref: https://forum.openwrt.org/t/x/138328
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 84ba6a5c36072f74721d535104735757b005c8d6)

2 years agoluci-mod-system: sshkeys.js: prevent XSS through pubkey comments
Jo-Philipp Wich [Wed, 21 Sep 2022 12:47:41 +0000 (14:47 +0200)]
luci-mod-system: sshkeys.js: prevent XSS through pubkey comments

Ensure to not display public key comments verbatim in order to prevent
injection of markup.

Reported-by: Eric McDonald <ericmcdonald@protonmail.com>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 944b55738e7f9685865d5298248b7fbd7380749e)

2 years agoluci-app-adblock: sync with adblock 4.1.4
Dirk Brenken [Sat, 10 Sep 2022 17:01:46 +0000 (19:01 +0200)]
luci-app-adblock: sync with adblock 4.1.4

* removed the unused 'adb_dnsinotify' parameter
* removed the 'adb_maxqueue' parameter,
  the queue size will be automatically set by the number of cpu cores

Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit b3e1f956e60244200a1630964e83d33217cf0091)

2 years agoluci-app-upnp: make nftables compatible
Jo-Philipp Wich [Tue, 6 Sep 2022 21:51:19 +0000 (23:51 +0200)]
luci-app-upnp: make nftables compatible

Make luci.upnp rpcd backend plugin compatible with miniupnpd-nftables.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 82eec98944714c2b61f6e54291bc8f22983bb122)

2 years agotimezone data: update to 2022c
Hannu Nyman [Fri, 2 Sep 2022 21:29:20 +0000 (00:29 +0300)]
timezone data: update to 2022c

Update timezone data to 2022c.

http://mm.icann.org/pipermail/tz-announce/2022-August/000071.html
http://mm.icann.org/pipermail/tz-announce/2022-August/000072.html
* Iran no longer observes DST after 2022.
* Rename Europe/Kiev to Europe/Kyiv.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 10bcb228a7fc02a8e9ecb1ff584fd63b77a55afd)

2 years agoMerge pull request #5955 from brvphoenix/backport
Florian Eckert [Fri, 2 Sep 2022 11:22:24 +0000 (13:22 +0200)]
Merge pull request #5955 from brvphoenix/backport

[22.03] luci-app-frpc: backport

2 years agoluci-app-frpc: fix service status bar style 5955/head
ZiMing Mo [Sat, 30 Apr 2022 07:55:40 +0000 (15:55 +0800)]
luci-app-frpc: fix service status bar style

mod the service status bar to use normaly 'cbi-section' class style.

Signed-off-by: ZiMing Mo <msylgj@immortalwrt.org>
[squash commits, add balnk line between commit subject and message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit fbd3a40c3e364c91a9effc1193456c8b3303b880)

2 years agoluci-app-frpc: sync translations - i18n
Van Waholtz [Thu, 24 Mar 2022 03:40:04 +0000 (11:40 +0800)]
luci-app-frpc: sync translations - i18n

Signed-off-by: Van Waholtz <vanwaholtz@gmail.com>
2 years agoluci-mod-network: Offer ft-over-air by default for 802.11r
Hannu Nyman [Thu, 1 Sep 2022 15:08:56 +0000 (18:08 +0300)]
luci-mod-network: Offer ft-over-air by default for 802.11r

OpenWrt commit 2984a0420 (0588b124e in 22.03) changed the default 802.11r
Fast Transition method to be ft-over-air instead of ft-over-ds.

Offer ft-over-air as the first item in the drop-down list, so that
it gets selected by default when 802.11r option is enabled.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 2c3c7f5c50efd71bf87c068359cb0110a513186f)

2 years agoluci-app-frpc: add settings for log
Van Waholtz [Thu, 24 Mar 2022 03:40:04 +0000 (11:40 +0800)]
luci-app-frpc: add settings for log

Signed-off-by: Van Waholtz <vanwaholtz@gmail.com>
(cherry picked from commit 0dbe3198bfe1feda71efddb62d6c198a69e0dcc1)

2 years agoluci-app-frpc: Set the disable_log_color option to false by default
Ren Zongjia [Fri, 24 Dec 2021 07:14:14 +0000 (15:14 +0800)]
luci-app-frpc: Set the disable_log_color option to false by default

Signed-off-by: Ren Zongjia <acooler15@foxmail.com>
(cherry picked from commit 9f831e75e5764eb42a16b3ae5851b7524e1341c1)

2 years agoluci-app-frpc: use anonymous sections
Van Waholtz [Fri, 28 Jan 2022 11:32:20 +0000 (19:32 +0800)]
luci-app-frpc: use anonymous sections

1. Use anonymous sections and add name options to specify the proxy name
2. Add server name field for visitor mode

Signed-off-by: Van Waholtz <vanwaholtz@gmail.com>
(cherry picked from commit 973a4b5e679d22988671f7019103f0aa0833d4c6)

2 years agotreewide: Backport translations - i18n
Hannu Nyman [Sun, 28 Aug 2022 16:04:48 +0000 (19:04 +0300)]
treewide: Backport translations - i18n

Backport from master, sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-base: use different cookie names for HTTP and HTTPS
Jo-Philipp Wich [Fri, 8 Jul 2022 13:38:53 +0000 (15:38 +0200)]
luci-base: use different cookie names for HTTP and HTTPS

Since HTTP cookies may not overwrite HTTPS ("secure") ones, users are
frequently unable to log into LuCI when a stale, "secure" `sysauth` cookie
is still present in the browser as it commonly happens after e.g. a
sysupgrade operation or when frequently jumping between HTTP and HTTPS
access.

Rework the dispatcher to set either a `sysauth_http` or `sysauth_https`
cookie, depending on the HTTPS state of the server connection and accept
both cookie names when verifying the session ID.

This allows users to log into a HTTP-only LuCI instance while a stale,
"secure" HTTPS cookie is still present.

Requires commit 2b0539ef9d ("lucihttp: update to latest Git HEAD") to
function properly.

Fixes: #5843
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit e1932592c3e0804eec5d85fee989ceeed1e1050a)

2 years agoMerge pull request #5946 from stangri/openwrt-22.03-luci-app-simple-adblock-luci...
Stan Grishin [Wed, 24 Aug 2022 00:52:37 +0000 (03:52 +0300)]
Merge pull request #5946 from stangri/openwrt-22.03-luci-app-simple-adblock-luci-app-simple-adblock

[22.03] luci-app-simple-adblock: update to 1.9.0-1

2 years agoluci-app-simple-adblock: update to 1.9.0-1 5946/head
Stan Grishin [Fri, 19 Aug 2022 21:49:35 +0000 (21:49 +0000)]
luci-app-simple-adblock: update to 1.9.0-1

* Support for (upcoming) dnsmasq nftset

Depends on https://github.com/openwrt/packages/pull/19212

Signed-off-by: Stan Grishin <stangri@melmac.ca>
(cherry picked from commit 9b71a35428e0ddbf0347c8ba62da2f4168ddb21b)

2 years agoluci-app-travelmate: sync with travelmate 2.1.0
Dirk Brenken [Sat, 20 Aug 2022 16:56:02 +0000 (18:56 +0200)]
luci-app-travelmate: sync with travelmate 2.1.0

* expose new options to LuCI
* cosmetics

Signed-off-by: Dirk Brenken dev@brenken.org
Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit bcb046c488aad54b13ff20a93155ce3c0d0fd9af)

2 years agoMerge pull request #5921 from stangri/openwrt-22.03-luci-app-advanced-reboot
Stan Grishin [Tue, 2 Aug 2022 19:05:16 +0000 (13:05 -0600)]
Merge pull request #5921 from stangri/openwrt-22.03-luci-app-advanced-reboot

[22.03] luci-app-advanced-reboot: Fix Linksys EA4500 descriptor file

2 years agoluci-app-advanced-reboot: Fix Linksys EA4500 descriptor file 5921/head
Andy Bartolo [Fri, 15 Jul 2022 00:57:11 +0000 (18:57 -0600)]
luci-app-advanced-reboot: Fix Linksys EA4500 descriptor file

Signed-off-by: Andy Bartolo <andrew.bartolo@gmail.com>
(cherry picked from commit 5d7446e1be05baef6463c29dc00587e5952db9fc)

2 years agoluci-proto-wireguard: handle multiple peers in imported configuration
Jo-Philipp Wich [Mon, 1 Aug 2022 11:00:31 +0000 (13:00 +0200)]
luci-proto-wireguard: handle multiple peers in imported configuration

When importing a fully configuration, import all peer entries from it
instead of non-deterministically merging all peer keys into one.

When importing a remote configuration as peer, only use the setting from
the peer section matching our local interface pubkey.

Also relabel the `Import peer configuration` button to
`Import configuration as peer` in order to be more explicit.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 94bfa33452ad7db683e9f47ea9921e92b5175558)

2 years agoluci-base: sys.lua: make timeout optional when parsing conntrack entries
Jo-Philipp Wich [Mon, 1 Aug 2022 09:57:03 +0000 (11:57 +0200)]
luci-base: sys.lua: make timeout optional when parsing conntrack entries

Fixes: #5909
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit abd9125fbf5e2fadc0c5ae293496680df08e6e1b)

2 years agoluci-proto-wireguard: configuration import improvements
Jo-Philipp Wich [Sat, 23 Jul 2022 18:24:09 +0000 (20:24 +0200)]
luci-proto-wireguard: configuration import improvements

 - Reword texts in import dialogs for better clarity, use different
   descriptions for full import and peer import

 - Allow importing configurations without [Peer] section

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 2ae74b909b4acf35b72142d913f9e61090febf6d)

2 years agoluci-proto-wireguard: gracefully deal with missing uci configs
Jo-Philipp Wich [Mon, 20 Jun 2022 22:07:04 +0000 (00:07 +0200)]
luci-proto-wireguard: gracefully deal with missing uci configs

The /etc/config/ddns in particular might not be present on the system,
don't fail if it is absent.

Fixes: #5838
Fixes: 9ba20645b0 ("luci-proto-wireguard: rewrite protocol handler")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 340183786e5441197141efaf7d8cf0e682047bfe)

2 years agoluci-proto-wireguard: grant uci read access to system and ddns config
Jo-Philipp Wich [Mon, 20 Jun 2022 21:56:58 +0000 (23:56 +0200)]
luci-proto-wireguard: grant uci read access to system and ddns config

The configuration export requires access to /e/c/system and /e/c/ddns for
external hostname hints.

Fixes: #5838
Fixes: 9ba20645b0 ("luci-proto-wireguard: rewrite protocol handler")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 4769bf11aa5d33cda4785faec8046c67cb51a606)

2 years agoluci-proto-wireguard: rewrite protocol handler
Jo-Philipp Wich [Tue, 17 May 2022 13:45:20 +0000 (15:45 +0200)]
luci-proto-wireguard: rewrite protocol handler

This commit rewrites large chunks of the WireGuard protocol handler in order
to simplify the process of importing and exporting configuration. The major
changes are:

1) The wireguard interface configuration tab (General Settings) gained an
   import assistant which allows dragging or pasting a native WireGuard
   configuration file in order to import required settrings into uci

2) The peer configuration tab gained a similar import assistant which allows
   importing the settings for a WireGuard peer from an existing native
   WireGuard configuration file

3) The QR code export feature has been rewritten to make the resulting codes
   actually useful for importing into a WireGuard client application.
   Additionally the plaintext native WireGuard configuration is displayed
   to allow copy-pasting it for use on a Linux or OS X system

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 9ba20645b01aacb391ab8c69f57b3da60db8f630)

2 years agoluci-proto-wireguard: add generate psk button
Lukas Voegl [Fri, 18 Mar 2022 13:47:44 +0000 (14:47 +0100)]
luci-proto-wireguard: add generate psk button

Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
(cherry picked from commit b6925a12277224b4a02dc1febb58de8d4d6fdbe0)

2 years agoluci-base: form.js: save parent map on opening nested modal map
Jo-Philipp Wich [Mon, 16 May 2022 11:10:20 +0000 (13:10 +0200)]
luci-base: form.js: save parent map on opening nested modal map

Before opening (rendering) a nested modal map, make sure to save the parent
modal map in order to persist any structural uci changes, such as newly added
anonymous sections to prevent the nested map from operating on stale values
or ephemeral config section IDs.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 3be479446bdeaf446468c5e7ac3b9bc49da023da)

2 years agoluci-base: form.js: handle SectionValue objects in GridSection modals
Jo-Philipp Wich [Mon, 16 May 2022 09:55:11 +0000 (11:55 +0200)]
luci-base: form.js: handle SectionValue objects in GridSection modals

The existing logic for cloning section options into the modal form section
container did not properly handle SectionValue objects. Introduce a new
`cloneOptions()` helper to recursively traverse and properly clowning
such nested sections.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f24606b1ffd59cc82c7251243a18f4cfdc4f78d5)

2 years agoluci-base: form.js: reset parent maps on returning from nested section modal
Jo-Philipp Wich [Mon, 16 May 2022 09:49:28 +0000 (11:49 +0200)]
luci-base: form.js: reset parent maps on returning from nested section modal

The nested section modal might have changed values also covered/displayed by
the parent map, so ensure to reload all parent maps in the current modal
view stack to ensure that no stale values are shown on return.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 0c81e25faa9ff9cb6edec477d56145d70be87cf3)

2 years agoluci-base: form.js: rework stacked modal CBI map logic
Jo-Philipp Wich [Thu, 5 May 2022 21:07:13 +0000 (23:07 +0200)]
luci-base: form.js: rework stacked modal CBI map logic

Only stack a new modal CBI map on top of the currently displayed modal one
if the related map or section differs. This prevents misbehavior when
switching the protocol of interfaces.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f2fa59e89af3d4bdae9b12471184425b307ad5d6)

2 years agoluci-app-attendedsysupgrade: s/res/response/
Paul Spooren [Fri, 29 Jul 2022 14:16:48 +0000 (16:16 +0200)]
luci-app-attendedsysupgrade: s/res/response/

The variable was party called `res` or `response`, always call it
`response` from now on. This also solves a typo where
`data.request_hash` is never set to a correct value.

Signed-off-by: Paul Spooren <mail@aparcar.org>
(cherry picked from commit af23d0dfc3176511ada5fb3d081f1b0a287a11bc)

2 years agoluci-app-attendedsysupgrade: request filesystem
Paul Spooren [Mon, 21 Mar 2022 11:44:11 +0000 (11:44 +0000)]
luci-app-attendedsysupgrade: request filesystem

It is possible to request a specific filesystem so no other filesystems
are used. This speeds up the build process and may prevent failures in
edge cases.

A recent edge case is installing more packages than ext4 can handle
while squashfs works fine due to compression.

Since  `rootfs_type` is now always available via `procd`, remove the
hack of reading `/proc/mounts`.

Signed-off-by: Paul Spooren <mail@aparcar.org>
(cherry picked from commit 8936e3c386e77c2dc090dbbd5a87907196f9149b)

2 years agoluci-app-attendedsysugprade: allow to reinstall image
Paul Spooren [Tue, 7 Jun 2022 12:23:59 +0000 (14:23 +0200)]
luci-app-attendedsysugprade: allow to reinstall image

Now it's possible to re-install the currently running version in
advanced mode. This can be useful when installing packages via `opkg`
and then requesting the firmware with the packages stored in squashfs.

FIXES: https://github.com/openwrt/luci/issues/5809

Signed-off-by: Paul Spooren <mail@aparcar.org>
(cherry picked from commit fd72e1c23ef1569fd8f8ab71bdcb4a94f802435a)

2 years agoluci-app-attendedsysupgrade: report used client version
Paul Spooren [Thu, 28 Jul 2022 20:43:46 +0000 (22:43 +0200)]
luci-app-attendedsysupgrade: report used client version

This allows the backend to track popular app versions and drop support for
unsed version in case of API changes.

Specifically the app sends a version string in the format "luci/GIT_HASH" to
the backend.

Signed-off-by: Paul Spooren <mail@aparcar.org>
(cherry picked from commit f368faf6789a43c2e1a26b721f8115473672eb29)

2 years agoluci-app-watchcat: add support for run_script mode
John Kohl [Sun, 5 Jun 2022 01:16:27 +0000 (21:16 -0400)]
luci-app-watchcat: add support for run_script mode

Signed-off-by: John Kohl <jtk.git@bostonpog.org>
(cherry picked from commit ae5677b8c24b7be5cbca5dbef00178b88a1161ac)

2 years agoluci-app-watchcat: add support for IP family selection
John Kohl [Sun, 5 Jun 2022 01:13:56 +0000 (21:13 -0400)]
luci-app-watchcat: add support for IP family selection

Signed-off-by: John Kohl <jtk.git@bostonpog.org>
(cherry picked from commit 20fdd8dd9d0c90c9fb157c6314d6ae32e7f4d39c)

2 years agotreewide: Backport translations - sync
Hannu Nyman [Thu, 28 Jul 2022 17:15:05 +0000 (20:15 +0300)]
treewide: Backport translations - sync

Backport from master and sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-base: form.js: allow overriding section placeholder of TableSections
Jo-Philipp Wich [Mon, 16 May 2022 09:47:45 +0000 (11:47 +0200)]
luci-base: form.js: allow overriding section placeholder of TableSections

The existing implementation was hardcoding the empty TableSection placeholder
instead of invoking `renderSectionPlaceholder()` which might be overridden by
various forms.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 818776451d96e8f1a187eafca4a5ebbf0770fbde)

2 years agoluci-base: form.js: remove stray `<br>` elements from section placeholder
Jo-Philipp Wich [Mon, 16 May 2022 14:03:14 +0000 (16:03 +0200)]
luci-base: form.js: remove stray `<br>` elements from section placeholder

Theme CSS styles shoudl take care of introducing padding as needed.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit e4e001b59657e4cd0f333a3f43ce66b8f789deb2)

2 years agoluci-base: form.js: trim option description
Jo-Philipp Wich [Mon, 16 May 2022 14:12:01 +0000 (16:12 +0200)]
luci-base: form.js: trim option description

If a whitespace-only description is set on an element, the CSS :empty
selector will not match, causing description icons to be shown when
there's no actual content.

To avoid that, trim the description string when building the element.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit b6ae1d4f4aec94b38e59b11e5fd9c28799dae05b)

2 years agoluci-base: form.js: minor tweaks for mobile styling
Jo-Philipp Wich [Tue, 17 May 2022 13:07:48 +0000 (15:07 +0200)]
luci-base: form.js: minor tweaks for mobile styling

 - Annotate gridsection textvalue cells as CBI.DummyValue widgets
 - Replace `<br>` elements with newlines in `stripTags()`

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 9c136c9beaa7639aecc351c5725de33cfe4d2e5c)

2 years agoluci-proto-ncm: rename `service` option to `mode`
Jo-Philipp Wich [Mon, 11 Jul 2022 09:23:57 +0000 (11:23 +0200)]
luci-proto-ncm: rename `service` option to `mode`

Package luci-proto-ncm depends on comgt-ncm which uses an option
called 'mode' to set the radiomode of the modem. There is no option
'service' in the comgt-ncm scripts.

Suggested-by: breenstorm <49235337+breenstorm@users.noreply.github.com>
[fix commit subject, add commit message, rebase onto master branch]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 4d6642b636a9feaa173c568c99f4129c440ed8b8)

2 years agoluci-base: form.js: fix removing just created named GridSection
Jo-Philipp Wich [Fri, 22 Jul 2022 21:41:05 +0000 (23:41 +0200)]
luci-base: form.js: fix removing just created named GridSection

Since the `handleModalSave()` handler of the GridSection class invokes
`handleModalCancel()` after saving the data but before removing the
`addedSection` property, the `handleModalCancel` handler incorrectly
removed the uci section that has just been created.

This bug didn't affect anonymous GridSections because after saving the
id of the created section changes, causing the remove command to fail,
but for named ones with stable section IDs, the bug manifested.

Solve the issue by passing a flag to `handleModalCancel()` indicating
whether the method was called from a safe operation and use it do
decide whether to delete the new staged uci section or not.

Fixes: #5760
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 2771360108cb3e2011c7c9cb4921a9047ea70910)

2 years agoluci-base: uci.js: prevent sending empty uci set operations
Jo-Philipp Wich [Fri, 22 Jul 2022 22:10:17 +0000 (00:10 +0200)]
luci-base: uci.js: prevent sending empty uci set operations

Under certain circumstances, a staged uci option value might get unset
again before saving the config, leaving an empty section change set
behind, causing the save call to send an empty uci set request via rpc,
triggering an ubus code 4 (Resource not found) error.

In particular this prevented bridge VLANs from getting saved properly.

Fixes: #5876
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 25dcd0b77c4450b83cd8b8307397e58c34ebfcd1)

2 years agoluci.mk: ignore language directories not explicitly mentioned
Jo-Philipp Wich [Fri, 22 Jul 2022 14:11:42 +0000 (16:11 +0200)]
luci.mk: ignore language directories not explicitly mentioned

Only create translation packages for languages mentioned in luci.mk

Fixes: #5886
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2 years agoluci-mod-network: demote WPA-PSK to "low" security in the choice list
Jo-Philipp Wich [Tue, 12 Jul 2022 14:12:30 +0000 (16:12 +0200)]
luci-mod-network: demote WPA-PSK to "low" security in the choice list

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit ef7fe79ffc4a0725d51eb554db02fd8e3e73534d)

2 years agoluci-app-ddns: fix broken translation call
Jo-Philipp Wich [Tue, 12 Jul 2022 13:43:34 +0000 (15:43 +0200)]
luci-app-ddns: fix broken translation call

Fixes: #5874
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(backported from commit 57b88211c14dd71da44b537ac9062f99e1efbe80)

2 years agolucihttp: update to latest Git HEAD
Jo-Philipp Wich [Fri, 8 Jul 2022 13:26:23 +0000 (15:26 +0200)]
lucihttp: update to latest Git HEAD

6e68a10 utils: also compare attribute name length in lh_header_attribute()
7b721af testcases: adjust urldecode tests

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 2b0539ef9d1849b42fae206f0647bc647323c75d)

2 years agorpcd-mod-luci: update filter for rpc_luci_get_network_devices
Markus Stockhausen [Tue, 28 Jun 2022 08:54:48 +0000 (10:54 +0200)]
rpcd-mod-luci: update filter for rpc_luci_get_network_devices

When kernel bonding module is loaded it will create a special
file /sys/class/net/bonding_masters. This is no network device.
Filter it out for getNetworkDevices() call.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
(cherry picked from commit 77d29c9dc0226faa9374ca25fba8dc642c99f303)

2 years agoluci-mod-status: nftables.js: fix OOM on big nftables IP sets
Alexander Georgievskiy [Tue, 5 Jul 2022 11:13:50 +0000 (14:13 +0300)]
luci-mod-status: nftables.js: fix OOM on big nftables IP sets

Signed-off-by: Alexander Georgievskiy <galeksandrp@gmail.com>
(cherry picked from commit 88c62fe2187ebf28937cb49f880dada09937b194)

2 years agotreewide: backport and sync tranlations
Hannu Nyman [Sun, 3 Jul 2022 10:37:08 +0000 (13:37 +0300)]
treewide: backport and sync tranlations

Backport translations from master.
(also remove the erronenous Portuguese translations from English)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agotreewide: sync with master translations
Jo-Philipp Wich [Tue, 21 Jun 2022 21:58:54 +0000 (23:58 +0200)]
treewide: sync with master translations

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2 years agoluci-mod-network: wireless.js: fix typo in description string
Jo-Philipp Wich [Tue, 21 Jun 2022 21:54:12 +0000 (23:54 +0200)]
luci-mod-network: wireless.js: fix typo in description string

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(backported from commit 53a998895b81ac393d1a9d62e4c3ae0e8708515b)

2 years agotreewide: sync with master translations
Jo-Philipp Wich [Tue, 21 Jun 2022 10:30:45 +0000 (12:30 +0200)]
treewide: sync with master translations

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2 years agoluci-mod-network: wireless.js: expose wifi-iface macaddr option
Jo-Philipp Wich [Tue, 21 Jun 2022 06:52:50 +0000 (08:52 +0200)]
luci-mod-network: wireless.js: expose wifi-iface macaddr option

Fixes: #5845
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f039069ac52e0da00ce9f3486926fbddd29a6ea0)

2 years agoluci-base: remove redundant english translations
Jo-Philipp Wich [Mon, 20 Jun 2022 08:56:26 +0000 (10:56 +0200)]
luci-base: remove redundant english translations

Drop translations that match the msgid as well as stry, misplaced spanish
ones.

Ref: https://forum.openwrt.org/t/openwrt-22-03-0-rc4/129874/50
Ref: https://forum.openwrt.org/t/openwrt-22-03-0-rc4/129874/60
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(backported from commit cc3d97ccecec041128462d44d85f9393a502f60e)

2 years agoluci-base: network.js: consider uci config for Device.getType()/getParent()
Jo-Philipp Wich [Thu, 16 Jun 2022 07:47:47 +0000 (09:47 +0200)]
luci-base: network.js: consider uci config for Device.getType()/getParent()

For network devices declared in uci but not yet created by netifd, the
runtime status information will be unavailable, causing methods such as
`getType()` to assume plain ethernet interfaces and `getParent()` to fail
resolving parent devices.

Fall back to infer the information from uci configuration settings in such
cases to give accurate type hints to callers.

In particular, this prevents LuCI from turning wireless target networks
containing a to-be-created bridge device into bridges themselves.

Fixes: https://github.com/openwrt/packages/issues/18768
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 8effea58d7281fd4f2b6c31d534195dba27a850b)

2 years agotreewide: Backport translations and sync
Hannu Nyman [Sun, 12 Jun 2022 16:51:16 +0000 (19:51 +0300)]
treewide: Backport translations and sync

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-app-opkg: fix parsing package dependencies with version constraints
Jo-Philipp Wich [Fri, 3 Jun 2022 11:36:02 +0000 (13:36 +0200)]
luci-app-opkg: fix parsing package dependencies with version constraints

Due to improper ordering of regexp alternatives, version constraint operators
might get undermatched.

Fixes: https://github.com/openwrt/openwrt/issues/9982
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit b84791bd029c2aaa67cbc06a15d23828f62f4608)

2 years ago luci-app-banip: mark as broken
Dirk Brenken [Fri, 27 May 2022 19:31:21 +0000 (21:31 +0200)]
 luci-app-banip: mark as broken

banIP 0.7.x is not compatible with new nft firewall (default in master and 22.03).
Mark the package as BROKEN for now.

Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit 8837f7608adf770ff33249821d28da097324c54d)

2 years agoluci-theme-bootstrap: restore initramfs warning
Jo-Philipp Wich [Thu, 12 May 2022 07:32:02 +0000 (09:32 +0200)]
luci-theme-bootstrap: restore initramfs warning

Restore accidentally removed the initramfs boot warning banner.

Ref: https://github.com/openwrt/luci/commit/8055acc9be89f0bed31b6692ad08e6196611d478#commitcomment-73447330
Fixes: 8055acc9be ("luci-theme-bootstrap: overhaul styles")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 56fab648caa78422aac47ab8cec168e8a0999316)

2 years agoluci-base: ui.js: warn about connectivity loss on changing iface settings
Jo-Philipp Wich [Fri, 6 May 2022 11:39:36 +0000 (13:39 +0200)]
luci-base: ui.js: warn about connectivity loss on changing iface settings

If specific settings such as the protocol, IP address or netmask of an
interface the user is connected to are changed, the apply/rollback
mechanism might interfere. Display an additional warning dialog in this
case, instructing the user to manually reconnect and offering to continue
with a less safe unchecked apply mechanism.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 733ee9a7b6312e9b5fe2a4aa8107baf5379602ab)

2 years agoluci-base: ui.js: make "Apply unchecked" available from the changes dialog
Jo-Philipp Wich [Thu, 5 May 2022 21:50:25 +0000 (23:50 +0200)]
luci-base: ui.js: make "Apply unchecked" available from the changes dialog

Previously, "Apply unchecked" was only possible from the save action of CBI
maps, allow to invoke it from the configuration change dialog as well.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 8583efb5a92785fd56ff4abb0ce56a142eb6602f)

2 years agoluci-base: ui.js: gracefully handle failing confirm calls on rollback
Jo-Philipp Wich [Thu, 5 May 2022 21:31:21 +0000 (23:31 +0200)]
luci-base: ui.js: gracefully handle failing confirm calls on rollback

Do not abort the poll loop if some confirm request attempts fail, which
might happen when the device starts rolling back its configuration.

Before that fix, the rollback information dialog offering an unchecked
apply was not reliably presented in such situations.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit b6797821b86678d8dd604ce4805691784e6dc3ce)

2 years agoluci-theme-bootstrap: use medium dark text color for version footer
Jo-Philipp Wich [Thu, 5 May 2022 21:15:30 +0000 (23:15 +0200)]
luci-theme-bootstrap: use medium dark text color for version footer

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit c40dd71b84f291ad0db0f28670e1e3979a4c51b0)

2 years agoluci-base: fix DSL feature detection
Jo-Philipp Wich [Tue, 3 May 2022 12:52:35 +0000 (14:52 +0200)]
luci-base: fix DSL feature detection

On boards with ADSL instead of VDSL support we need to expect an
`/sbin/dsl_cpe_control` instead of an `/sbin/vdsl_cpe_control` executable.

Ref: https://forum.openwrt.org/t/dsl-line-stats/126580
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 111c551cdb8d14e8e5ef7c7a66ffdceb6d3cbb55)

2 years agoluci-mod-network: routes: allow prefixes as route source
Jo-Philipp Wich [Thu, 28 Apr 2022 10:08:37 +0000 (12:08 +0200)]
luci-mod-network: routes: allow prefixes as route source

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 904c174cafe46a6414058d242df279c09e23be29)

2 years agoluci-mod-system: enforce availability of english as language choice
Jo-Philipp Wich [Wed, 27 Apr 2022 18:54:58 +0000 (20:54 +0200)]
luci-mod-system: enforce availability of english as language choice

Always offer english, regardless of whether a dummy language pack for it
is installed or not.

Fixes: #5783
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit c2eb30bba7451d16e1de37411624b2bcc449c037)

2 years agoluci-mod-network: diagnostics: peg max traceroute hops to rpc timeout
Jo-Philipp Wich [Wed, 27 Apr 2022 18:43:05 +0000 (20:43 +0200)]
luci-mod-network: diagnostics: peg max traceroute hops to rpc timeout

In the worst case, traceroute might take up to 30s to complete when tracing
a completely unreachable path, due to the default limit of 30 hops multiplied
by the per-hop deadline of 1 second (-w 1).

Limit the maximum amount of hops to the configured rpc execution timeout,
20 second by default, in order to avoid running into timed out rpc requests.

Fixes: #5782
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 1ae142d7d11862b11a6e0cea06562875cc778ae7)

2 years agoluci-mod-status: hide iptables firewall status when nft is present
Jo-Philipp Wich [Wed, 27 Apr 2022 11:17:03 +0000 (13:17 +0200)]
luci-mod-status: hide iptables firewall status when nft is present

Do not expose the iptables status page as menu item when nftables is present
on the system. Instead add a warning banner to the nftables status page
directing the user to the hidden iptables status page when we encounter
legacy rules on the system.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 2f80fe3767207e2dbb8c5286603f49808b66a60d)

2 years agoluci-base: dispatcher.lua: support "absent" fs dependency for menu nodes
Jo-Philipp Wich [Wed, 27 Apr 2022 11:13:12 +0000 (13:13 +0200)]
luci-base: dispatcher.lua: support "absent" fs dependency for menu nodes

The "absent" dependency type requires the given path to not exist on the
local system for the condition to be satisified. This is useful to disable
menu nodes depending on the presence of specific files.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 2e4b5fb8ff2fb3bfd1400bf7cbf721057f02fab9)

2 years agoluci-mod-network: switch: Fix multi instances handling
Chen Minqiang [Fri, 11 Mar 2022 14:14:24 +0000 (22:14 +0800)]
luci-mod-network: switch: Fix multi instances handling

Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
(cherry picked from commit d65c5e64960273939e05e615cdcfe9019c1e2f37)

2 years agoluci-mod-status: nftables: add translations for further expression kinds
Jo-Philipp Wich [Tue, 26 Apr 2022 13:04:58 +0000 (15:04 +0200)]
luci-mod-status: nftables: add translations for further expression kinds

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f2f7e0c1f71199f945e4f936bb1396e0c1f30b33)

2 years agotreewide: Backport translations and sync
Hannu Nyman [Sun, 15 May 2022 17:12:41 +0000 (20:12 +0300)]
treewide: Backport translations and sync

Backport from master, sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoMerge pull request #5805 from odmdas/2203-sysntpd-iface
Jo-Philipp Wich [Tue, 10 May 2022 09:04:27 +0000 (11:04 +0200)]
Merge pull request #5805 from odmdas/2203-sysntpd-iface

[22.03] luci-mod-system: add interface selection for NTPD

2 years agoluci-mod-system: add interface selection for NTPD 5805/head
Alexey Dobrovolsky [Wed, 4 May 2022 22:18:51 +0000 (01:18 +0300)]
luci-mod-system: add interface selection for NTPD

UCI option `interface` for sysntpd server was introduced in
OpenWrt commit 4da60500ebd2. NTP server binds to the specified interface,
or if unspecified, to all.

This patch adds selection widget to LuCI.

Signed-off-by: Alexey Dobrovolsky <dobrovolskiy.alexey@gmail.com>
(cherry picked from commit 24ac5a2bf6d713c6878cf7be7d4e4516965c2884)

2 years agoluci-base: sys.lua: fix parsing conntrack entries without timeout
Jo-Philipp Wich [Fri, 29 Apr 2022 10:16:19 +0000 (12:16 +0200)]
luci-base: sys.lua: fix parsing conntrack entries without timeout

Flow offloaded conntrack entries carry no timeout value and trip up the
record parsing routine. Adjust the code to properly deal with such entries.

Ref: https://forum.openwrt.org/t/offloading-breaks-connections-list/126423
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 531c0ecff2ca57c4bc0aacee66a0746814fefc78)

2 years agoluci-mod-network: avoid needlessly writing `none` RA flags
Jo-Philipp Wich [Wed, 27 Apr 2022 10:18:29 +0000 (12:18 +0200)]
luci-mod-network: avoid needlessly writing `none` RA flags

Fixes: #5725
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f04011f0683dbacb8b831733c708bad760ca61df)

2 years agoluci-app-statistics: stat-genconfig: don't emit bools for absent uci options
Jo-Philipp Wich [Mon, 25 Apr 2022 18:55:02 +0000 (20:55 +0200)]
luci-app-statistics: stat-genconfig: don't emit bools for absent uci options

Do not emit native collectd.conf boolean false options if the corresponding
uci option is unset in order to honour collectd's implicit defaults.

This fixes certain options, such as the memory plugins `ValuesAbsolute`,
being without effect if declared as default-enabled in the related plugin
uci forms.

Fixes: #5777
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f16037cec5e3f65cffe2f5788c264f1912435b0e)

2 years agotreewide: Backport translations from master - i18n
Hannu Nyman [Sun, 24 Apr 2022 15:33:21 +0000 (18:33 +0300)]
treewide: Backport translations from master - i18n

Backport translations.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-proto-wireguard: adjust MTU range from 0-8940
Florian Eckert [Thu, 14 Apr 2022 09:59:56 +0000 (11:59 +0200)]
luci-proto-wireguard: adjust MTU range from 0-8940

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
(cherry picked from commit 7206d8fd6aac0708dda6ac17c96709e066f6328b)

2 years agoluci-proto-wireguard: remove MTU limit
Florian Eckert [Tue, 12 Apr 2022 08:32:22 +0000 (10:32 +0200)]
luci-proto-wireguard: remove MTU limit

fixes #5737

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
(cherry picked from commit ddd04a719f3adf4c59d6ab153de0c26eb9495a93)

2 years agoluci-mod-system: Set description to blank if the trigger has none
Florian Eckert [Tue, 12 Apr 2022 12:11:36 +0000 (14:11 +0200)]
luci-mod-system: Set description to blank if the trigger has none

In this case the cbi description div will not be generated and when
switching to another trigger later, attempts to change the description
div contents will fail.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
(cherry picked from commit b6fb2b16971f80afcfb7c3dd1d257c60f6cced7f)

2 years agoRevert "luci-mod-system: Set description to blank if the trigger has none"
Florian Eckert [Tue, 12 Apr 2022 12:10:12 +0000 (14:10 +0200)]
Revert "luci-mod-system: Set description to blank if the trigger has none"

This reverts commit 3de544600385ca365c833aec99f89113daa12292.

I have unfortunately edited the wrong line!

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
(cherry picked from commit 2135525b7213220476388fbed0d7525df712a937)

2 years agoluci-mod-system: Set description to blank if the trigger has none
Florian Eckert [Tue, 12 Apr 2022 08:05:34 +0000 (10:05 +0200)]
luci-mod-system: Set description to blank if the trigger has none

In this case the cbi description div will not be generated and when
switching to another trigger later, attempts to change the description
div contents will fail.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
(cherry picked from commit 3de544600385ca365c833aec99f89113daa12292)

2 years agotreewide: Backport translations and sync
Hannu Nyman [Sat, 9 Apr 2022 16:13:56 +0000 (19:13 +0300)]
treewide: Backport translations and sync

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-lib-jsonc: stringify int use json_object_new_int64 instead
Justin Klaassen [Sat, 19 Mar 2022 18:34:05 +0000 (11:34 -0700)]
luci-lib-jsonc: stringify int use json_object_new_int64 instead

Fixes: #3293
Signed-off-by: Justin Klaassen <jck112@users.noreply.github.com>
(cherry picked from commit 45f411b7a29d0aa6b46946f06bd88082f2a68034)

2 years agobuild: introduce official way to opt out of source minification
Jo-Philipp Wich [Wed, 6 Apr 2022 09:39:06 +0000 (11:39 +0200)]
build: introduce official way to opt out of source minification

Introduce three new default enabled variables `LUCI_MINIFY_JS`,
`LUCI_MINIFY_LUA` and `LUCI_MINIFY_CSS`  that allow LuCI component
Makefiles to opt out of JavaScript, Lua and CSS compression respectively.

To e.g. inhibit CSSTidy postprocessing in a theme, the corresponding
Makefile can set `LUCI_MINIFY_CSS:=0` prior to including `luci.mk`.

Fixes: #5755
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 3646b0cd1f65dc929dbc0b29daaa7252f6a2507b)

2 years agoMerge pull request #5750 from MaxSKash/22.03-DHCP-lease-table
Florian Eckert [Tue, 5 Apr 2022 12:04:06 +0000 (14:04 +0200)]
Merge pull request #5750 from MaxSKash/22.03-DHCP-lease-table

[22.03]luci-mod-status,mod-network: Added fqdn-name to DHCPv4 lease table

2 years agoluci-mod-status,mod-network: Added fqdn-name to DHCPv4 lease table 5750/head
Max S Kash [Tue, 8 Mar 2022 13:57:01 +0000 (18:57 +0500)]
luci-mod-status,mod-network: Added fqdn-name to DHCPv4 lease table

Added code to display fcdn-name in DHCPv4 lease table.
(based on code in DHCPv6 lease table)

Signed-off-by: Max S Kash <asukms@ya.ru>
Indentation adjused and wrapped commit message
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2 years agoluci-app-firewall: fix misspelling of restrictions
Jo-Philipp Wich [Wed, 30 Mar 2022 18:44:13 +0000 (20:44 +0200)]
luci-app-firewall: fix misspelling of restrictions

Fixes: #5749
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 0eb3aeb0105be5477ed12a57ce3028d08d5f90c6)

2 years agotreewide: Backport translations from master
Hannu Nyman [Sat, 26 Mar 2022 06:49:19 +0000 (08:49 +0200)]
treewide: Backport translations from master

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-theme-bootstrap: fix incorrect wrap arounds in nested cbi sections
Jo-Philipp Wich [Fri, 25 Mar 2022 10:49:10 +0000 (11:49 +0100)]
luci-theme-bootstrap: fix incorrect wrap arounds in nested cbi sections

Fixes: #5743
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 8e09f1833b27e98208472ae44ff4b2ed218fa083)

2 years agotimezone data: update to 2022a
Hannu Nyman [Thu, 24 Mar 2022 19:09:41 +0000 (21:09 +0200)]
timezone data: update to 2022a

Update timezone data to 2022a.

http://mm.icann.org/pipermail/tz-announce/2022-March/000070.html
* Palestine will spring forward on 2022-03-27, not 2022-03-26.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit 15bbe6979bade530171420721ee8d99b3a1eacd9)