mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-09-20 02:32:56 +00:00
@@ -1365,6 +1365,7 @@ access_cb(evhtp_request_t *req, void *arg)
|
|||||||
char *error = NULL;
|
char *error = NULL;
|
||||||
char *token = NULL;
|
char *token = NULL;
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
|
char *dec_filename = NULL;
|
||||||
const char *repo_id = NULL;
|
const char *repo_id = NULL;
|
||||||
const char *data = NULL;
|
const char *data = NULL;
|
||||||
const char *operation = NULL;
|
const char *operation = NULL;
|
||||||
@@ -1386,6 +1387,9 @@ access_cb(evhtp_request_t *req, void *arg)
|
|||||||
token = parts[1];
|
token = parts[1];
|
||||||
filename = parts[2];
|
filename = parts[2];
|
||||||
|
|
||||||
|
// The filename is url-encoded.
|
||||||
|
dec_filename = g_uri_unescape_string(filename, NULL);
|
||||||
|
|
||||||
webaccess = seaf_web_at_manager_query_access_token (seaf->web_at_mgr, token);
|
webaccess = seaf_web_at_manager_query_access_token (seaf->web_at_mgr, token);
|
||||||
if (!webaccess) {
|
if (!webaccess) {
|
||||||
error = "Access token not found";
|
error = "Access token not found";
|
||||||
@@ -1436,18 +1440,19 @@ access_cb(evhtp_request_t *req, void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!repo->encrypted && byte_ranges) {
|
if (!repo->encrypted && byte_ranges) {
|
||||||
if (do_file_range (req, repo, data, filename, operation, byte_ranges, user) < 0) {
|
if (do_file_range (req, repo, data, dec_filename, operation, byte_ranges, user) < 0) {
|
||||||
error = "Internal server error\n";
|
error = "Internal server error\n";
|
||||||
error_code = EVHTP_RES_SERVERR;
|
error_code = EVHTP_RES_SERVERR;
|
||||||
goto on_error;
|
goto on_error;
|
||||||
}
|
}
|
||||||
} else if (do_file(req, repo, data, filename, operation, key, user) < 0) {
|
} else if (do_file(req, repo, data, dec_filename, operation, key, user) < 0) {
|
||||||
error = "Internal server error\n";
|
error = "Internal server error\n";
|
||||||
error_code = EVHTP_RES_SERVERR;
|
error_code = EVHTP_RES_SERVERR;
|
||||||
goto on_error;
|
goto on_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
success:
|
success:
|
||||||
|
g_free (dec_filename);
|
||||||
g_strfreev (parts);
|
g_strfreev (parts);
|
||||||
if (repo != NULL)
|
if (repo != NULL)
|
||||||
seaf_repo_unref (repo);
|
seaf_repo_unref (repo);
|
||||||
@@ -1459,6 +1464,7 @@ success:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
on_error:
|
on_error:
|
||||||
|
g_free (dec_filename);
|
||||||
g_strfreev (parts);
|
g_strfreev (parts);
|
||||||
if (repo != NULL)
|
if (repo != NULL)
|
||||||
seaf_repo_unref (repo);
|
seaf_repo_unref (repo);
|
||||||
|
Reference in New Issue
Block a user