diff options
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/fs.js | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/fs.js b/modules/luci-base/htdocs/luci-static/resources/fs.js index df3a14b75..8d2760dd5 100644 --- a/modules/luci-base/htdocs/luci-static/resources/fs.js +++ b/modules/luci-base/htdocs/luci-static/resources/fs.js @@ -390,12 +390,17 @@ var FileSystem = L.Class.extend(/** @lends LuCI.fs.prototype */ { * `text` to interpret the output as string, `json` to parse the output * as JSON or `blob` to return the output as Blob instance. * + * @param {boolean} [latin1=false] + * Whether to encode the command line as Latin1 instead of UTF-8. This + * is usually not needed but can be useful for programs that cannot + * handle UTF-8 input. + * * @returns {Promise<*>} * Returns a promise resolving with the command stdout output interpreted * according to the specified type or rejecting with an error stating the * failure reason. */ - exec_direct: function(command, params, type) { + exec_direct: function(command, params, type, latin1) { var cmdstr = String(command) .replace(/\\/g, '\\\\').replace(/(\s)/g, '\\$1'); @@ -404,8 +409,13 @@ var FileSystem = L.Class.extend(/** @lends LuCI.fs.prototype */ { cmdstr += ' ' + String(params[i]) .replace(/\\/g, '\\\\').replace(/(\s)/g, '\\$1'); + if (latin1) + cmdstr = escape(cmdstr).replace(/\+/g, '%2b'); + else + cmdstr = encodeURIComponent(cmdstr); + var postdata = 'sessionid=%s&command=%s' - .format(encodeURIComponent(L.env.sessionid), encodeURIComponent(cmdstr)); + .format(encodeURIComponent(L.env.sessionid), cmdstr); return L.Request.post(L.env.cgi_base + '/cgi-exec', postdata, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, |