After fix for deleting list elements by index this function was
broken and didn't allow to invoke from command line:
uci set some.fancy.list=''
i.e. list wasn't cleared
Signed-off-by: Krzysztof Kuźnik <k.kuznik@avsystem.com>
Hi
Using uci as a non root user i can get network configuration but not network state (for exemple).
The idea of this patch is to copy permission from config file, or if it doesn't exist use UCI_FILEMODE / UCI_DIRMODE
Tested on tplink wr1043nd. (you have to remove some mkdir from /etc/init.d/boot to fully see this patch work)
If you apply this patch (or a modified version), please also backport to AA
Signed-off-by: Etienne CHAMPETIER <etienne.champetier@free.fr>
openwrt-devel mailing list
openwrt-devel@lists.openwrt.orghttps://lists.openwrt.org/mailman/listinfo/openwrt-devel
When encoding list_del commands in delta files, '_' is used as prefix but this
breaks any command operating on files starting with an underscore since the
command prefix becomes indistinguishable from the filename.
The regression was introduced with ec8cbbbe0f.
Avoid this problem by using '~' as command prefix for list deletions.
This memory leak can be reproduced using a tight loop to uci:get() a config.
lua -e 'require("posix"); require("uci");
function getconf()
local tmp, uc = uci.cursor();
tmp = uc:get("system", "ntp", "enable_server");
end;
while 1
do
for i=0,1000 do getconf() end;
print("gc");
print(collectgarbage("count"));
collectgarbage();
print(collectgarbage("count"));
print("sleep 1");
posix.sleep(1);
end'
In file file.c function uci_file_load() allocates memory for filename.
When uci_open_stream() failed with exception this memory was never freed.
This patch makes call to uci_open_stream() wrapped in exception handling
inside uci_file_load() where filename is freed.
Signed-off-by: Krzysztof Kuznik <k.kuznik@avsystem.com>
The previous rework of the change serialization caused some deltas to incorrectly
get promoted to list appends. Rework the code to explicitely check for an add list
change type, in all other cases simply overwrite existing fields with the current
string value instead of coercing existing values into a table and append to that.
This hopefully sorts out the remaining issues.
Since the first delta of a new list is of type UCI_CMD_CHANGE and
not UCI_CMD_LIST_ADD, the current code does not start a new table
and subsequent items are silently disacarded. Expose all items of
new list by coercing the existing string element into a table when
encountering subsequent items.