lib-nixio / luci-base: Fix for reading csrf token prevents file upload 563/head
authorDaniel Dickinson <openwrt@daniel.thecshore.com>
Tue, 15 Dec 2015 16:37:33 +0000 (11:37 -0500)
committerDaniel Dickinson <openwrt@daniel.thecshore.com>
Tue, 15 Dec 2015 18:12:29 +0000 (13:12 -0500)
commitb130ca554f13e17c787a1c6fd09e67dd7727a4d3
tree1be82d3ec849d76104228c1b263a547b334077f8
parent0ec3f91a0c7a8c71980f5e70f3322397e496a8d6
lib-nixio / luci-base: Fix for reading csrf token prevents file upload

The call to http.formvalue in order to read the csrf token causes
_parse_input to be triggered *before* controllers and cbi maps have
been built.  This results in the failure of file uploads because
the file handler is not yet in place when _parse_input gets called,
and it is in _parse_input that POST data is parsed (including files).

To fix this we add the ability to write file fields to temporary
files (using mkstemp and unlink in nixio.file) and use this to
store file data until the filehandler is registered, with a
fallback to reading the file data into memory.

Once the filehandler callback gets registered we iterate
though all previously parsed (saved) files and copy the
data to the file handler, and then close the temporary
file (which finally removes because we unlinked after
creating the file, but didn't close the file so unlink
was deferred).

Signed-off-by: Daniel Dickinson <openwrt@daniel.thecshore.com>
libs/luci-lib-nixio/src/file.c
modules/luci-base/luasrc/http.lua
modules/luci-base/luasrc/http/protocol.lua