- They need the Check framework, which should not be a dependency
for everyone.
- Check itself is the only dependency managed by pkg-config, so we
don't want to force everyone to install that either.
No idea if any of this is good practice. But it's much easier to
explain in the documentation, so there you go.
Implement thisUpdate, nextUpdate and --roa-output-file
- Implement manifest thisUpdate and nextUpdate validation
- Print dates during manifest date errors
- ROA file output target is now configurable
(Used to be dumped into stdout, which was annoying because it was
mixed with the INFO logging)
1. Was ignoring name.serialNumber on some validations
2. Was not erroring on unknown name attributes
3. If the name is not unique, also print the file where the collision
was found
4. Downgrade uniqueness violation to warning. Otherwise some offending
certificates are traversed, and others aren't
Number 3 also applied to serial numbers. Patched that as well.
Also, print the full global URI of each file name on error. I don't like
being tied to these awkward long names though; might upload a program
argument to tweak this manually tomorrow.
- The TOML reader now expects correct TOML syntax, according to toml99
- The RSYNC command and its arguments are now configurable
- Instead of an enable-disable RSYNC switch, we now have a
"synchronization strategy". (Needed to optimize RSYNC operations
according to user needs.)
- The RSYNC command is now executed via execvp(3) instead of system(3),
to increase security.
This happens on self-signed certificates. The code was comparing
the extension data, when the AKI data needed to be further decoded
to validate proper ASN syntax.
"This EE certificate MUST describe its Internet Number Resources
using the "inherit" attribute, rather than explicit description of
a resource set; see [RFC3779]."
- Integrate the string data type to the configuration framework properly
(They are no longer being handled as an exception)
- Integrate the print and free operations to the the framework
(The rpki_config object is no longer printed and freed manually)
- Add short option support (eg. `-t` instead of `--tal`)
- Add --help, --version and --usage handlers
- Add a bunch of in-code documentation to most configuration fields
Not really tested, because it doesn't look like there are people using
this feature yet.
Also:
- refactor inet_ntop() usage so we don't have to clutter the stack with
string buffers every time we want to print.
- Patch sometimes undefined behavior `0xFFFFFFFFu >> 32`.
- Print relevant IP address on address errors
- Add missing resource validations (swapped ranges, AS number out of
bounds)
- Remove validation of ROA's AS number. The RFCs never state that the
number must be present in the EE certificate.
Postpone recursive traversal and validate Access Descriptions
1. It was traversing through children before the current
certificate's validation was done. It's fixed now.
2. Adds validation of CRL Distribution Points, AIA.caIssuers and
SIA.signedObject.
Man, those requirements looked deceively small. It was a
freaking mess.
I'm not actually sure this is the final version of this code,
because several argument lists grew too much for my liking.
- Validate more certificate extensions
- Ensure there is only one visible CRL and manifest per publication
point.
- Validate ROA's max length more thoroughly.
It seems that the basic tree validation, at least as far as the
first iteration is concerned, is done.
Except I never managed to understand AS validation at all. It's
like there's nothing to do.
Of course, there's still a ways to go. I still have to add many
little ifs that the project needs to reach strict RFC compliance.
Also those 20-octet sequence manifest numbers. WTF.
- Check that the TAL's public key matches the root cert's public key
- Validate EE certificates differently than CA certificates
- Reorder tree traversal. (I noticed that I was doing it wrong.)
- Polish many other validations by hunting TODOs
Add actual certificate tree validation and other misc tweaks
The tweaks are
1. Unified error message printing. Probably not the final version.
2. Add validation state object, meant to be passed around everywhere.
Prevents global variables.
3. Add a sketch of the CRL code. WIP.