diff --git a/.circleci/config.yml b/.circleci/config.yml index f0a689592..d82148a07 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,9 +44,11 @@ jobs: cargo clippy --all-targets --all-features -- -D warnings - run: name: Audit Dependencies - # Disable: - # 1. http/hyper advisory: outdated http due to yup-oauth2 3.1.1, tungstenite 0.9.2 - command: cargo audit --ignore RUSTSEC-2019-0033 --ignore RUSTSEC-2019-0034 + # FIXME: Disabled: + # 1. spin: is no longer actively maintained + # 2. sized-chunks: no safe upgrade. + # 3. net2: has been removed from crates, still present as a dep to tokio + command: cargo audit --ignore RUSTSEC-2019-0031 --ignore RUSTSEC-2020-0041 --ignore RUSTSEC-2020-0016 test-md: docker: diff --git a/Cargo.lock b/Cargo.lock index 2c332138d..5d6f2f972 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1015,7 +1015,6 @@ dependencies = [ "metrics", "metrics-core", "metrics-runtime", - "net2", "num-bigint", "once_cell", "parking_lot 0.10.2", @@ -1026,6 +1025,7 @@ dependencies = [ "secrecy", "serde", "serde_json", + "socket2", "tokio 0.2.22", "tokio-retry", "tracing", @@ -1140,13 +1140,13 @@ dependencies = [ "interledger-errors", "interledger-packet", "interledger-service", - "net2", "num-bigint", "once_cell", "parking_lot 0.10.2", "pin-project", "rand 0.7.3", "secrecy", + "socket2", "stream-cancel", "thiserror", "tokio 0.2.22", @@ -1348,7 +1348,6 @@ dependencies = [ "interledger-packet", "interledger-service", "mockito", - "net2", "num-bigint", "num-traits", "once_cell", @@ -1359,6 +1358,7 @@ dependencies = [ "ring", "serde", "serde_json", + "socket2", "tokio 0.2.22", "tracing", "url 2.1.1", @@ -1408,7 +1408,6 @@ dependencies = [ "interledger-service-util", "interledger-settlement", "interledger-stream", - "net2", "num-bigint", "once_cell", "os_type", @@ -1419,6 +1418,7 @@ dependencies = [ "secrecy", "serde", "serde_json", + "socket2", "thiserror", "tokio 0.2.22", "tracing", diff --git a/crates/ilp-node/Cargo.toml b/crates/ilp-node/Cargo.toml index d2119752e..877ad1da1 100644 --- a/crates/ilp-node/Cargo.toml +++ b/crates/ilp-node/Cargo.toml @@ -74,7 +74,7 @@ metrics-runtime = { version = "0.13.0", default-features = false, features = ["m [dev-dependencies] approx = { version = "0.3.2", default-features = false } base64 = { version = "0.11.0", default-features = false } -net2 = { version = "0.2.33", default-features = false } +socket2 = "0.3.15" rand = { version = "0.7.2", default-features = false } reqwest = { version = "0.10.0", default-features = false, features = ["default-tls", "json"] } serde_json = { version = "1.0.41", default-features = false } diff --git a/crates/ilp-node/tests/redis/redis_helpers.rs b/crates/ilp-node/tests/redis/redis_helpers.rs index b541650fd..a7eb0f450 100644 --- a/crates/ilp-node/tests/redis/redis_helpers.rs +++ b/crates/ilp-node/tests/redis/redis_helpers.rs @@ -3,8 +3,10 @@ use futures::TryFutureExt; use redis_crate::{self as redis, ConnectionAddr, ConnectionInfo, RedisError}; +use socket2::{Domain, Socket, Type}; use std::env; use std::fs; +use std::net::SocketAddr; use std::path::PathBuf; use std::process; use std::thread::sleep; @@ -22,20 +24,35 @@ pub fn connection_info_to_string(info: ConnectionInfo) -> String { pub fn get_open_port(try_port: Option) -> u16 { if let Some(port) = try_port { - let listener = net2::TcpBuilder::new_v4().unwrap(); - listener.reuse_address(true).unwrap(); - if let Ok(listener) = listener.bind(&format!("127.0.0.1:{}", port)) { - return listener.listen(1).unwrap().local_addr().unwrap().port(); + let socket = Socket::new(Domain::ipv4(), Type::stream(), None).unwrap(); + socket.reuse_address().unwrap(); + if socket + .bind( + &format!("127.0.0.1:{}", port) + .parse::() + .unwrap() + .into(), + ) + .is_ok() + { + socket.listen(1).unwrap(); + let listener = socket.into_tcp_listener(); + return listener.local_addr().unwrap().port(); } } for _i in 0..1000 { - let listener = net2::TcpBuilder::new_v4().unwrap(); - listener.reuse_address(true).unwrap(); - if let Ok(listener) = listener.bind("127.0.0.1:0") { - return listener.listen(1).unwrap().local_addr().unwrap().port(); + let socket = Socket::new(Domain::ipv4(), Type::stream(), None).unwrap(); + socket.reuse_address().unwrap(); + if socket + .bind(&"127.0.0.1:0".parse::().unwrap().into()) + .is_ok() + { + let listener = socket.into_tcp_listener(); + return listener.local_addr().unwrap().port(); } } + panic!("Cannot find open port!"); } @@ -79,14 +96,13 @@ impl RedisServer { ServerType::Tcp => { // this is technically a race but we can't do better with // the tools that redis gives us :( - let listener = net2::TcpBuilder::new_v4() - .unwrap() - .reuse_address(true) - .unwrap() - .bind("127.0.0.1:0") - .unwrap() - .listen(1) + let socket = Socket::new(Domain::ipv4(), Type::stream(), None).unwrap(); + socket.reuse_address().unwrap(); + socket + .bind(&"127.0.0.1:0".parse::().unwrap().into()) .unwrap(); + socket.listen(1).unwrap(); + let listener = socket.into_tcp_listener(); let server_port = listener.local_addr().unwrap().port(); cmd.arg("--port") .arg(server_port.to_string()) diff --git a/crates/interledger-btp/Cargo.toml b/crates/interledger-btp/Cargo.toml index 591724a2d..caa86314f 100644 --- a/crates/interledger-btp/Cargo.toml +++ b/crates/interledger-btp/Cargo.toml @@ -35,4 +35,4 @@ pin-project = { version = "0.4.6", default-features = false } [dev-dependencies] hex = { version = "0.4.0", default-features = false } -net2 = { version = "0.2.33", default-features = false } +socket2 = "0.3.15" diff --git a/crates/interledger-btp/src/lib.rs b/crates/interledger-btp/src/lib.rs index a61ed777a..46baa3cd1 100644 --- a/crates/interledger-btp/src/lib.rs +++ b/crates/interledger-btp/src/lib.rs @@ -54,7 +54,7 @@ mod client_server { use super::*; use interledger_packet::{Address, ErrorCode, FulfillBuilder, PrepareBuilder, RejectBuilder}; use interledger_service::*; - use net2::TcpBuilder; + use socket2::{Domain, Socket, Type}; use std::str::FromStr; use std::{ net::SocketAddr, @@ -67,10 +67,15 @@ mod client_server { fn get_open_port() -> SocketAddr { for _i in 0..1000 { - let listener = TcpBuilder::new_v4().unwrap(); - listener.reuse_address(true).unwrap(); - if let Ok(listener) = listener.bind("127.0.0.1:0") { - return listener.listen(1).unwrap().local_addr().unwrap(); + let socket = Socket::new(Domain::ipv4(), Type::stream(), None).unwrap(); + socket.reuse_address().unwrap(); + if socket + .bind(&"127.0.0.1:0".parse::().unwrap().into()) + .is_ok() + { + socket.listen(1).unwrap(); + let listener = socket.into_tcp_listener(); + return listener.local_addr().unwrap(); } } panic!("Cannot find open port!"); diff --git a/crates/interledger-settlement/Cargo.toml b/crates/interledger-settlement/Cargo.toml index dd8a8c381..ed8fa88d5 100644 --- a/crates/interledger-settlement/Cargo.toml +++ b/crates/interledger-settlement/Cargo.toml @@ -37,7 +37,7 @@ futures-retry = { version = "0.4.0", default-features = false } parking_lot = { version = "0.10.0", default-features = false } mockito = { version = "0.23.1", default-features = false } env_logger = { version = "0.7.0", default-features = false } -net2 = { version = "0.2.33", default-features = false } +socket2 = "0.3.15" rand = { version = "0.7.2", default-features = false } [features] diff --git a/crates/interledger-settlement/src/core/backends_common/redis/test_helpers/redis_helpers.rs b/crates/interledger-settlement/src/core/backends_common/redis/test_helpers/redis_helpers.rs index 4bdb63bba..6f2f40690 100644 --- a/crates/interledger-settlement/src/core/backends_common/redis/test_helpers/redis_helpers.rs +++ b/crates/interledger-settlement/src/core/backends_common/redis/test_helpers/redis_helpers.rs @@ -3,7 +3,8 @@ use futures::TryFutureExt; use redis_crate::{self as redis, RedisError}; -use std::{env, fs, path::PathBuf, process, thread::sleep, time::Duration}; +use socket2::{Domain, Socket, Type}; +use std::{env, fs, net::SocketAddr, path::PathBuf, process, thread::sleep, time::Duration}; #[derive(PartialEq)] enum ServerType { @@ -48,14 +49,13 @@ impl RedisServer { ServerType::Tcp => { // this is technically a race but we can't do better with // the tools that redis gives us :( - let listener = net2::TcpBuilder::new_v4() - .unwrap() - .reuse_address(true) - .unwrap() - .bind("127.0.0.1:0") - .unwrap() - .listen(1) + let socket = Socket::new(Domain::ipv4(), Type::stream(), None).unwrap(); + socket.reuse_address().unwrap(); + socket + .bind(&"127.0.0.1:0".parse::().unwrap().into()) .unwrap(); + socket.listen(1).unwrap(); + let listener = socket.into_tcp_listener(); let server_port = listener.local_addr().unwrap().port(); cmd.arg("--port") .arg(server_port.to_string()) diff --git a/crates/interledger-store/Cargo.toml b/crates/interledger-store/Cargo.toml index e70b3c08d..0e71fc758 100644 --- a/crates/interledger-store/Cargo.toml +++ b/crates/interledger-store/Cargo.toml @@ -57,6 +57,6 @@ redis_crate = { package = "redis", version = "0.15.1", default-features = false, [dev-dependencies] env_logger = { version = "0.7.0", default-features = false } -net2 = { version = "0.2.33", default-features = false } rand = { version = "0.7.2", default-features = false } +socket2 = "0.3.15" os_type = { version = "2.2", default-features = false } diff --git a/crates/interledger-store/tests/redis/redis_tests.rs b/crates/interledger-store/tests/redis/redis_tests.rs index ce54d5154..9ee6ef012 100644 --- a/crates/interledger-store/tests/redis/redis_tests.rs +++ b/crates/interledger-store/tests/redis/redis_tests.rs @@ -88,8 +88,10 @@ mod redis_helpers { #![allow(dead_code)] use redis_crate::{self, RedisError}; + use socket2::{Domain, Socket, Type}; use std::env; use std::fs; + use std::net::SocketAddr; use std::path::PathBuf; use std::process; use std::thread::sleep; @@ -146,14 +148,13 @@ mod redis_helpers { ServerType::Tcp => { // this is technically a race but we can't do better with // the tools that redis gives us :( - let listener = net2::TcpBuilder::new_v4() - .unwrap() - .reuse_address(true) - .unwrap() - .bind("127.0.0.1:0") - .unwrap() - .listen(1) + let socket = Socket::new(Domain::ipv4(), Type::stream(), None).unwrap(); + socket.reuse_address().unwrap(); + socket + .bind(&"127.0.0.1:0".parse::().unwrap().into()) .unwrap(); + socket.listen(1).unwrap(); + let listener = socket.into_tcp_listener(); let server_port = listener.local_addr().unwrap().port(); cmd.arg("--port") .arg(server_port.to_string())