[Libreoffice-commits] online.git: 3 commits - loleaflet/src loolwsd/LOOLWSD.cpp
Pranav Kant
pranavk at collabora.co.uk
Mon Oct 3 05:47:13 UTC 2016
loleaflet/src/layer/tile/TileLayer.js | 8 +++--
loolwsd/LOOLWSD.cpp | 54 ++++++++++++++++++++++++----------
2 files changed, 45 insertions(+), 17 deletions(-)
New commits:
commit 7e57ae5dce1a3ed7e1f8951b4fc73f2fee5c10ec
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Mon Oct 3 11:16:09 2016 +0530
loleaflet: Don't add these layers in readonly mode
Change-Id: I17437f53921dc3d5036be4a9650213a7eb0895dd
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 061db21..62ee1a9 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -144,11 +144,15 @@ L.TileLayer = L.GridLayer.extend({
this._initContainer();
this._getToolbarCommandsValues();
this._selections = new L.LayerGroup();
- map.addLayer(this._selections);
+ if (this.options.permission !== 'readonly') {
+ map.addLayer(this._selections);
+ }
// This layergroup contains all the layers corresponding to other's view
this._viewLayerGroup = new L.LayerGroup();
- map.addLayer(this._viewLayerGroup);
+ if (this.options.permission !== 'readonly') {
+ map.addLayer(this._viewLayerGroup);
+ }
this._debug = map.options.debug;
this._debugInit();
commit 3fa2115fa18ca8b53a9f3f4659eb0f280c0f5125
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Mon Oct 3 10:51:20 2016 +0530
loolwsd: security: Cleanup HTTP download request
Sanitize for some funny inputs.
Change-Id: I450cb5ed6e03e9809308e8f763af2c2a66fcecb0
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 5372b19..77a0399 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -555,15 +555,8 @@ private:
{
Log::info("File download request.");
//TODO: Check that the user in question has access to this file!
- const std::string dirPath = LOOLWSD::ChildRoot + tokens[3]
- + JAILED_DOCUMENT_ROOT + tokens[4];
- std::string fileName;
- URI::decode(tokens[5], fileName);
- const std::string filePath = dirPath + "/" + fileName;
- Log::info("HTTP request for: " + filePath);
- File file(filePath);
- // Validate the dockey
+ // 1. Validate the dockey
std::string decodedUri;
URI::decode(tokens[2], decodedUri);
const auto docKey = DocumentBroker::getDocKey(DocumentBroker::sanitizeURI(decodedUri));
@@ -573,24 +566,55 @@ private:
{
throw BadRequestException("DocKey [" + docKey + "] is invalid.");
}
+
+ // 2. Cross-check if received child id is correct
+ if (docBrokerIt->second->getJailId() != tokens[3])
+ {
+ throw BadRequestException("ChildId does not correspond to docKey");
+ }
+
+ // 3. Don't let user download the file in main doc directory containing
+ // the document being edited otherwise we will end up deleting main directory
+ // after download finishes
+ if (docBrokerIt->second->getJailId() == tokens[4])
+ {
+ throw BadRequestException("RandomDir cannot be equal to ChildId");
+ }
docBrokersLock.unlock();
- if (file.exists())
+ std::string fileName;
+ bool responded = false;
+ URI::decode(tokens[5], fileName);
+ const Path filePath(LOOLWSD::ChildRoot + tokens[3]
+ + JAILED_DOCUMENT_ROOT + tokens[4] + "/" + fileName);
+ Log::info("HTTP request for: " + filePath.toString());
+ if (filePath.isAbsolute() && File(filePath).exists())
{
response.set("Access-Control-Allow-Origin", "*");
HTMLForm form(request);
const std::string mimeType = form.has("mime_type")
? form.get("mime_type")
: "application/octet-stream";
- response.sendFile(filePath, mimeType);
- //TODO: Cleanup on error.
- Util::removeFile(dirPath, true);
- return true;
+ try
+ {
+ response.sendFile(filePath.toString(), mimeType);
+ responded = true;
+ }
+ catch (const Exception& exc)
+ {
+ Log::error() << "Error sending file to client. PocoException: " << exc.displayText()
+ << (exc.nested() ? " (" + exc.nested()->displayText() + ")" : "")
+ << Log::end;
+ }
+
+ Util::removeFile(File(filePath.parent()).path(), true);
}
else
{
- Log::error("Download file [" + filePath + "] not found.");
+ Log::error("Download file [" + filePath.toString() + "] not found.");
}
+
+ return responded;
}
throw BadRequestException("Invalid or unknown request.");
commit 700a310d359541191554ecad9c6608617cd92eb1
Author: Pranav Kant <pranavk at collabora.co.uk>
Date: Sat Oct 1 14:59:57 2016 +0530
loolwsd: Fix incorrect log messsage
This can be a POST request too.
Change-Id: I673fb94fc8a4b0cc09ed166f04dbad94ca2a041a
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index a54378a..5372b19 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -938,7 +938,7 @@ public:
const auto id = LOOLWSD::GenSessionId();
Poco::URI requestUri(request.getURI());
- Log::debug("Handling GET: " + request.getURI());
+ Log::debug("Handling: " + request.getURI());
StringTokenizer reqPathTokens(request.getURI(), "/?", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
More information about the Libreoffice-commits
mailing list