project/luci.git
2 years agotimezone data: update to 2022e
Hannu Nyman [Mon, 24 Oct 2022 16:00:38 +0000 (19:00 +0300)]
timezone data: update to 2022e

Update timezone data to 2022e.
* http://mm.icann.org/pipermail/tz-announce/2022-September/000073.html
* http://mm.icann.org/pipermail/tz-announce/2022-October/000074.html

 - Palestine transitions are now Saturdays at 02:00.
 - Simplify three Ukraine zones into one.
 - Jordan and Syria switch from +02/+03 with DST to year-round +03.

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

2 years agoMerge pull request #6035 from myrlyn/openwrt-21.02_dmfix
Jo-Philipp Wich [Tue, 18 Oct 2022 21:17:38 +0000 (23:17 +0200)]
Merge pull request #6035 from myrlyn/openwrt-21.02_dmfix

luci-app-dockerman: change default to nil if data.blkio_weight is not defined

2 years agoluci-app-dockerman: change default to nil if data.blkio_weight is not defined
myrlyn [Tue, 18 Oct 2022 15:56:19 +0000 (16:56 +0100)]
luci-app-dockerman: change default to nil if data.blkio_weight is not defined
Signed-off-by: Jonathon Walker <jonathon.l.walker@gmail.com>
2 years agosysauth: add autocomplete and id attributes to login inputs
Viktor Tsvetkov [Fri, 24 Dec 2021 11:36:35 +0000 (12:36 +0100)]
sysauth: add autocomplete and id attributes to login inputs

this let browser automatically fill according to HTML spec for input elements.
luci-theme-bootstrap and luci-base are affected.

Signed-off-by: Viktor Tsvetkov <zwetvik@gmail.com>
[indentation fix]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 3e9d9a9dbb045c24eb93643838f8e8e3b9074e4b)

2 years agoluci-app-nut: use filesystem dependencies for configuration files
Jo-Philipp Wich [Sat, 15 Oct 2022 12:18:57 +0000 (14:18 +0200)]
luci-app-nut: use filesystem dependencies for configuration files

Don't use uci dependencies for nut related config files as the nut packages
ship with completely commented out uci files. Such files do not satisfy the
uci menu dependencies as those expect at least one section within the file.

To solve this issue, use a regular file dependency on /etc/config/nut_*
instead.

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

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

Backport 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 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 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 (cb650143 for 21.02) 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 agotreewide: Backport translations - i18n
Hannu Nyman [Sun, 28 Aug 2022 16:14:32 +0000 (19:14 +0300)]
treewide: Backport translations - i18n

Backport from master, sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoMerge pull request #5751 from MaxSKash/21.02-DHCP-lease-table
Florian Eckert [Wed, 10 Aug 2022 05:20:58 +0000 (07:20 +0200)]
Merge pull request #5751 from MaxSKash/21.02-DHCP-lease-table

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

2 years agoMerge pull request #5920 from stangri/openwrt-21.02-luci-app-advanced-reboot
Stan Grishin [Tue, 2 Aug 2022 18:51:56 +0000 (12:51 -0600)]
Merge pull request #5920 from stangri/openwrt-21.02-luci-app-advanced-reboot

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

2 years agoluci-app-advanced-reboot: Fix Linksys EA4500 descriptor file
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-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-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: 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-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 agotreewide: Backport translations - sync
Hannu Nyman [Thu, 28 Jul 2022 17:19:40 +0000 (20:19 +0300)]
treewide: Backport translations - sync

Backport from master, sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
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 agotreewide: backport and sync translations
Hannu Nyman [Sun, 3 Jul 2022 10:40:37 +0000 (13:40 +0300)]
treewide: backport and sync translations

Backport translations from master.
(also remove erroneous English translations)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
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 and sync translations
Hannu Nyman [Sun, 12 Jun 2022 16:54:57 +0000 (19:54 +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: 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 agotreewide: Backport translations and sync
Hannu Nyman [Sun, 15 May 2022 17:15:29 +0000 (20:15 +0300)]
treewide: Backport translations and sync

Backport from master, sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-app-adblock: s/1-7/0-6/g
Dirk Brenken [Tue, 10 May 2022 16:17:05 +0000 (18:17 +0200)]
luci-app-adblock: s/1-7/0-6/g

Fixes: #5716
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit abbff0f4b6d6c7df7d3dc642f1c4db42b3d2c895)
Signed-off-by: Dirk Brenken <dev@brenken.org>
2 years agoluci-app-adblock: sync with 4.1.3-6
Dirk Brenken [Tue, 10 May 2022 16:11:39 +0000 (18:11 +0200)]
luci-app-adblock: sync with 4.1.3-6

* remove support for shallalist

Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit 1eddbe0f3f0b00366694424f1445ea6cceb7d7d5)
Signed-off-by: Dirk Brenken <dev@brenken.org>
2 years agoluci-app-adblock: small fixes
Dirk Brenken [Tue, 10 May 2022 16:07:49 +0000 (18:07 +0200)]
luci-app-adblock: small fixes

* fix #5677
* fix 'flush cache' wording

Signed-off-by: Dirk Brenken <dev@brenken.org>
(cherry picked from commit 2ab828f5bf4e80f5d1cc16712df6e04b58b6eaaa)
Signed-off-by: Dirk Brenken <dev@brenken.org>
2 years agoMerge pull request #5806 from odmdas/2102-sysntpd-iface
Jo-Philipp Wich [Tue, 10 May 2022 09:04:35 +0000 (11:04 +0200)]
Merge pull request #5806 from odmdas/2102-sysntpd-iface

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

2 years agoluci-mod-system: add interface selection for NTPD
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-app-ddns: fix update time calculation
small_5 [Thu, 4 Mar 2021 02:50:25 +0000 (10:50 +0800)]
luci-app-ddns: fix update time calculation

* Fix last_update overflow

* Fix next_update wrong when the router is just started

* Fix missing check_seconds for next_update

Signed-off-by: Small_5 <61473216+small-5@users.noreply.github.com>
(cherry picked from commit 58ed2b211a1add5fb2cb3750af6074c4d51c307a)

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-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 and sync
Hannu Nyman [Sat, 9 Apr 2022 16:18:33 +0000 (19:18 +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 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.

Backport `procd` detection of `rootfs_type` to JavaScript:
https://git.openwrt.org/?p=project/procd.git;a=blob;f=system.c;h=93eac59c3b01ce3729dc27539ac483f5314759d3;hb=HEAD#l49

Signed-off-by: Paul Spooren <mail@aparcar.org>
2 years agoluci-mod-status,mod-network: Added fqdn-name to DHCPv4 lease table
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>
(backported from commit 0eb3aeb0105be5477ed12a57ce3028d08d5f90c6)

2 years agotreewide: Backport translations
Hannu Nyman [Sat, 26 Mar 2022 06:52:33 +0000 (08:52 +0200)]
treewide: Backport translations

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)

2 years agoluci-app-attendedsysupgrade: fix missing efi path
Paul Spooren [Wed, 9 Mar 2022 10:29:59 +0000 (11:29 +0100)]
luci-app-attendedsysupgrade: fix missing efi path

If running on a non EFI system, the file `/sys/firmware/efi` is not
available and therefore results in an error of `fs.stat`. Wrap it with
`L.resolveDefault` to avoid the error message and make it work on
non-EFI devices again.

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

2 years agoluci-app-attendedsysupgrade: LuCIfy codebase
Paul Spooren [Wed, 2 Mar 2022 00:42:13 +0000 (01:42 +0100)]
luci-app-attendedsysupgrade: LuCIfy codebase

This should make the code a bit more readable and LuCI like instead of
using plain JavaScript.

Handle the filesystem correctly to avoid installing suqashfs images on
ext4 devices and the other way around, also recognize systems running
efi.

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

2 years agotreewide: Backport and sync translations - i18n
Hannu Nyman [Sun, 13 Mar 2022 16:20:22 +0000 (18:20 +0200)]
treewide: Backport and sync translations - i18n

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-app-statistics: irq plugin: handle numeric interrupt names
k-ronny [Sun, 13 Mar 2022 16:14:24 +0000 (18:14 +0200)]
luci-app-statistics: irq plugin: handle numeric interrupt names

the `irq` plugin does not show the right data if the interrupt name is only numeric

Signed-off-by: Ronny Kotzschmar <ro.ok@me.com>
(cherry picked from commit dc2570305383a1014b39b44471c0b8c491e23026)
Fixes #5719

2 years agoMerge pull request #5627 from stangri/openwrt-21.02
Stan Grishin [Wed, 23 Feb 2022 02:41:39 +0000 (18:41 -0800)]
Merge pull request #5627 from stangri/openwrt-21.02

[21.02] luci-app-https-dns-proxy: massive providers update

2 years agoluci-theme-bootstrap: fix display glitch with combo buttons in row actions
Jo-Philipp Wich [Mon, 21 Feb 2022 22:42:16 +0000 (23:42 +0100)]
luci-theme-bootstrap: fix display glitch with combo buttons in row actions

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

2 years agoluci-base: properly handle promise targets in Request.request()
Jo-Philipp Wich [Mon, 21 Feb 2022 13:59:16 +0000 (14:59 +0100)]
luci-base: properly handle promise targets in Request.request()

Under some circumstances, ubus RPC requests may be initiated while LuCI is
still resolving the `rpcBaseURL` value. In this situation, the `target`
argument of the `request()` call will be a pending promise object which
results in an invalid URL when serialized by `expandURL()`, leading to an
`Failed to execute 'open' on 'XMLHttpRequest': Invalid URL` exception.

This commonly occured on the index status page which immediately initiates
ubus RPC calls on load to discover existing status page partials.

Solve the issue by filtering the given `target` argument through
`Promise.resolve()` before expanding the URL and initiating the actual
request.

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

2 years agoluci-theme-bootstrap: fix style quirk introduced by backport
Jo-Philipp Wich [Wed, 16 Feb 2022 09:48:38 +0000 (10:48 +0100)]
luci-theme-bootstrap: fix style quirk introduced by backport

Fixes: 883834c3dd ("luci-theme-bootstrap: overhaul styles")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2 years agotreewide: resync and merge master translations
Jo-Philipp Wich [Tue, 15 Feb 2022 23:58:01 +0000 (00:58 +0100)]
treewide: resync and merge master translations

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2 years agoluci-app-firewall: fix setting unspecified zone on forwardings
Jo-Philipp Wich [Tue, 15 Feb 2022 23:20:55 +0000 (00:20 +0100)]
luci-app-firewall: fix setting unspecified zone on forwardings

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

2 years agoluci-app-firewall: CBIProtocolSelect: properly handle unrecognized protos
Jo-Philipp Wich [Thu, 9 Dec 2021 15:24:31 +0000 (16:24 +0100)]
luci-app-firewall: CBIProtocolSelect: properly handle unrecognized protos

Prevent incorrectly replacing unrecognized protocol numbers with -1.

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

2 years agoluci-base: ui.js: avoid error tooltips overlapping dropdowns
Jo-Philipp Wich [Thu, 9 Dec 2021 14:28:39 +0000 (15:28 +0100)]
luci-base: ui.js: avoid error tooltips overlapping dropdowns

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

2 years agoluci-mod-status: Add Target Platform (e.g. ath79/ipq806x/etc)
Paul Dee [Mon, 6 Sep 2021 15:31:51 +0000 (17:31 +0200)]
luci-mod-status: Add Target Platform (e.g. ath79/ipq806x/etc)

revealed under:
ubus call system board
board.release.target

Useful reminder for what to download

Signed-off-by: Paul Dee <systemcrash@users.noreply.github.com>
(cherry picked from commit 2890d1842a8538e093de3b1814ef26f308385c07)

2 years agoluci-base: prevent empty field for adding new entry
Helge Mader [Fri, 12 Mar 2021 09:48:29 +0000 (10:48 +0100)]
luci-base: prevent empty field for adding new entry

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

2 years agoluci-base: fix request timeout docstring
Paul Spooren [Mon, 9 Aug 2021 19:37:59 +0000 (09:37 -1000)]
luci-base: fix request timeout docstring

The `timeout` is defined in milliseconds, not seconds.

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

2 years agoluci-mod-status: fix raw ipt counter buton style
Jo-Philipp Wich [Wed, 17 Mar 2021 08:12:09 +0000 (09:12 +0100)]
luci-mod-status: fix raw ipt counter buton style

Fixes: #4928
Fixes: b39b7fc0d2 ("luci-mod-status: allow displaying raw iptables counter values")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 1dc16d9d3ffeee30d072c569e9a3c693d303e9fc)

2 years agoluci-mod-status: allow displaying raw iptables counter values
Jo-Philipp Wich [Mon, 1 Mar 2021 17:56:27 +0000 (18:56 +0100)]
luci-mod-status: allow displaying raw iptables counter values

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

2 years agoluci-theme-bootstrap: fix translation for username and password captions
Jo-Philipp Wich [Tue, 21 Dec 2021 08:56:31 +0000 (09:56 +0100)]
luci-theme-bootstrap: fix translation for username and password captions

Fixes: c81b09ec3d ("luci-theme-bootstrap: simplify login dialog")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 6a60d2434e92b422d9eb47ca2282a8bafdbbba35)

2 years agoluci-theme-bootstrap: simplify login dialog
Jo-Philipp Wich [Thu, 9 Dec 2021 18:48:12 +0000 (19:48 +0100)]
luci-theme-bootstrap: simplify login dialog

Use an traditional HTML form with post submit action to the same URL in
order to simplify the login process and not rely on the discarded login
XHR reply properly setting the login cookie.

This will also avoid one useless request on login and hopefully fix login
issues reported with various browser environments.

As a bonus, the resulting code is somewhat smaller as well.

Ref: https://forum.openwrt.org/t/login-does-not-work/113360
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit c81b09ec3d83542b9d4be6297c45d0e66896265e)

2 years agoluci-theme-bootstrap: add bottom margin to log views
Jo-Philipp Wich [Wed, 1 Dec 2021 14:09:11 +0000 (15:09 +0100)]
luci-theme-bootstrap: add bottom margin to log views

Prevent the log output textareas to touch the footer border.

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

2 years agoluci-theme-bootstrap: prevent hiding header bar on long vertical scrolls
Jo-Philipp Wich [Sat, 27 Nov 2021 18:47:14 +0000 (19:47 +0100)]
luci-theme-bootstrap: prevent hiding header bar on long vertical scrolls

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

2 years agoluci-theme-bootstrap: various style corrections
Jo-Philipp Wich [Mon, 22 Nov 2021 08:40:49 +0000 (09:40 +0100)]
luci-theme-bootstrap: various style corrections

 - Add proper top and bottom margin for tab descriptions
 - Allow flex wrapping for cbi-value rows
 - Ensure that nested table/grid sections always take the full width
 - Make table/grid section row action buttons are as narrow as possible

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

2 years agoluci-theme-bootstrap: fix cbi-value caption alignment
Jo-Philipp Wich [Sun, 21 Nov 2021 21:51:04 +0000 (22:51 +0100)]
luci-theme-bootstrap: fix cbi-value caption alignment

Since the removal of the clearfix styles, overlong captions will displace
subsequent input field rows.

Fix the issue by replace floating label + field margin with flexbox styles.

Fixes: #5535
Fixes: 8055acc9be ("luci-theme-bootstrap: overhaul styles")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 4720a025e8ab5a28541f7d066fb9b2f35ddb2cb1)

2 years agoluci-theme-bootstrap: fix inner border radius in ifaceboxes, progressbars
Jo-Philipp Wich [Sun, 21 Nov 2021 17:53:59 +0000 (18:53 +0100)]
luci-theme-bootstrap: fix inner border radius in ifaceboxes, progressbars

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

2 years agoluci-theme-bootstrap: hide scrollbars in modal overlay
Jo-Philipp Wich [Thu, 18 Nov 2021 10:27:36 +0000 (11:27 +0100)]
luci-theme-bootstrap: hide scrollbars in modal overlay

Only enable scrollbars if content overflows.

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

2 years agoluci-theme-bootstrap: further uci changelog style fixes
Jo-Philipp Wich [Wed, 17 Nov 2021 12:11:00 +0000 (13:11 +0100)]
luci-theme-bootstrap: further uci changelog style fixes

 - Use the proper dialog class name to apply changelog styles
 - Darken grey background and borders

Fixes: 5bd111f58f ("luci-theme-bootstrap: fix uci changelog and readonly input styles")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 00dc07bb84f0bc1cc8d27c8f95e533aca07501d4)

2 years agoluci-theme-bootstrap: fix uci changelog and readonly input styles
Jo-Philipp Wich [Tue, 16 Nov 2021 23:30:58 +0000 (00:30 +0100)]
luci-theme-bootstrap: fix uci changelog and readonly input styles

 - Rework uci changelog styling rules to work with unmodified markup
 - Drop redundant readonly input styles, don't fade readonly input texts

Fixes: 8055acc9be ("luci-theme-bootstrap: overhaul styles")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 5bd111f58faee1a2eeaa28845f7df4b727c13d99)

2 years agoluci-theme-bootstrap: overhaul styles
Jo-Philipp Wich [Sat, 13 Nov 2021 22:59:39 +0000 (23:59 +0100)]
luci-theme-bootstrap: overhaul styles

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

2 years agoluci-base: apply Browser/OS dark mode preference to index redirect page
Jo-Philipp Wich [Fri, 12 Nov 2021 09:37:49 +0000 (10:37 +0100)]
luci-base: apply Browser/OS dark mode preference to index redirect page

Turn white body, black link into black body, white link if the Browser/OS
indicates dark mode preference.

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

2 years agoluci-base: luci.js: fix undefined variable access in Request.request()
Jo-Philipp Wich [Thu, 11 Nov 2021 18:55:18 +0000 (19:55 +0100)]
luci-base: luci.js: fix undefined variable access in Request.request()

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

2 years agoluci-mod-network: use firewall.getZoneColorStyle() in interface view
Jo-Philipp Wich [Thu, 11 Nov 2021 11:48:07 +0000 (12:48 +0100)]
luci-mod-network: use firewall.getZoneColorStyle() in interface view

Use the new `firewall.getZoneColorStyle()` helper to apply background
zone color styles to the interface boxes.

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

2 years agoluci-app-firewall: use firewall.getZoneColorStyle() in views
Jo-Philipp Wich [Thu, 11 Nov 2021 11:45:48 +0000 (12:45 +0100)]
luci-app-firewall: use firewall.getZoneColorStyle() in views

Use the new `firewall.getZoneColorStyle()` helper to apply background
color styles.

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

2 years agoluci-base: widget.js: use firewall.getZoneColorStyle() in zone widgets
Jo-Philipp Wich [Thu, 11 Nov 2021 11:43:56 +0000 (12:43 +0100)]
luci-base: widget.js: use firewall.getZoneColorStyle() in zone widgets

Use the new `firewall.getZoneColorStyle()` helper to apply background
color styles.

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

2 years agoluci-base: firewall.js: add getZoneColorStyle() helper
Jo-Philipp Wich [Thu, 11 Nov 2021 11:39:41 +0000 (12:39 +0100)]
luci-base: firewall.js: add getZoneColorStyle() helper

The getZoneColorStyle() function will produce CSS style properties that
describe the color value of the zone. The color declaration is divided
into a CSS variable called `--zone-color-rgb` which holds the RGB value
of the color and a `background-color` property assigning these values
as background property.

This allows themes to override the color with derived values, e.g. by
applying an alpha channel.

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

2 years agoluci-base: add legacy directory, file and device validator JS stubs
Jo-Philipp Wich [Thu, 28 Oct 2021 13:08:35 +0000 (15:08 +0200)]
luci-base: add legacy directory, file and device validator JS stubs

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

2 years agoluci-mod-status: disable DSL status if not present
Jo-Philipp Wich [Thu, 28 Oct 2021 12:46:27 +0000 (14:46 +0200)]
luci-mod-status: disable DSL status if not present

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

2 years agoluci-base: add "dsl" system feature
Jo-Philipp Wich [Thu, 28 Oct 2021 12:43:29 +0000 (14:43 +0200)]
luci-base: add "dsl" system feature

Allows LuCI views to probe DSL presence using `L.hasSystemFeature('dsl')`.

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

2 years agoluci-mod-network: support network.interface.sourcefilter
Vladislav Grigoryev [Mon, 20 Sep 2021 21:36:39 +0000 (00:36 +0300)]
luci-mod-network: support network.interface.sourcefilter

Allow to modify the sourcefilter option in the network.interface config.
This is required for custom policy routing with IPv6 MWAN and/or NAT6.

Signed-off-by: Vladislav Grigoryev <vg.aetera@gmail.com>
(cherry picked from commit 22296fb07276159f6d1dae719f32920ad52d5873)

2 years agoprotocols: make APN option optional again
Jo-Philipp Wich [Thu, 19 Aug 2021 06:59:17 +0000 (08:59 +0200)]
protocols: make APN option optional again

Fixes: #5284
Fixes: 1661ac6bf8 ("luci-proto-ncm: add APN and PIN validation")
Fixes: 114dc38dc2 ("luci-proto-qmi: add APN and PIN validation")
Fixes: 6a8ad40b05 ("luci-proto-3g: add APN and PIN validation")
Fixes: ebb676ef7b ("luci-proto-modemmanager: add APN and PIN validation")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 5ff3ef7cbb9719d3476feb836cac86ee421f666d)

2 years agoluci-proto-ncm: add APN and PIN validation
Nicholas Smith [Sun, 27 Jun 2021 05:43:13 +0000 (15:43 +1000)]
luci-proto-ncm: add APN and PIN validation

Signed-off-by: Nicholas Smith <nicholas@nbembedded.com>
[squash commits, fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 1661ac6bf888e4563546cc63fe0e228af8889bf0)

2 years agoluci-proto-qmi: add APN and PIN validation
Nicholas Smith [Fri, 11 Jun 2021 12:41:14 +0000 (22:41 +1000)]
luci-proto-qmi: add APN and PIN validation

Signed-off-by: Nicholas Smith <nicholas@nbembedded.com>
[squash commits, fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 114dc38dc2ce82a9f32fdc16adaa6f435ee36881)

2 years agoluci-proto-3g: add APN and PIN validation
Nicholas Smith [Fri, 11 Jun 2021 12:40:30 +0000 (22:40 +1000)]
luci-proto-3g: add APN and PIN validation

Signed-off-by: Nicholas Smith <nicholas@nbembedded.com>
[squash commits, fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 6a8ad40b057e6a7f0d3343ec06dbe487b352fe47)

2 years agoluci-proto-modemmanager: add APN and PIN validation
Nicholas Smith [Fri, 11 Jun 2021 12:19:40 +0000 (22:19 +1000)]
luci-proto-modemmanager: add APN and PIN validation

Signed-off-by: Nicholas Smith <nicholas@nbembedded.com>
[squash commits, fix white space]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit ebb676ef7b03a7fed4062931be147d43d3855b64)

2 years agotreewide: Backport i18n translations
Hannu Nyman [Sun, 13 Feb 2022 10:21:17 +0000 (12:21 +0200)]
treewide: Backport i18n translations

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agotreewide: Backport translations
Hannu Nyman [Sat, 5 Feb 2022 10:15:28 +0000 (12:15 +0200)]
treewide: Backport translations

Backport translations from master.
Sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-app-uhttpd: support 'organization' option
Hannu Nyman [Sat, 29 Jan 2022 14:58:08 +0000 (16:58 +0200)]
luci-app-uhttpd: support 'organization' option

Support the organization option, added in 2020.
Mention in help text that a random/unique value is used in
certificate generation if the organization option is empty.

Re-order the certificate items to logical order.

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

2 years agoluci-base: explicitly invoke busybox applet for password change
Jo-Philipp Wich [Tue, 25 Jan 2022 21:56:56 +0000 (22:56 +0100)]
luci-base: explicitly invoke busybox applet for password change

Ensure to invoke the Busybox `passwd` applet to change the system password
in a non-interactive manner. Non-Busybox variants may not take the new
password input from stdin or use password hashes which are not supported
by musl's `crypt()` implementation by default.

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

2 years agoluci-app-openvpn: fix stray uci permission warning
Jo-Philipp Wich [Tue, 25 Jan 2022 21:39:48 +0000 (22:39 +0100)]
luci-app-openvpn: fix stray uci permission warning

The OpenVPN file view uses a dummy Map() instance to render the breadcrumb
template which triggers a uci permission error since the view is being
rendered by a form() action which does not set up the expected permission
flags. CBI Map() instances should only be used for cbi() dispatch targets.

Solve the issue by appending the breadcrumb template directly to the
SimpleForm() instance and by removing the redundant dummy Map() instance.

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

2 years agotreewide: sync translations i18n, backport
Hannu Nyman [Sun, 23 Jan 2022 10:30:17 +0000 (12:30 +0200)]
treewide: sync translations i18n, backport

Backport translations from master and sync.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoluci-base: sys: prevent path traversal via sys.init routines
Jo-Philipp Wich [Wed, 19 Jan 2022 15:32:52 +0000 (16:32 +0100)]
luci-base: sys: prevent path traversal via sys.init routines

Filter the init script name parameter through fs.basename() to avoid
invoking paths outside of /etc/init.d/.

Reported-by: Graham R <gr348@cam.ac.uk>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 8752701b0d01a81d0bd0a735be733f24ad11ab69)

2 years agoluci-mod-system: mention ED25519 keys
Jo-Philipp Wich [Wed, 19 Jan 2022 11:08:31 +0000 (12:08 +0100)]
luci-mod-system: mention ED25519 keys

Also update translations source strings accordingly.

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

2 years agoluci-mod-network: fix reading back rpfilter configuration value
Jo-Philipp Wich [Fri, 7 Jan 2022 18:19:11 +0000 (19:19 +0100)]
luci-mod-network: fix reading back rpfilter configuration value

Fixes: #5635
Fixes: faad7464a8 ("luci-mod-network: add support for network.device sections")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 0ef82b3c581fca05521637421cfc4b516d9099a2)

2 years agoluci-app-https-dns-proxy: massive providers update
Stan Grishin [Mon, 3 Jan 2022 00:22:49 +0000 (00:22 +0000)]
luci-app-https-dns-proxy: massive providers update

* introduce 31 new providers
* uniform names (FQDNs) in provider files
* other minor fixes

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

2 years agotreewide: Backport translations - i18n
Hannu Nyman [Fri, 31 Dec 2021 10:54:33 +0000 (12:54 +0200)]
treewide: Backport translations - i18n

Sync translations and backport from master.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
2 years agoMerge pull request #5620 from stangri/openwrt-21.02
Stan Grishin [Tue, 28 Dec 2021 22:44:34 +0000 (14:44 -0800)]
Merge pull request #5620 from stangri/openwrt-21.02

[21.02] luci-app-https-dns-proxy: add AhaDNS and minor fixes

2 years agoluci-app-https-dns-proxy: add AhaDNS and minor fixes
Stan Grishin [Tue, 28 Dec 2021 22:14:18 +0000 (22:14 +0000)]
luci-app-https-dns-proxy: add AhaDNS and minor fixes

* Add AhaDNS: thanks to @Jefe777 (account now deleted) and their PR at
  https://github.com/openwrt/luci/pull/5612
* Update email addresses
* Add missing new line to ControlD files
* Add RPCD reload to uci-defaults file

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

2 years agoluci.js: remove unsafe fallback code from dom.parse()
Jo-Philipp Wich [Thu, 23 Dec 2021 16:09:13 +0000 (17:09 +0100)]
luci.js: remove unsafe fallback code from dom.parse()

Do not fallback to .innerHTML if DOMParser() failed for whatever reason.

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

2 years agoluci-base: form.js: do not execute embedded script code in stripTags()
Jo-Philipp Wich [Thu, 23 Dec 2021 16:06:09 +0000 (17:06 +0100)]
luci-base: form.js: do not execute embedded script code in stripTags()

Instead of relying on .innerHTML which executes embedded script code to
parse a given HTML fragment, use dom.parse() which utilizies DOMParser()
internally in order to extract textContent in a safe manner.

Fixes: FS#4199
Ref: https://bugs.openwrt.org/index.php?do=details&task_id=4199
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 993151504e8e810c083d3257555bdcdc2f00673a)