From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup] fix systemd-encoded upid strings in http client
Date: Thu, 19 Nov 2020 10:02:52 +0100 [thread overview]
Message-ID: <20201119090252.31587-1-d.csapak@proxmox.com> (raw)
since we systemd-encode parts of the upid string, and those can contain
characters that are invalid in urls (e.g. '\'), we have to percent encode
those
add a 'percent_encode_component' helper, so that we can maybe change
the AsciiSet for all uses at the same time
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
we can also change the http client interface to take a &[&str] instead
a &str for the path, and always percent encode all components,
but for now this should be enough
src/bin/proxmox-backup-manager.rs | 2 +-
src/bin/proxmox_backup_client/task.rs | 2 +-
src/client/task_log.rs | 3 ++-
src/tools.rs | 7 ++++++-
4 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/bin/proxmox-backup-manager.rs b/src/bin/proxmox-backup-manager.rs
index 219476fc..a763d6d6 100644
--- a/src/bin/proxmox-backup-manager.rs
+++ b/src/bin/proxmox-backup-manager.rs
@@ -245,7 +245,7 @@ async fn task_stop(param: Value) -> Result<Value, Error> {
let mut client = connect()?;
- let path = format!("api2/json/nodes/localhost/tasks/{}", upid_str);
+ let path = format!("api2/json/nodes/localhost/tasks/{}", tools::percent_encode_component(upid_str));
let _ = client.delete(&path, None).await?;
Ok(Value::Null)
diff --git a/src/bin/proxmox_backup_client/task.rs b/src/bin/proxmox_backup_client/task.rs
index 29b2cc00..6f567f22 100644
--- a/src/bin/proxmox_backup_client/task.rs
+++ b/src/bin/proxmox_backup_client/task.rs
@@ -124,7 +124,7 @@ async fn task_stop(param: Value) -> Result<Value, Error> {
let mut client = connect(&repo)?;
- let path = format!("api2/json/nodes/localhost/tasks/{}", upid_str);
+ let path = format!("api2/json/nodes/localhost/tasks/{}", tools::percent_encode_component(upid_str));
let _ = client.delete(&path, None).await?;
Ok(Value::Null)
diff --git a/src/client/task_log.rs b/src/client/task_log.rs
index 7f16d84d..2e2e4d74 100644
--- a/src/client/task_log.rs
+++ b/src/client/task_log.rs
@@ -2,6 +2,7 @@ use anyhow::{bail, Error};
use serde_json::json;
use super::HttpClient;
+use crate::tools;
pub async fn display_task_log(
client: HttpClient,
@@ -9,7 +10,7 @@ pub async fn display_task_log(
strip_date: bool,
) -> Result<(), Error> {
- let path = format!("api2/json/nodes/localhost/tasks/{}/log", upid_str);
+ let path = format!("api2/json/nodes/localhost/tasks/{}/log", tools::percent_encode_component(upid_str));
let mut start = 1;
let limit = 500;
diff --git a/src/tools.rs b/src/tools.rs
index a9b3378d..08f9d22f 100644
--- a/src/tools.rs
+++ b/src/tools.rs
@@ -12,7 +12,7 @@ use std::path::Path;
use anyhow::{bail, format_err, Error};
use serde_json::Value;
use openssl::hash::{hash, DigestBytes, MessageDigest};
-use percent_encoding::AsciiSet;
+use percent_encoding::{utf8_percent_encode, AsciiSet};
pub use proxmox::tools::fd::Fd;
@@ -289,6 +289,11 @@ pub fn extract_cookie(cookie: &str, cookie_name: &str) -> Option<String> {
None
}
+/// percent encode a url component
+pub fn percent_encode_component(comp: &str) -> String {
+ utf8_percent_encode(comp, percent_encoding::NON_ALPHANUMERIC).to_string()
+}
+
pub fn join(data: &Vec<String>, sep: char) -> String {
let mut list = String::new();
--
2.20.1
next reply other threads:[~2020-11-19 9:02 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-19 9:02 Dominik Csapak [this message]
2020-11-19 10:01 ` [pbs-devel] applied: " Dietmar Maurer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201119090252.31587-1-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.