From 99dbe70a89e63bea6e70fd0442e8f470874460de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Sun, 22 Mar 2026 13:44:05 +0800 Subject: [PATCH] fix(madmin): handle blank service-account expiration (#2254) Co-authored-by: heihutu --- crates/madmin/src/user.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/madmin/src/user.rs b/crates/madmin/src/user.rs index b9be66840..50b23a862 100644 --- a/crates/madmin/src/user.rs +++ b/crates/madmin/src/user.rs @@ -508,8 +508,12 @@ where let Some(expiration) = expiration else { return Ok(None); }; + let expiration = expiration.trim(); + if expiration.is_empty() { + return Ok(None); + } - let expiration = OffsetDateTime::parse(&expiration, &Rfc3339).map_err(D::Error::custom)?; + let expiration = OffsetDateTime::parse(expiration, &Rfc3339).map_err(D::Error::custom)?; if expiration.unix_timestamp() == 0 { return Ok(None); } @@ -1272,4 +1276,23 @@ mod tests { assert!(long_req.validate().is_ok()); } + + #[test] + fn test_sr_svc_acc_create_deserialize_empty_expiration_as_none() { + let payload = r#"{ + "parent": "useralpha", + "accessKey": "svcalpha", + "secretKey": "svcAlphaSecret123", + "groups": [], + "claims": {}, + "sessionPolicy": null, + "status": "on", + "name": "uploaderKey", + "description": "alpha upload key", + "expiration": " " + }"#; + + let svc: SRSvcAccCreate = serde_json::from_str(payload).unwrap(); + assert!(svc.expiration.is_none()); + } }