mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 18:24:36 +00:00
multi_fix: harden peer/session handling, tighten foreign-network trust, and improve web client metadata (#1999)
* machine-id should be scoped unbder same user-id * feat: report device os metadata to console * fix sync root key cause packet loss * fix tun packet not invalid * fix faketcp cause lat jitter * fix some packet not decrypt * fix peer info patch, improve performance of update self info * fix foreign credential identity mismatch handling
This commit is contained in:
@@ -134,6 +134,15 @@ impl TrustedKeyMapManager {
|
||||
}
|
||||
|
||||
pub fn verify_trusted_key(&self, pubkey: &[u8], network_name: &str) -> bool {
|
||||
self.verify_trusted_key_with_source(pubkey, network_name, None)
|
||||
}
|
||||
|
||||
pub fn verify_trusted_key_with_source(
|
||||
&self,
|
||||
pubkey: &[u8],
|
||||
network_name: &str,
|
||||
source: Option<TrustedKeySource>,
|
||||
) -> bool {
|
||||
let Some(trusted_keys) = self
|
||||
.network_trusted_keys
|
||||
.get(network_name)
|
||||
@@ -146,7 +155,11 @@ impl TrustedKeyMapManager {
|
||||
return false;
|
||||
};
|
||||
|
||||
!metadata.is_expired()
|
||||
if let Some(source) = source {
|
||||
metadata.source == source && !metadata.is_expired()
|
||||
} else {
|
||||
!metadata.is_expired()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn list_trusted_keys(&self, network_name: &str) -> Vec<(Vec<u8>, TrustedKeyMetadata)> {
|
||||
@@ -542,6 +555,16 @@ impl GlobalCtx {
|
||||
false
|
||||
}
|
||||
|
||||
pub fn is_pubkey_trusted_with_source(
|
||||
&self,
|
||||
pubkey: &[u8],
|
||||
network_name: &str,
|
||||
source: TrustedKeySource,
|
||||
) -> bool {
|
||||
self.trusted_keys
|
||||
.verify_trusted_key_with_source(pubkey, network_name, Some(source))
|
||||
}
|
||||
|
||||
/// Atomically replace all OSPF trusted keys with a new set
|
||||
/// Called by OSPF route layer after each route update
|
||||
pub fn update_trusted_keys(&self, keys: TrustedKeyMap, network_name: &str) {
|
||||
@@ -676,6 +699,37 @@ pub mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn trusted_key_source_lookup_is_precise() {
|
||||
let config = TomlConfigLoader::default();
|
||||
let global_ctx = GlobalCtx::new(config);
|
||||
let network_name = "net1";
|
||||
let pubkey = vec![1; 32];
|
||||
|
||||
global_ctx.update_trusted_keys(
|
||||
HashMap::from([(
|
||||
pubkey.clone(),
|
||||
TrustedKeyMetadata {
|
||||
source: TrustedKeySource::OspfCredential,
|
||||
expiry_unix: None,
|
||||
},
|
||||
)]),
|
||||
network_name,
|
||||
);
|
||||
|
||||
assert!(global_ctx.is_pubkey_trusted(&pubkey, network_name));
|
||||
assert!(!global_ctx.is_pubkey_trusted_with_source(
|
||||
&pubkey,
|
||||
network_name,
|
||||
TrustedKeySource::OspfNode,
|
||||
));
|
||||
assert!(global_ctx.is_pubkey_trusted_with_source(
|
||||
&pubkey,
|
||||
network_name,
|
||||
TrustedKeySource::OspfCredential,
|
||||
));
|
||||
}
|
||||
|
||||
pub fn get_mock_global_ctx_with_network(
|
||||
network_identy: Option<NetworkIdentity>,
|
||||
) -> ArcGlobalCtx {
|
||||
|
||||
Reference in New Issue
Block a user