Skip to content

Commit

Permalink
Reject config with unknown directives before committing to it (squid-…
Browse files Browse the repository at this point in the history
…cache#1897)

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 kinkie committed Oct 12, 2024
1 parent 82a20c8 commit 1c1838d
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 1c1838d

Please sign in to comment.