Commit Graph

3430 Commits

Author SHA1 Message Date
Ian Jackson be5bc04c02 impl_standard_builder: Have it generate FooConfig::builder
This deletes many handcoded impls.  It also generates lots of impls
that we previously didn't have.
2022-05-12 18:50:26 +01:00
Ian Jackson 86a3e006d3 impl_standard_builder: Test the Deserialize impl
Test the Deserialize impl of every config struct.

This detects bugs like the one fixed in !502.

The macro now becomes more complex because it needs to take options.
Right now this tt-munching option parser is overkill, but this
leave space for further options in the future.
2022-05-12 18:50:26 +01:00
Nick Mathewson f0eac61838 Merge branch 'network-config-error' into 'main'
Delete tor_dirmgr::Error::BadNetworkConfig

See merge request tpo/core/arti!506
2022-05-12 16:43:26 +00:00
Nick Mathewson 1698a2fea1 Merge branch 'template' into 'main'
Make the example config file into a template and move it to arti

See merge request tpo/core/arti!503
2022-05-12 16:34:00 +00:00
eta 2255778afa Merge branch 'builder-default-bis' into 'main'
impl_standard_builder followup

See merge request tpo/core/arti!505
2022-05-12 15:57:56 +00:00
Ian Jackson d847d49858 Delete tor_dirmgr::Error::BadNetworkConfig
This was anomalous, in that it contains &'static str, rather than a
proper nested error (eg a config::ConfigError, maybe).

But in fact it tursn out it is now not constructed.  The last
construction site was removed a long time ago in
  Use derive_builder for Authority and FallbackDir.
2022-05-12 16:49:06 +01:00
Ian Jackson c1c6f2b376 Rename impl_standard_builder from impl_default_via_builder
I have Plans for this macro.  In particular:

 * I have a wip branch which tests that the Builder can be
   deserialised from an empty config (ie, that config reading
   of a config with a blank section for this item works).

 * I think we should autogenerate $Config::builder(),
   and promote that, rather than $ConfigBuilder::default().
   This macro could do that.
2022-05-12 15:59:13 +01:00
Ian Jackson 888d6e0511 config: Replace more handwritten impl Default 2022-05-12 15:59:10 +01:00
Ian Jackson 400266b2c5 config: Move macro calls to next to the struct
This macro is kind of derive-y.  Also it has a test in it, and failing
to call it could allow bugs to exist, as well as missing bits of API.
Putting it next to the structs makes it easy to see that it's actually
been called.
2022-05-12 15:58:38 +01:00
Nick Mathewson 2a5ee2c8c9 Merge branch 'ticket_412_467' into 'main'
Teach DirMgr to use slightly untimely directories

Closes #467 and #412

See merge request tpo/core/arti!500
2022-05-12 14:42:51 +00:00
Ian Jackson d407ce519b Add semver note for these changes 2022-05-12 15:24:32 +01:00
Ian Jackson cb42c01dd7 arti-example-config.toml: Add a slightly improved comment 2022-05-12 14:55:39 +01:00
Ian Jackson bb166c14da arti-example-config.toml: Re-un-comment the example settings in test 2022-05-12 14:55:39 +01:00
Ian Jackson f18373a7d6 arti-example-config.toml: Comment out all the example settings
We expect that a user may copy this file and uses it as a starting
point for their own configuration.

When they do that, we don't want them to freeze the default config in
time.  Instead, we can expect them to uncomment settings they wish to
change.  Then when they upgrade arti, *other* settings will get the
new defaults, which I think is right.
2022-05-12 14:55:39 +01:00
Ian Jackson 85a310d7cc arti-example-config: Mark some non-default examples more clearly
Now,
  git-grep '^#[^ ]' crates/arti/src/arti-example-config.toml
has no ouptut.

This prepares us for the next commit.
2022-05-12 14:55:39 +01:00
Ian Jackson 1105e63141 config defaults: Test that empty deser is the same 2022-05-12 14:55:39 +01:00
Ian Jackson 8aab5a3996 ARTI_EXAMPLE_CONFIG: Rename from ARTI_DEFAULTS
The defaults are built into the code.  This is a doc-commented example
file, not the primary specification of what the defaults are.
2022-05-12 14:55:39 +01:00
Ian Jackson c9c8344b73 ARTI_DEFAULTS: Move to arti crate 2022-05-12 14:55:39 +01:00
Ian Jackson afa64bf397 config defaults: No longer apply ARTI_DEFAULTS in load()
This is redundant, because the defaults have to be supplied by the
config builders (usually via builder default attributes).

That this is actually done and correct is tested by the
`default_config()` test case in arti/src/cfg.rs.
2022-05-12 14:55:03 +01:00
Ian Jackson 58f53bae5b config defaults: Test that going via builder explicitly is the same
Add this test even though our construction of the Default and Builder
ought to trivially ensure that it's true.
2022-05-12 14:55:03 +01:00
Nick Mathewson 24c7dea38d Resolve DOCDOC comments in tor-dirmgr. 2022-05-12 09:45:05 -04:00
eta 5990df53fe Merge branch 'arti-config-1' into 'main'
arti-config: Move cmdline to tor-config

See merge request tpo/core/arti!498
2022-05-12 13:07:43 +00:00
eta aaf133de49 Merge branch 'clippy' into 'main'
Improvements prompted by clippy, and disable one lint

See merge request tpo/core/arti!497
2022-05-12 13:07:02 +00:00
eta 7207b17567 Merge branch 'builder-default' into 'main'
Provide and use macro for impl Derive via Builder

See merge request tpo/core/arti!499
2022-05-12 12:52:37 +00:00
Nick Mathewson 0b6633d72a Merge branch 'ht-fix' into 'main'
Add correct serde(default) attrs for humantime_serde::option

See merge request tpo/core/arti!502
2022-05-12 12:39:44 +00:00
Ian Jackson 04b8729d6b Add correct serde(default) attrs for humantime_serde::option
Discovered by a test case in my local tree.  The test case was
macro-generated by an extension of impl_standard_builder (which
macro istself currently awaiting review, arti!499)

Have also sent an MR to update the upstream docs
  https://github.com/jean-airoldie/humantime-serde/pull/8
2022-05-12 11:34:53 +01:00
Ian Jackson 0cc94d449e clippy: Change a binding to (), and allow clippy::let_unit_value
The type of ret.map_err(codec_err_to_chan)? is ().  ISTM that
writing `let () = ` makes it clear that there is nothing there,
but the lint forbids this.

This lint is warn by default and trips here for me on current nightly.

It seems wrong to me.  We should be able to make it clear to the
reader that there is nothing here - note how this differs from the
lines below where Ready contains msg.  A let () binding is a good way
to do that.

I think the lint allow ought to be added everywhere, but that doesn't
seem easy right now - see this issue about maint/add_warning:
   https://gitlab.torproject.org/tpo/core/arti/-/issues/469
2022-05-11 18:52:12 +01:00
Ian Jackson 0717595781 clippy: Use write! rather than push_str, format
This does involve unwrap, but of course that can't fail unless the
formats fail, which would already panic (that's implied by format!).
2022-05-11 18:52:12 +01:00
Nick Mathewson 2e99c9fe64 dirmgr: use set_skew_limit.
With this API we can now stop consensus download attempts early if
any consensus that the directory cache gave us would be necessarily
too far in the future or in the past.

This saves wasted bandwidth for clients with skewed clocks.

Closes #466.
2022-05-11 13:52:07 -04:00
Ian Jackson 4a06ce01e1 clippy: Drop an unused lifetime 2022-05-11 18:51:07 +01:00
Nick Mathewson 0c939d45fc dirclient: add the ability to reject circuits that are too skewed.
This will help implement #466.
2022-05-11 13:48:55 -04:00
Ian Jackson 7909a51ff4 No longer derive Default on three structs which derive Builder 2022-05-11 18:27:15 +01:00
Ian Jackson 3420fe735d Define and use impl_default_via_builder 2022-05-11 18:27:15 +01:00
Ian Jackson ab3bd9d6d5 arti-config: Move cmdline to tor-config
This does not know anything about arti, only about TOML and Config.

Code motion, plus necessary import adjustments.
2022-05-11 18:23:05 +01:00
Nick Mathewson 0c05baa68b Add a channel accessor to ClientCirc.
I need this so that I can expose the skew time for the directory
that a circuit will use, when I only have the circuit.
2022-05-11 13:02:36 -04:00
Nick Mathewson dd20ac45ab Note a TODO in exitpath construction. 2022-05-11 12:42:38 -04:00
Nick Mathewson 9e040e7809 Adjust if-modified-since field on the basis of tolerated skew
If we're happy with a directory from 3 days ago, we should say
"if-modified-since 3 days ago".

This patch is larger than I'd like, since I had to add &DirMgrConfig
as an argument to the functions that make a  consensus request.

Closes #467.
2022-05-11 12:36:51 -04:00
Nick Mathewson db8bdbf924 tor-dirmgr: update status reporting to consider skew tolerance
In our status reporting code, we consider an
expired-but-still-usable directory still bootstrapped, but not 100%
bootstrapped.
2022-05-11 12:11:30 -04:00
Nick Mathewson 1dafba706d Make reset_time() for incomplete directories more generous.
Since we want to be willing to use older consensuses, we don't
necessarily want to reset a download just because the consensus is
expired.

This new behavior isn't ideal either; I've added a TODO that relates
to #433.

Related of #412
2022-05-11 12:11:17 -04:00
Nick Mathewson 7dec007d63 Add DirSkewTolerance section to DirMgr configuration.
This new section describes how much variance we accept when it comes
to expired and not-yet-valid directory documents.  (Currently, the
only ones where this matters for are consensus documents and
authority certificates.)  A document that is invalid by no more than
these tolerances is not _live_, but it can still be used.

These tolerances serve two purposes:

 * First, they allow clients to run with a little more clock skew
   than they would tolerate otherwise.
 * Second, they allow clients to survive the situation where the
   authorities are unable to reach a consensus for a day or two.

Compare with Tor's REASONABLY_LIVE_TIME and NETWORKSTATUS_ALLOW_SKEW
constants; also compare with proposal 212.

Closes #412.
2022-05-11 12:11:17 -04:00
Nick Mathewson 12d1752ad5 tor-netdoc: Add a Lifetime::valid_at method. 2022-05-11 12:11:17 -04:00
Nick Mathewson b137be222b Merge branch 'config-sources-api' into 'main'
Tidy up ConfigurationSource a bit

See merge request tpo/core/arti!495
2022-05-11 15:53:32 +00:00
Ian Jackson 775432bee8 Document semver changes to ConfigurationSources etc. 2022-05-11 15:53:17 +01:00
Ian Jackson 8fe62da871 Move default_config_file() into arti-client
This will let other embedders use it.
2022-05-11 15:53:03 +01:00
Ian Jackson c76c79d023 ConfigurationSources: Have the generics take Into<owned>
These generic arguments weren't consistent.  It doesn't make sense ot
insist on getting a borrowed type and then cloning it.  So tidy things
up in the direction of taking owned values, which is what
ConfigurationSources actually needs.

(My personal preference would be &dyn to avoid monomorphisation code
bloat but that was controversial last time I proposed it somewhere.)
2022-05-11 15:53:03 +01:00
Ian Jackson c9fee15cbf ConfigurationSource: Move "usual" logic for construction 2022-05-11 15:53:03 +01:00
Ian Jackson 93da612984 default_config_file(): Have it return Result, not Option
Discarding this error is not right.
2022-05-11 15:53:03 +01:00
Ian Jackson 26b3115586 tor-config: Export CfgPathError
It is not clear to me how this `pub enum` survived the "inaccessible
pub" lint.
2022-05-11 15:53:03 +01:00
Ian Jackson e363b79a01 ConfigurationSource: Rename new to new_empty
This emphasises its nature.  We're going to provide a more cooked
constructor in a moment.
2022-05-11 15:53:03 +01:00
Nick Mathewson cc3ec8089d Merge branch 'cargo-feature-elucidation' into 'main'
Improve documentation around Cargo features; make Runtime require Debug

Closes #445

See merge request tpo/core/arti!496
2022-05-11 14:17:33 +00:00