authentication: fix loopback detection
authorSven Rademakers <sven.rademakers@gmail.com>
Wed, 13 Mar 2024 14:52:53 +0000 (14:52 +0000)
committerSven Rademakers <sven.rademakers@gmail.com>
Wed, 13 Mar 2024 15:00:58 +0000 (15:00 +0000)
When an request is coming from a loopback interface, authentication is
not required. This commit fixes ipv4 addresses mapped inside ipv6
addresses, by first converting to a canonical address. There addresses
were otherwise falsely tested as a non loopback addresses.

Cargo.toml
src/authentication/authentication_service.rs

index 26eafd1e77955c9475a676e7089cfd55b8a35c17..4c8f9f6cb4f97c064c38bba741c922fc4122780e 100644 (file)
@@ -3,8 +3,7 @@ name = "bmcd"
 version = "2.0.5"
 edition = "2021"
 license = "Apache-2.0"
-# MSRV required to build clap dependency
-rust-version = "1.70.0"
+rust-version = "1.75.0"
 
 [dependencies]
 actix = "0.13.3"
index aafb700f07ed95f3516876c945531490d391b9ac..0bc8d24a902af47de5812895b698faf9acf696d9 100644 (file)
@@ -25,16 +25,9 @@ use actix_web::{
 use futures::future::LocalBoxFuture;
 use futures::StreamExt;
 use serde::Serialize;
-use std::{
-    net::{IpAddr, Ipv4Addr, Ipv6Addr},
-    rc::Rc,
-    sync::Arc,
-};
+use std::{rc::Rc, sync::Arc};
 use tokio::sync::Mutex;
 
-const LOCALHOSTV4: IpAddr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
-const LOCALHOSTV6: IpAddr = IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
-
 /// This authentication service is designed to prepare for implementing "Redfish
 /// Session Login Authentication" as good as possible. Redfish is not yet
 /// implemented in this product, until then this session based, token
@@ -82,7 +75,7 @@ where
         if request
             .head()
             .peer_addr
-            .is_some_and(|addr| addr.ip() == LOCALHOSTV6 || addr.ip() == LOCALHOSTV4)
+            .is_some_and(|addr| addr.ip().to_canonical().is_loopback())
         {
             return Box::pin(async move {
                 service