From c32b7e8865224b124a9be999317f87d45e2b2a48 Mon Sep 17 00:00:00 2001
From: Matthew Holt <mholt@users.noreply.github.com>
Date: Tue, 10 Sep 2019 14:12:51 -0600
Subject: [PATCH] fastcgi: Make EnvVars a map instead of a slice

---
 modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go | 5 ++++-
 modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go   | 8 ++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go b/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
index c8b9f63cb..6fa63bebb 100644
--- a/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
+++ b/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
@@ -44,7 +44,10 @@ func (t *Transport) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 			if len(args) != 2 {
 				return d.ArgErr()
 			}
-			t.EnvVars = append(t.EnvVars, [2]string{args[0], args[1]})
+			if t.EnvVars == nil {
+				t.EnvVars = make(map[string]string)
+			}
+			t.EnvVars[args[0]] = args[1]
 
 		default:
 			return d.Errf("unrecognized subdirective %s", d.Val())
diff --git a/modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go b/modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go
index 91039c932..9df6585ed 100644
--- a/modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go
+++ b/modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go
@@ -55,8 +55,8 @@ type Transport struct {
 	// PATH_INFO for the CGI script to use.
 	SplitPath string `json:"split_path,omitempty"`
 
-	// Environment variables (TODO: make a map of string to value...?)
-	EnvVars [][2]string `json:"env,omitempty"`
+	// Extra environment variables
+	EnvVars map[string]string `json:"env,omitempty"`
 
 	// The duration used to set a deadline when connecting to an upstream.
 	DialTimeout caddy.Duration `json:"dial_timeout,omitempty"`
@@ -259,8 +259,8 @@ func (t Transport) buildEnv(r *http.Request) (map[string]string, error) {
 	}
 
 	// Add env variables from config (with support for placeholders in values)
-	for _, envVar := range t.EnvVars {
-		env[envVar[0]] = repl.ReplaceAll(envVar[1], "")
+	for key, value := range t.EnvVars {
+		env[key] = repl.ReplaceAll(value, "")
 	}
 
 	// Add all HTTP headers to env variables