-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rework dns_names
helper, remove alloc req.
#178
Conversation
Codecov Report
@@ Coverage Diff @@
## main #178 +/- ##
==========================================
+ Coverage 96.31% 96.53% +0.21%
==========================================
Files 17 19 +2
Lines 4510 4496 -14
==========================================
- Hits 4344 4340 -4
+ Misses 166 156 -10
... and 8 files with indirect coverage changes 📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general I feel that the GeneralDnsNameRef
and WildcardDnsNameRef
names are not that obvious and fairly verbose, so that is one reason that keeping them private made sense to me. Especially the notion of "General", I suppose? What does that mean?
We switched to using `doc_auto_cfg` to automatically indicate in Rustdocs when an item requires a particular feature. This comment about the `dns_name::DnsName` re-export requiring alloc isn't necessary anymore.
We switched to `doc_auto_cfg` and don't need to manually annotate `cfg(feature ...)` annotations for docsrs purposes anymore.
This is what most consumers of the API are interested in, and avoids needing to export the `GeneralDnsNameRef` and `WildcardDnsNameRef` types.
We can express this test with the `expect_cert_dns_names` helper.
Prior to this commit the rustdoc comment on `EndEntityCert.dns_names` mentioned using `verify_is_valid_for_dns_name` and `verify_is_valid_for_at_least_one_dns_name`, but these functions don't exist anymore. This commit updates the comment to point to `EndEntityCert::verify_is_valid_for_subject_name`, and does so with a proper Rustdoc link so that future updates will be caught by `cargo doc` if we forget to fix this reference to match.
bf20589
to
9754177
Compare
dns_names
helper, expose more types, remove alloc req.dns_names
helper, remove alloc req.
This is time-rs/time#618
I think this is a nightly bug? It seems like it doesn't like the Lines 89 to 94 in adc4944
Switching to |
I think we're just missing an end to the code block? (the upstream issue that has changed the parser is rust-lang/rust#110800 in case we do need to report the regression though.) |
Ah, good catch. I fixed that in this branch, but it's still generating a warning. I was also able to reproduce with a minimal example for an upstream issue:
Thanks! I'll mention that in the issue. |
@djc Thanks, the majority of these changes seem good to me, but I think we might want to consider leaving the I thought about removing it when I reworked this branch to iterate w/ WDYT? |
That's fair. So what do you want to do with cpu#1? Merge it on top of this without making further changes? (I didn't finish reviewing all commits here after I got myself distracted from removing the use of |
Hmm, yeah, I think that'll leave us with a bunch of warnings -- I'm not sure putting Maybe better to remove this code and create a follow-up issue to bring back the ideas from briansmith/webpki#66? Probably something I could pick up soon. |
Good point.
That sounds good to me. 👍 |
|
@ctz Could you give this branch an independent review since both myself and Djc have contributed code to it? 🙇 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As a further change, how do we feel about attaching list_cert_dns_names()
to EndEntityCert
, or, even better, Cert
, as a method? Feels right to me. Maybe change the name to valid_dns_names()
?
The purpose of the `dns_names` helper on an `EndEntityCert` is to provide users the opportunity to get information on the dNSName SAN values in a certificate for **non-validation** purposes. Checking that a certificate is valid for a particular name should always be done with `verify_is_valid_for_at_least_one_dns_name`. With that use-case in mind, we can make the `dns_names` helper easier for consumers to use by filtering out invalid general names, returning an `Iterator<Item = &'a str>` unconditionally, instead of a `Result`. This better matches the updated name validation semantics where we ignore `MalformedDnsIdentifier` errors to continue to try to find a valid name to validate against.
5379817
to
49067e2
Compare
Good idea 👍 I put it on |
With the update to the `dns_names` function in the previous commit we can now make `EndEntity.dns_names` work without requiring `alloc`.
Avoid combinator chaining, use explicit `match`.
The From impl feels a little unidiomatic because the DnsNameRef is not consumed. An AsRef impl would unnecessarily constrain the lifetime of the output value to `&self`, whereas it can live as long as `'a`.
The From impl feels a little unidiomatic because the WildcardDnsNameRef is not consumed. An AsRef impl would unnecessarily constrain the lifetime of the output value to `&self`, whereas it can live as long as `'a`.
The From impl feels a little unidiomatic because the GeneralDnsNameRef is not consumed. An AsRef impl would unnecessarily constrain the lifetime of the output value to `&self`, whereas it can live as long as `'a`.
This commit lifts the free-standing `list_cert_dns_names` helper from the `subject_name` module to be associated with a `Cert`. Doing so also requires making the `subject_name::NameIterator` and `subject_name::WildcardDnsNameRef` `pub(crate)` visible.
49067e2
to
64fb1b7
Compare
Description
This branch reworks the
EndEntityCert
'sdns_names
helper. Principally it:dns_names
and the correspondingsubject_name::list_cert_dns_names
fns to be infallible, this better matches how we're ignoring invalid DNS names when validating a subject name since ignore invalid value validating dns name list #69.alloc
requirement for thedns_names
fn.as_str
instead of aFrom
implGeneralDnsNameRef
type (with the potential to restore as future work c.f. RestoreGeneralDnsNameRef
, use inGeneralName::DnsName
. #183)subject_name::list_cert_dns_names
free-standing fn to be associated withCert
and namedvalid_dns_names
.Resolves #46, replaces #50