From f2f7b6ffec7bf657966353c850d25c6ab218ff7c Mon Sep 17 00:00:00 2001 From: Vika Date: Tue, 22 Oct 2024 21:52:10 +0300 Subject: vendor libsecret The libsecret-rs crate is unmaintained, so I'm vendoring it for now. Bumping the glib version turned out to be enough. The exact process I used was: 1. Cloning the repository 2. Making changes 3. `cargo build` to ensure it works 4. `cargo package --no-verify` (b/c it tries to build all crates separately instead of the entire workspace as a whole) 5. `mkdir libsecret/sys -p` 6. `tar --strip-components 1 -C libsecret -xvf ../libsecret-rs/target/package/libsecret-0.6.0.crate` 7. `tar --strip-components 1 -C libsecret/sys -xvf ../libsecret-rs/target/package/libsecret-sys-0.6.0.crate` Then `Cargo.toml` is modified to ensure the libsecret and its `-sys` crate build out of my vendored sources. In the future, if I gain maintainership of the `libsecret` crate, I could just revert this commit to make it point back to the upstream. --- src/lib.rs | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 37b54a5..a644411 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -55,24 +55,7 @@ impl App { let mut attrs = std::collections::HashMap::default(); attrs.insert(crate::secrets::TOKEN_KIND, crate::secrets::ACCESS_TOKEN); attrs - }, libsecret::SearchFlags::ALL).await - // SAFETY: the representation of `glib::Error` is the same, since we're - // building against the same C library, so while this is a safety crime, it's - // probably a minor one. - // - // Additionally I'm ensuring the original wrapper is forgotten in case it has - // a drop handler that decrements a reference counter or something. - // - // This is only a workaround for libsecret not being updated in time. - .map_err(|e| unsafe { - let ptr = e.as_ptr(); - std::mem::forget(e); - glib::translate::from_glib_full::<_, glib::Error>( - // We can't name the original type here. - #[allow(clippy::missing_transmute_annotations)] - std::mem::transmute::<_, *mut glib::ffi::GError>(ptr) - ) - })?; + }, libsecret::SearchFlags::ALL).await?; if retrievables.is_empty() { Ok(None) @@ -100,17 +83,7 @@ impl App { let micropub = crate::micropub::Client::new( http.clone(), micropub_uri, - retrievable.retrieve_secret_future().await - // SAFETY: see above - .map_err(|e| unsafe { - let ptr = e.as_ptr(); - std::mem::forget(e); - glib::translate::from_glib_full::<_, glib::Error>( - // We can't name the original type here. - #[allow(clippy::missing_transmute_annotations)] - std::mem::transmute::<_, *mut glib::ffi::GError>(ptr) - ) - })? + retrievable.retrieve_secret_future().await? .unwrap() .text() .unwrap() -- cgit 1.4.1