Skip to content

Commit

Permalink
Reject config with unknown directives before committing to it (#1897)
Browse files Browse the repository at this point in the history
Ideally, we want to reject configurations with unknown directives before
applying any configuration changes that correspond to known directives,
but current apply-as-you-parse architecture makes that impractical.
Pending smooth reconfiguration refactoring will make that possible, but
we can make a step towards that ideal future now.

Rejecting bad configurations before calling configDoConfigure() reduces
the set of configuration errors that Squid can detect in one execution
(because configDoConfigure() error-checking code is not reached), but
that small reduction is a lesser evil compared to running
configDoConfigure() with a clearly broken config, especially when we are
going to kill Squid anyway. While many legacy parse_foo() functions do
apply significant changes before configDoConfigure(), we cannot easily
prevent that (for now). We can easily prevent configDoConfigure().
  • Loading branch information
rousskov authored and squid-anubis committed Aug 31, 2024
1 parent 060e9c0 commit ed8b040
Showing 1 changed file with 3 additions and 9 deletions.
12 changes: 3 additions & 9 deletions src/cache_cf.cc
Original file line number Diff line number Diff line change
Expand Up @@ -625,22 +625,16 @@ Configuration::Parse()

defaults_postscriptum();

if (unrecognizedDirectives)
throw TextException(ToSBuf("Found ", unrecognizedDirectives, " unrecognized directive(s)"), Here());

/*
* We must call configDoConfigure() before leave_suid() because
* configDoConfigure() is where we turn username strings into
* uid values.
*/
configDoConfigure();

// TODO: Throw before configDoConfigure(). Doing that would reduce the set
// of configuration errors Squid can detect in one execution, but we should
// not apply a clearly broken configuration, especially when we are going to
// quit anyway. While some legacy parse_foo() functions apply significant
// changes before configDoConfigure(), we cannot easily stop them. We can
// easily stop configDoConfigure().
if (unrecognizedDirectives)
throw TextException(ToSBuf("Found ", unrecognizedDirectives, " unrecognized directive(s)"), Here());

if (opt_send_signal == -1) {
Mgr::RegisterAction("config",
"Current Squid Configuration",
Expand Down

0 comments on commit ed8b040

Please sign in to comment.