Commit graph

232 commits

Author SHA1 Message Date
IssamHamdi
bcc091d2f1 session: Fix crash when the UCI option 'password' or 'username' is missing
Add a check in 'ptr.o' to prevent a crash in the
'if (ptr.o->type != UCI_TYPE_STRING)' statement
when ptr.o is null. This issue occurs due to the
absence of 'password' or 'username' in the login
section of /etc/config/rpcd.

Signed-off-by: IssamHamdi <ih@simonwunderlich.de>
2024-05-28 18:03:57 +01:00
Justin Klaassen
8ef4c2587a sys: use "Auto-Installed" field for packagelist
A change to the build scripts (openwrt/openwrt#14428) removed the "user" flag
from all installed packages in the rootfs. This caused problems for tools
like "auc" which rely on the rpcd packagelist command to determine which
packages to request when building a new image.

This change modifies the packagelist implementation to use the "Auto-Installed"
field rather than the "user" flag in order to filter dependencies from the
returned list of packages. The resulting package list is identical without
relying on the semantics of the "user" flag which is typically used to
indicate which packages have been interactively installed by the user.

Signed-off-by: Justin Klaassen <justin@tidylabs.app>
[use 'bool' instead of 'int' type for booleans]
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2024-02-22 19:07:37 +00:00
Thomas Weißschuh
c07ab2f910 iwinfo: update byte counter to 64bit
This prevents overflows after 4GiB or 2GiB if the number is interpreted
as signed integer, for example in the blobmbsg json serialization.

Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
2023-06-25 22:03:39 +02:00
Erik Karlsson
31c390727b file: strengthen exec access control
Do not allow setting environment variables if there is a session as
there is no access control for environment variables and allowing
arbitrary data into the environment is unsafe. Do not leak arguments
through unchecked if the size of the buffer for access checking the
whole command line is exceeded. Adjust the maximum number of allowed
arguments so it matches the actual implementation.

Signed-off-by: Erik Karlsson <erik.karlsson@genexis.eu>
2023-06-25 18:46:59 +02:00
Christian Marangi
d97883005f
rc: add option to get info for a single script in list method
Add option to get info for a single script in list method.

To get info of a particular script pass the name arg to the list method.

If the script doesn't exist an empty table is returned.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-01-31 16:11:24 +01:00
Christian Marangi
632b4fc898
rc: add option to skip running check for list method
Running check may be slow and increase result time in the other of 70ms
for the list method.

Add an option to skip running check by passing the skip_running_check as
true in the list method args to speedup execution if the running info is
not needed.

With the option set to true the execution time lower to just 5ms.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-01-31 16:11:23 +01:00
Christian Marangi
5577db9208
rc: add support for scanning USE_PROCD and skip running if not supported
Running check is supported only in procd scripts. This cause prolonged
execution time since the function needs to timeout.

To fix this check if the script USE_PROCD and run running check only if
supported.

Also provide running info only if the running check is supported.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-01-31 16:11:23 +01:00
Christian Marangi
4de3f02e31
rc: fix and improve script scanning START and STOP
Currently we stop searching at the first occurence of START or STOP
entry. This is wrong since we totally miss the other data (START or
STOP) in the occurence of the other.

Fix and improve script scanning by:
- Increase the line max length to 255 char to read it in one go.
- Scan only the first 10 lines.
- Don't stop at the first occurence and try to search also for the other
  data.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-01-31 16:11:17 +01:00
Andre Heider
c0df2a7af7
iwinfo: add "band" and "mhz" to the scan output
Providing the channel alone isn't clear as there're overlapping channels
on e.g. band 2 and 6.

Signed-off-by: Andre Heider <a.heider@gmail.com>
2023-01-21 01:18:12 +01:00
Andre Heider
06ad60fbba
iwinfo: add "band" to the freqlist output
So that consumers don't have to fiddle around with mapping frequencies
to bands, which everyone seems to do a little differently.

Signed-off-by: Andre Heider <a.heider@gmail.com>
2023-01-21 01:18:11 +01:00
Christian Marangi
b32fd32535
iwinfo: add flags to freqlist output
A channel can declare restriction where it should be used only indoors
or should not be used at all.
Expose these restriction in the channel data as additional info with the
restricted info.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2023-01-21 01:18:08 +01:00
Andre Heider
7de4820c87 iwinfo: add "hwmodes_text" to the info output
This is a preformatted string like "ac/ax/b/g/n" for presentation.

Signed-off-by: Andre Heider <a.heider@gmail.com>
2022-12-16 00:26:00 +01:00
Andre Heider
b3f530bc6b iwinfo: clean up rpc_iwinfo_call_hw_ht_mode()
There's no need to call hwmodelist() again, just pass on the earlier
result.

Signed-off-by: Andre Heider <a.heider@gmail.com>
2022-12-16 00:24:56 +01:00
Andre Heider
c46ad61d49 iwinfo: reuse infos provided by libiwinfo
Don't hardcode bit/name pairs, instead iterate over what's known to the
library and use that instead.

This automatically adds the missing ciphers CCMP256 and GCMP256 - and any
future ones.

The only difference in the output is the order of the 'hwmodes' array.

Signed-off-by: Andre Heider <a.heider@gmail.com>
2022-12-16 00:22:03 +01:00
Andre Heider
6c5e900394 iwinfo: constify string map arg for rpc_iwinfo_call_int()
Fixes the build since the string maps have been constified.
2022-12-16 00:21:56 +01:00
Jo-Philipp Wich
8c852b656b ucode: write ucode runtime exceptions to stderr
Write unhandled exceptions in invoked ucode method handlers to stderr in
order to simplify debugging failing scripts.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-09-21 23:25:00 +02:00
Jo-Philipp Wich
e80d0b2d77 ucode: pass-through ubus_rpc_session argument
Allow the special `ubus_rpc_session` method call argument even if it is not
specified in the policy.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-09-12 15:36:14 +02:00
Jo-Philipp Wich
0d02243086 ucode: initialize module search path early
Ensure that the default module search path is initialized before compiling
ucode handler scripts in order to support compile time import statements.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-09-12 13:46:18 +02:00
Petr Štetiar
82904bd4f9 sys: mitigate possible strncpy string truncation
gcc 10 with -O2 reports following:

 In function ‘strncpy’,
     inlined from ‘rpc_sys_packagelist’ at /opt/devel/openwrt/c-projects/rpcd/sys.c:244:4:
 /usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 128 equals destination size [-Werror=stringop-truncation]
   106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 In function ‘strncpy’,
     inlined from ‘rpc_sys_packagelist’ at /opt/devel/openwrt/c-projects/rpcd/sys.c:227:4:
 /usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 128 equals destination size [-Werror=stringop-truncation]
   106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Since it is not possible to avoid truncation by strncpy, it is necessary
to make sure the result of strncpy is properly NUL-terminated and the
NUL must be inserted explicitly, after strncpy has returned.

References: #10442
Reported-by: Alexey Smirnov <s.alexey@gmail.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
2022-08-24 12:51:39 +02:00
Jo-Philipp Wich
ae5afea283 ucode: parse ucode plugin scripts in raw mode, init search path
It makes little sense to execute rpcd ucode plugin scripts in template
mode since those scripts are supposed to output structured JSON data,
so change the parse config to compile scripts in raw mode.

Also initialize the default library search path which is required in
recent ucode versions.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-08-12 21:14:27 +02:00
Christian 'Ansuel' Marangi
1c4825739b iwinfo: fix compilation error with GCC 12
Fix compilation error with GCC 12.

In file included from /home/ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/libubus.h:23,
                 from iwinfo.c:21:
In function 'blobmsg_close_array',
    inlined from 'rpc_iwinfo_assoclist' at iwinfo.c:643:3:
/home/ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/libubox/blobmsg.h:250:9: error: 'c' may be used uninitialized [-Werror=maybe-uninitialized]
  250 |         blob_nest_end(buf, cookie);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
iwinfo.c: In function 'rpc_iwinfo_assoclist':
iwinfo.c:564:15: note: 'c' was declared here
  564 |         void *c, *d, *e;
      |               ^
cc1: all warnings being treated as errors
ninja: build stopped: subcommand failed.

Signed-off-by: Christian 'Ansuel' Marangi <ansuelsmth@gmail.com>
2022-05-31 19:44:26 +02:00
Jo-Philipp Wich
909f2a0476 ucode: adjust to latest ucode api
The public libucode api has been revised to return and expect an
uc_program_t pointer instead of a main function reference.

The program (former main function) is also not implicitly released
by uc_vm_execute() anymore.

Adjust the ucode plugin accordingly to match the new requirements.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2022-02-07 09:55:20 +01:00
Jo-Philipp Wich
4c532bfed2 ucode: add ucode interpreter plugin
The rpcd ucode plugin allows utilizing ucode scripts to register ubus
objects and to implement the objects method callbacks.

Upon startup, rpcd will compile and execute each ucode script in
`$INSTALL_PREFIX/share/ucode/` and register ubus proxy objects and
methods definitions according to the signature returned by the script.

Refer to examples/ucode/example-plugin.uc for details of the signature
format.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-08 20:09:24 +01:00
Jo-Philipp Wich
9c6ba38287 treewide: adjust ubus object type names
Drop the historically inherited "luci-rpc-" prefix and replace it with a
more appropriate "rpcd-plugin-" string.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-08 20:09:24 +01:00
Jo-Philipp Wich
75a96dc281 build: honour CMake install prefix in hardcoded paths
Search plugins, ACL ressources and other data files relative to the compile
time CMAKE_INSTALL_PREFIX instead of hardcoding `/usr`.

Also ensure that plugin libraries are installed into the lib/rpcd subdir.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-12-08 20:09:24 +01:00
Stijn Tintel
d11ffe9383 session: use blobmsg_get_u64 for RPC_DUMP_EXPIRES
We need to use blobmsg_get_u64 for RPC_DUMP_EXPIRES as this is now
BLOBMSG_TYPE_INT64.

Fixes: 20bf958bea ("session: use uloop_timeout_remaining64")
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Acked-by: Jo-Philipp Wich <jo@mein.io>
2021-11-04 14:42:38 +02:00
Stijn Tintel
20bf958bea session: use uloop_timeout_remaining64
The uloop_timeout_remaining is being deprecated.

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Acked-by: John Crispin <john@phrozen.org>
2021-11-04 13:15:38 +02:00
Jo-Philipp Wich
1fa35765dd session: unload rpcd configuration before checking login
Currently, rpcd cached /etc/config/rpcd once on the first login and then
keeps checking login attempts and ACL settings against the in-memory
copy until the process is restarted.

This is not desirable as we would like added, modified or removed accounts
to be effective immediately. In order to achive this behaviour, ensure to
unload the currently loaded rpcd configuration before looking up the login
account section.

Ref: https://github.com/openwrt/luci/issues/5179
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-07-13 20:41:02 +02:00
David Bauer
7a560a1a57 iwinfo: add 802.11ax HE support
Expose 802.11ax HE rate as well as HW / HT mode information. This is
required to add 802.11ax support to LuCI.

Signed-off-by: David Bauer <mail@david-bauer.net>
2021-05-05 01:30:36 +02:00
Daniel Golle
ccb75178cf
sys: packagelist: drop ABI version from package name
Having the ABI version appended to the package name is not very helpful
when checking for updated versions of a package online or requesting
a new image for the device from an updater service. In both cases,
the ABI version could have been bumped meanwhile and that name is then
simply not found.
Resolve this by removing the appended ABI version in the output of the
rpc-sys packagelist call.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2021-03-11 00:17:58 +00:00
Jo-Philipp Wich
d3f2041f43 uci: manually clear uci_ptr flags after uci_delete() operations
This is required to avoid potential use-after-free errors through the
uci_set()->uci_delete()->uci_expand_ptr() call chain when passing
zero-length strings as values.

Ref: https://bugs.openwrt.org/index.php?do=details&task_id=3528
Suggested-by: olegio170 <olegios170@gmail.com>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2021-01-17 21:14:46 +01:00
Ansuel Smith
ea7f4717f8 iwinfo: include ht_operation data only if available
Check if ht_operation data are present and add them accordingly.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
2021-01-06 19:42:14 +00:00
Daniel Golle
5c15f5736d iwinfo: return hwmode 'ad' on 802.11ad-only hardware
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2021-01-05 22:32:45 +00:00
Daniel Golle
e28d4a58bf iwinfo: add support for 802.11ad and GCMP
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2021-01-05 19:09:17 +00:00
Ansuel Smith
4c66b31097 iwinfo: export center channel for info ubus call
Iwinfo export the center channel sued by the wifi. Include this data in
the ubus info call to better know the channel utilizzation of the wifi.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
2021-01-05 19:09:17 +00:00
Ansuel Smith
fd017ba339 iwinfo: add ht and vht operation info to wifi scan
Iwinfo exports ht and vht operation info useful to get channel info of
nearby stations. Add these new info to ubus output.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
2021-01-05 19:09:17 +00:00
Rafał Miłecki
3fea655981 rc: support init.d scripts with START=0
Use negative value (instead of 0) to indicate missing START.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2020-09-18 08:10:56 +02:00
Rafał Miłecki
646daa0bec rc: new ubus object for handling /etc/init.d/ scripts
This commit adds "rc" ubus object with methods "list" and "exec" for
listing and calling init.d script appropriately. It's useful for all
kind of UIs (e.g. LuCI) and custom apps.

Example:
root@OpenWrt:~# ubus call rc list
{
	"blockd": {
		"start": 80,
		"enabled": true,
		"running": true
	},
	"dnsmasq": {
		"start": 19,
		"enabled": true,
		"running": true
	}
}
root@OpenWrt:~# ubus call rc init '{ "name": "blockd", "action": "disable" }'
root@OpenWrt:~# ubus call rc init '{ "name": "dnsmasq", "action": "stop" }'
root@OpenWrt:~# ubus call rc list
{
	"blockd": {
		"start": 80,
		"enabled": false,
		"running": true
	},
	"dnsmasq": {
		"start": 19,
		"enabled": true,
		"running": false
	}
}

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Jo-Philipp Wich <jo@mein.io>
2020-09-10 13:18:09 +02:00
Jo-Philipp Wich
078bb57e07 uci: reset uci_ptr flags when merging options during section add
Fixes: FS#3126
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2020-05-26 16:00:34 +02:00
Fabian Bläse
3df62bcebd session: deny access if password login is disabled
The special characters '!' and '*' in /etc/shadow are
used to disable password login for a specific account.

The character 'x' has no special meaning, but should not
be interpreted as an empty password.

However, rpcd did treat these special characters like no
password was set, which allows access even though the account
is disabled.

By removing the additional checks for these characters, the
encrypted password string is passed to crypt, which returns NULL
if the salt has an invalid format and therefore access is denied.

Fixes: FS#2634

Signed-off-by: Fabian Bläse <fabian@blaese.de>
2020-03-17 19:33:35 +01:00
Daniel Danzberger
efe51f41d6 iwinfo: add current hw and ht mode to info call
Signed-off-by: Daniel Danzberger <daniel@dd-wrt.com>
2020-01-05 19:56:34 +01:00
Jo-Philipp Wich
aaa08366e6 file: extend exec acl checks to commands with arguments
When the initial exec permission check on the executable path fails,
concatenate the command line with spaces and use the resulting string
as lookup path for a second exec permission check.

This allows for exec acls similar to this example:

    "file": {
        "/usr/bin/program --flag --option=1 arg *": [ "exec" ]
    }

The example above would allow executing `/usr/bin/program` with the
arguments `--flag`, `--option=1` and `arg` in exactly this order,
followed by any number of optional arguments as denoted by the
asterisk.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-12-11 09:13:05 +01:00
Jo-Philipp Wich
77ad0de092 plugin: avoid truncating numeric values
When parsing the JSON output of exec plugins, store integer values exceeding
32bit value limits as 64bit integer blob values.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-11-10 21:26:51 +01:00
Jo-Philipp Wich
d442d62dea plugin: fix double free in finish callback
Fixes: 37aa919 ("plugin: fix leaking invoked method name for exec plugins")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 12:01:36 +01:00
Yousong Zhou
ee26d83e98 main: exec_self: make clang analyzer happy
Prevent a theoretical leak of the args memory when the executable path
cannot be found.

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
[fix whitespace, commit description]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 09:26:24 +01:00
Yousong Zhou
90e40bd3d5 file: exec: properly free memory on error
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
[fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 09:26:18 +01:00
Yousong Zhou
9ecfada16d uci: free configs list memory on return
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
[fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 09:25:17 +01:00
Yousong Zhou
32fba361d5 exec: always call finish_cb to allow plugin to free up memory
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
[fix whitespace, subject typo]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 09:24:46 +01:00
Jo-Philipp Wich
ca3e2d5e70 plugin: do not free method name separately
A previous commit changed the allocation method for the call context to
include the method name string memory directly, so we must not treat the
method member separately anymore.

Fixes: 37aa919 ("plugin: fix leaking invoked method name for exec plugins")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 09:23:30 +01:00
Yousong Zhou
02c6e1d08c exec: properly free memory on rpc_exec() error
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
[fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2019-10-29 09:23:22 +01:00