From 966b2e38585a67ad1743cdfb9ad9a53120df43e1 Mon Sep 17 00:00:00 2001 From: Christian Muirhead Date: Mon, 24 Nov 2025 18:41:49 +1300 Subject: [PATCH] Enable using the userpass client to log in to an ldap backend The ldap backend response comes back with `"data": {}` because of this line: https://github.com/hashicorp/vault/blob/main/builtin/credential/ldap/backend.go#L121 For the login request `EndpointResult.data` is currently `Option<()>`, but testing with serde shows that will only accept `"data": null`. Changing the login response to `HashMap<(), ()>` means `EndpointResult.data` can be `null` or `{}`. --- src/api.rs | 4 ++-- src/api/auth/userpass/requests.rs | 3 ++- src/api/auth/userpass/responses.rs | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/api.rs b/src/api.rs index 3f21fb71..efd08b14 100644 --- a/src/api.rs +++ b/src/api.rs @@ -334,13 +334,13 @@ where pub async fn auth(client: &impl Client, endpoint: E) -> Result where - E: Endpoint, + E: Endpoint, { trace!( "Executing {} and returning authentication info", endpoint.path() ); - let r: EndpointResult<()> = endpoint + let r: EndpointResult<_> = endpoint .with_middleware(client.middle()) .exec(client.http()) .await diff --git a/src/api/auth/userpass/requests.rs b/src/api/auth/userpass/requests.rs index 15d29c7e..40ebdfc1 100644 --- a/src/api/auth/userpass/requests.rs +++ b/src/api/auth/userpass/requests.rs @@ -1,4 +1,4 @@ -use super::responses::{ListUsersResponse, ReadUserResponse}; +use super::responses::{ListUsersResponse, LoginResponse, ReadUserResponse}; use rustify_derive::Endpoint; /// ## Create/Update User @@ -149,6 +149,7 @@ pub struct ListUsersRequest { #[endpoint( path = "/auth/{self.mount}/login/{self.username}", method = "POST", + response = "LoginResponse", builder = "true" )] #[builder(setter(into, strip_option), default)] diff --git a/src/api/auth/userpass/responses.rs b/src/api/auth/userpass/responses.rs index daf95b41..74f6e7ed 100644 --- a/src/api/auth/userpass/responses.rs +++ b/src/api/auth/userpass/responses.rs @@ -1,4 +1,5 @@ use serde::{Deserialize, Serialize}; +use std::collections::HashMap; /// Response from executing /// [ReadUserRequest][crate::api::auth::userpass::requests::ReadUserRequest] @@ -21,3 +22,5 @@ pub struct ReadUserResponse { pub struct ListUsersResponse { pub keys: Vec, } + +pub type LoginResponse = HashMap<(), ()>;