mirror of
				https://github.com/stalwartlabs/mail-server.git
				synced 2025-10-29 05:45:54 +08:00 
			
		
		
		
	Convert IPv6 mapped addresses to IPv4
This commit is contained in:
		
							parent
							
								
									f069691844
								
							
						
					
					
						commit
						c3d6ac5401
					
				
					 1 changed files with 18 additions and 7 deletions
				
			
		|  | @ -21,7 +21,7 @@ | |||
|  * for more details. | ||||
| */ | ||||
| 
 | ||||
| use std::sync::Arc; | ||||
| use std::{net::IpAddr, sync::Arc}; | ||||
| 
 | ||||
| use tokio::{ | ||||
|     net::{TcpListener, TcpStream}, | ||||
|  | @ -88,14 +88,25 @@ impl Server { | |||
|                         stream = listener.accept() => { | ||||
|                             match stream { | ||||
|                                 Ok((stream, remote_addr)) => { | ||||
|                                     // Convert mapped IPv6 addresses to IPv4
 | ||||
|                                     let remote_ip = match remote_addr.ip() { | ||||
|                                         IpAddr::V6(ip) => { | ||||
|                                             ip.to_ipv4_mapped() | ||||
|                                             .map(IpAddr::V4) | ||||
|                                             .unwrap_or(IpAddr::V6(ip)) | ||||
|                                         } | ||||
|                                         remote_ip => remote_ip, | ||||
|                                     }; | ||||
|                                     let remote_port = remote_addr.port(); | ||||
| 
 | ||||
|                                     // Enforce concurrency
 | ||||
|                                     if let Some(in_flight) = instance.limiter.is_allowed() { | ||||
|                                         let span = tracing::info_span!( | ||||
|                                             "session", | ||||
|                                             instance = instance.id, | ||||
|                                             protocol = ?instance.protocol, | ||||
|                                             remote.ip = remote_addr.ip().to_string(), | ||||
|                                             remote.port = remote_addr.port(), | ||||
|                                             remote.ip = remote_ip.to_string(), | ||||
|                                             remote.port = remote_port, | ||||
|                                         ); | ||||
| 
 | ||||
|                                         // Set TCP options
 | ||||
|  | @ -132,8 +143,8 @@ impl Server { | |||
|                                         manager.spawn(SessionData { | ||||
|                                             stream, | ||||
|                                             local_ip, | ||||
|                                             remote_ip: remote_addr.ip(), | ||||
|                                             remote_port: remote_addr.port(), | ||||
|                                             remote_ip, | ||||
|                                             remote_port, | ||||
|                                             span, | ||||
|                                             in_flight, | ||||
|                                             instance: instance.clone(), | ||||
|  | @ -144,8 +155,8 @@ impl Server { | |||
|                                             event = "too-many-requests", | ||||
|                                             instance = instance.id, | ||||
|                                             protocol = ?instance.protocol, | ||||
|                                             remote.ip = remote_addr.ip().to_string(), | ||||
|                                             remote.port = remote_addr.port(), | ||||
|                                             remote.ip = remote_ip.to_string(), | ||||
|                                             remote.port = remote_port, | ||||
|                                             max_concurrent = instance.limiter.max_concurrent, | ||||
|                                             "Too many concurrent connections." | ||||
|                                         ); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue