diff options
author | Mark Sargent <99003+sarge@users.noreply.github.com> | 2020-03-05 05:58:49 +1300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-04 09:58:49 -0700 |
commit | 26fb8b3efd671a02a92ee55e93f547606285cde4 (patch) | |
tree | e11624c59e70f17bf69ea70a6b800cd3daf12b99 | |
parent | e6c6210772ded5e07a9c730d22902c99d30631e2 (diff) |
httpcaddyfile: remove certificate tags from global state (#3111)
* remove the certificate tag tracking from global state
* refactored helper state, added log counter
* moved state initialisation close to where it is used.
* added helper state comment
-rw-r--r-- | caddyconfig/httpcaddyfile/builtins.go | 28 | ||||
-rw-r--r-- | caddyconfig/httpcaddyfile/directives.go | 2 | ||||
-rw-r--r-- | caddyconfig/httpcaddyfile/httptype.go | 8 |
3 files changed, 27 insertions, 11 deletions
diff --git a/caddyconfig/httpcaddyfile/builtins.go b/caddyconfig/httpcaddyfile/builtins.go index ef15ad9..c2da6a9 100644 --- a/caddyconfig/httpcaddyfile/builtins.go +++ b/caddyconfig/httpcaddyfile/builtins.go @@ -152,6 +152,18 @@ func parseTLS(h Helper) ([]ConfigValue, error) { // policy that is looking for any tag but the last one to be // loaded won't find it, and TLS handshakes will fail (see end) // of issue #3004) + + // tlsCertTags maps certificate filenames to their tag. + // This is used to remember which tag is used for each + // certificate files, since we need to avoid loading + // the same certificate files more than once, overwriting + // previous tags + tlsCertTags, ok := h.State["tlsCertTags"].(map[string]string) + if !ok { + tlsCertTags = make(map[string]string) + h.State["tlsCertTags"] = tlsCertTags + } + tag, ok := tlsCertTags[certFilename] if !ok { // haven't seen this cert file yet, let's give it a tag @@ -521,10 +533,17 @@ func parseLog(h Helper) ([]ConfigValue, error) { var val namedCustomLog if !reflect.DeepEqual(cl, new(caddy.CustomLog)) { + + logCounter, ok := h.State["logCounter"].(int) + if !ok { + logCounter = 0 + } + cl.Include = []string{"http.log.access"} val.name = fmt.Sprintf("log%d", logCounter) val.log = cl logCounter++ + h.State["logCounter"] = logCounter } configValues = append(configValues, ConfigValue{ Class: "custom_log", @@ -533,12 +552,3 @@ func parseLog(h Helper) ([]ConfigValue, error) { } return configValues, nil } - -// tlsCertTags maps certificate filenames to their tag. -// This is used to remember which tag is used for each -// certificate files, since we need to avoid loading -// the same certificate files more than once, overwriting -// previous tags -var tlsCertTags = make(map[string]string) - -var logCounter int diff --git a/caddyconfig/httpcaddyfile/directives.go b/caddyconfig/httpcaddyfile/directives.go index 095e4b9..e7a9686 100644 --- a/caddyconfig/httpcaddyfile/directives.go +++ b/caddyconfig/httpcaddyfile/directives.go @@ -114,6 +114,8 @@ func RegisterHandlerDirective(dir string, setupFunc UnmarshalHandlerFunc) { // Caddyfile tokens. type Helper struct { *caddyfile.Dispenser + // State stores intermediate variables during caddyfile adaptation. + State map[string]interface{} options map[string]interface{} warnings *[]caddyconfig.Warning matcherDefs map[string]caddy.ModuleMap diff --git a/caddyconfig/httpcaddyfile/httptype.go b/caddyconfig/httpcaddyfile/httptype.go index 89375db..685c7de 100644 --- a/caddyconfig/httpcaddyfile/httptype.go +++ b/caddyconfig/httpcaddyfile/httptype.go @@ -42,6 +42,7 @@ func (st ServerType) Setup(originalServerBlocks []caddyfile.ServerBlock, options map[string]interface{}) (*caddy.Config, []caddyconfig.Warning, error) { var warnings []caddyconfig.Warning gc := counter{new(int)} + state := make(map[string]interface{}) // load all the server blocks and associate them with a "pile" // of config values; also prohibit duplicate keys because they @@ -133,14 +134,17 @@ func (st ServerType) Setup(originalServerBlocks []caddyfile.ServerBlock, return nil, warnings, fmt.Errorf("%s:%d: unrecognized directive: %s", tkn.File, tkn.Line, dir) } - results, err := dirFunc(Helper{ + h := Helper{ Dispenser: caddyfile.NewDispenser(segment), options: options, warnings: &warnings, matcherDefs: matcherDefs, parentBlock: sb.block, groupCounter: gc, - }) + State: state, + } + + results, err := dirFunc(h) if err != nil { return nil, warnings, fmt.Errorf("parsing caddyfile tokens for '%s': %v", dir, err) } |