Skip to content

Commit b8e54ba

Browse files
wojcik91Maciej Wójcik
and
Maciej Wójcik
authored
fix: hide private keys in logs (#42)
* add manual `Debug` implementations to hide private keys * update dependencies * bump version * update server example --------- Co-authored-by: Maciej Wójcik <[email protected]>
1 parent 58b4094 commit b8e54ba

File tree

5 files changed

+42
-14
lines changed

5 files changed

+42
-14
lines changed

Cargo.lock

+9-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "defguard_wireguard_rs"
3-
version = "0.3.1"
3+
version = "0.3.2"
44
edition = "2021"
55
description = "A unified multi-platform high-level API for managing WireGuard interfaces"
66
license = "Apache-2.0"

examples/server.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
4040
port: 12345,
4141
peers: vec![peer],
4242
};
43+
println!("Prepared interface configuration: {interface_config:?}");
4344

4445
// apply initial interface configuration
4546
wgapi.configure_interface(&interface_config)?;
4647

4748
// read current interface status
4849
let host = wgapi.read_interface_data()?;
49-
println!("WireGuard interface initial config: {host:#?}");
50+
println!("WireGuard interface after configuration: {host:#?}");
5051

5152
// add more WireGuard clients
5253
for peer_id in 3..13 {

src/host.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
33
use std::{
44
collections::HashMap,
5+
fmt::{Debug, Formatter},
56
io::{self, BufRead, BufReader, Read},
67
net::SocketAddr,
78
str::FromStr,
@@ -164,14 +165,25 @@ impl Peer {
164165
}
165166

166167
/// WireGuard host representation.
167-
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
168+
#[derive(Default, Clone, Serialize, Deserialize)]
168169
pub struct Host {
169170
pub listen_port: u16,
170171
pub private_key: Option<Key>,
171172
pub(super) fwmark: Option<u32>,
172173
pub peers: HashMap<Key, Peer>,
173174
}
174175

176+
// implement manually to avoid exposing private keys
177+
impl Debug for Host {
178+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
179+
f.debug_struct("Host")
180+
.field("listen_port", &self.listen_port)
181+
.field("fwmark", &self.fwmark)
182+
.field("peers", &self.peers)
183+
.finish()
184+
}
185+
}
186+
175187
impl Host {
176188
/// Create new `Host` with a given `listen_port` and `private_key`.
177189
#[must_use]

src/lib.rs

+17-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,10 @@ mod wireguard_interface;
7272
extern crate log;
7373

7474
use serde::{Deserialize, Serialize};
75-
use std::process::Output;
75+
use std::{
76+
fmt::{Debug, Formatter},
77+
process::Output,
78+
};
7679

7780
use self::{
7881
error::WireguardInterfaceError,
@@ -92,7 +95,7 @@ pub use wgapi_userspace::WireguardApiUserspace;
9295
pub use wireguard_interface::WireguardInterfaceApi;
9396

9497
/// Host WireGuard interface configuration
95-
#[derive(Debug, Clone, Serialize, Deserialize)]
98+
#[derive(Clone, Serialize, Deserialize)]
9699
pub struct InterfaceConfiguration {
97100
pub name: String,
98101
pub prvkey: String,
@@ -101,6 +104,18 @@ pub struct InterfaceConfiguration {
101104
pub peers: Vec<Peer>,
102105
}
103106

107+
// implement manually to avoid exposing private keys
108+
impl Debug for InterfaceConfiguration {
109+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
110+
f.debug_struct("InterfaceConfiguration")
111+
.field("name", &self.name)
112+
.field("address", &self.address)
113+
.field("port", &self.port)
114+
.field("peers", &self.peers)
115+
.finish()
116+
}
117+
}
118+
104119
impl TryFrom<&InterfaceConfiguration> for Host {
105120
type Error = WireguardInterfaceError;
106121

0 commit comments

Comments
 (0)