From 968a0ab2614b35bc40ac7ae1ab04143ef77b52e8 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 19 Nov 2020 10:02:52 +0100 Subject: [PATCH] fix systemd-encoded upid strings in http client 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 --- 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 { 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 { 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 { 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, sep: char) -> String { let mut list = String::new();