FallbackDir: Use VecBuilder for orports

And drop the ad-hoc orport() method.  This brings FallbackDir's
orports field in line with our list builder API.

The general semver note in "configuation" seems to cover most of this.
This commit is contained in:
Ian Jackson 2022-04-26 16:20:08 +01:00
parent cc394ca9b9
commit 4ad4cae418
7 changed files with 47 additions and 37 deletions

View File

@ -389,11 +389,12 @@ mod test {
.name("Fred")
.v3ident([22; 20].into())
.clone();
let fallback = dir::FallbackDir::builder()
let mut fallback = dir::FallbackDir::builder();
fallback
.rsa_identity([23; 20].into())
.ed_identity([99; 32].into())
.orports(vec!["127.0.0.7:7".parse().unwrap()])
.clone();
.orports()
.push("127.0.0.7:7".parse().unwrap());
let mut bld = TorClientConfig::builder();
bld.tor_network().set_authorities(vec![auth]);

View File

@ -226,11 +226,12 @@ mod test {
.name("Fred")
.v3ident([22; 20].into())
.clone();
let fallback = dir::FallbackDir::builder()
let mut fallback = dir::FallbackDir::builder();
fallback
.rsa_identity([23; 20].into())
.ed_identity([99; 32].into())
.orports(vec!["127.0.0.7:7".parse().unwrap()])
.clone();
.orports()
.push("127.0.0.7:7".parse().unwrap());
let mut bld = ArtiConfig::builder();
bld.proxy().socks_port(Some(9999));

View File

@ -117,18 +117,22 @@ mod test {
#[test]
fn dirpath_fallback() {
let fb_owned = vec![
FallbackDir::builder()
.rsa_identity([0x01; 20].into())
.ed_identity([0x01; 32].into())
.orport("127.0.0.1:9000".parse().unwrap())
.build()
.unwrap(),
FallbackDir::builder()
.rsa_identity([0x03; 20].into())
.ed_identity([0x03; 32].into())
.orport("127.0.0.1:9003".parse().unwrap())
.build()
.unwrap(),
{
let mut bld = FallbackDir::builder();
bld.rsa_identity([0x01; 20].into())
.ed_identity([0x01; 32].into())
.orports()
.push("127.0.0.1:9000".parse().unwrap());
bld.build().unwrap()
},
{
let mut bld = FallbackDir::builder();
bld.rsa_identity([0x03; 20].into())
.ed_identity([0x03; 32].into())
.orports()
.push("127.0.0.1:9003".parse().unwrap());
bld.build().unwrap()
},
];
let fb: FallbackList = fb_owned.clone().into();
let dirinfo = (&fb).into();

View File

@ -333,12 +333,14 @@ mod test {
]);
assert!(bld.build().is_err());
bld.set_fallback_caches(vec![FallbackDir::builder()
.rsa_identity([b'x'; 20].into())
.ed_identity([b'y'; 32].into())
.orport("127.0.0.1:99".parse().unwrap())
.orport("[::]:99".parse().unwrap())
.clone()]);
bld.set_fallback_caches(vec![{
let mut bld = FallbackDir::builder();
bld.rsa_identity([b'x'; 20].into())
.ed_identity([b'y'; 32].into());
bld.orports().push("127.0.0.1:99".parse().unwrap());
bld.orports().push("[::]:99".parse().unwrap());
bld
}]);
let cfg = bld.build().unwrap();
assert_eq!(cfg.authorities.len(), 2);
assert_eq!(cfg.fallback_caches.len(), 1);

View File

@ -15,6 +15,7 @@ mod set;
use crate::ids::FallbackId;
use derive_builder::Builder;
use tor_config::ConfigBuildError;
use tor_config::{define_list_builder_accessors, list_builder::VecBuilder};
use tor_llcrypto::pk::ed25519::Ed25519Identity;
use tor_llcrypto::pk::rsa::RsaIdentity;
@ -41,9 +42,16 @@ pub struct FallbackDir {
/// Ed25519 identity for the directory relay
ed_identity: Ed25519Identity,
/// List of ORPorts for the directory relay
#[builder(sub_builder(fn_name = "build"), setter(custom))]
orports: Vec<SocketAddr>,
}
define_list_builder_accessors! {
struct FallbackDirBuilder {
pub orports: [SocketAddr],
}
}
impl FallbackDir {
/// Return a builder that can be used to make a `FallbackDir`.
pub fn builder() -> FallbackDirBuilder {
@ -67,13 +75,6 @@ impl FallbackDirBuilder {
pub fn new() -> Self {
Self::default()
}
/// Add a single OR port for this fallback directory.
///
/// This field is required, and may be called more than once.
pub fn orport(&mut self, orport: SocketAddr) -> &mut Self {
self.orports.get_or_insert_with(Vec::new).push(orport);
self
}
/// Builds a new `FallbackDir`.
///
/// ### Errors
@ -108,7 +109,7 @@ pub(crate) fn default_fallbacks() -> Vec<FallbackDirBuilder> {
.iter()
.map(|s| s.parse().expect("Bad socket address in fallbacklist"))
.for_each(|p| {
bld.orport(p);
bld.orports().push(p);
});
bld

View File

@ -244,12 +244,12 @@ mod test {
let ed: [u8; 32] = rng.gen();
let rsa: [u8; 20] = rng.gen();
let ip: u32 = rng.gen();
FallbackDir::builder()
.ed_identity(ed.into())
let mut bld = FallbackDir::builder();
bld.ed_identity(ed.into())
.rsa_identity(rsa.into())
.orport(std::net::SocketAddrV4::new(ip.into(), 9090).into())
.build()
.unwrap()
.orports()
.push(std::net::SocketAddrV4::new(ip.into(), 9090).into());
bld.build().unwrap()
}
#[test]

View File

@ -60,6 +60,7 @@ BREAKING: DirMgrCfg: schedule and network fields rename (`_config` removed)
### tor-guardmgr
BREAKING: FallbackDirBuilder::orport() removed, and orports() now gives &mut SocketAddrListBuilder
MODIFIED: New functions to get estimated clock skew.
MODIFIED: New functions to report observed clock skew.