aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2011-04-22 11:02:33 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2011-04-22 11:02:33 -0700
commitc94db30ec917ff3db4e21be23e20a5ce030dc462 (patch)
treefd346f01d8c1d524233ce4e07285a11f81fd0d0d
parent4335bee42e5c45b3d6cb9919af9867d94c251486 (diff)
downloadgo-c94db30ec917ff3db4e21be23e20a5ce030dc462.tar.gz
go-c94db30ec917ff3db4e21be23e20a5ce030dc462.zip
http/cgi: pass some default environment variables
This isn't really part of RFC 3875 but matches the behavior of Apache, et al. R=iant, iant2 CC=golang-dev https://golang.org/cl/4435065
-rw-r--r--src/pkg/http/cgi/host.go21
-rw-r--r--src/pkg/http/cgi/matryoshka_test.go8
2 files changed, 21 insertions, 8 deletions
diff --git a/src/pkg/http/cgi/host.go b/src/pkg/http/cgi/host.go
index 1ab5716766..35fbde705a 100644
--- a/src/pkg/http/cgi/host.go
+++ b/src/pkg/http/cgi/host.go
@@ -25,12 +25,21 @@ import (
"os"
"path/filepath"
"regexp"
+ "runtime"
"strconv"
"strings"
)
var trailingPort = regexp.MustCompile(`:([0-9]+)$`)
+var osDefaultInheritEnv = map[string][]string{
+ "darwin": []string{"DYLD_LIBRARY_PATH"},
+ "freebsd": []string{"LD_LIBRARY_PATH"},
+ "hpux": []string{"LD_LIBRARY_PATH", "SHLIB_PATH"},
+ "linux": []string{"LD_LIBRARY_PATH"},
+ "windows": []string{"SystemRoot", "COMSPEC", "PATHEXT", "WINDIR"},
+}
+
// Handler runs an executable in a subprocess with a CGI environment.
type Handler struct {
Path string // path to the CGI executable
@@ -111,12 +120,24 @@ func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
env = append(env, h.Env...)
}
+ path := os.Getenv("PATH")
+ if path == "" {
+ path = "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin"
+ }
+ env = append(env, "PATH="+path)
+
for _, e := range h.InheritEnv {
if v := os.Getenv(e); v != "" {
env = append(env, e+"="+v)
}
}
+ for _, e := range osDefaultInheritEnv[runtime.GOOS] {
+ if v := os.Getenv(e); v != "" {
+ env = append(env, e+"="+v)
+ }
+ }
+
cwd, pathBase := filepath.Split(h.Path)
if cwd == "" {
cwd = "."
diff --git a/src/pkg/http/cgi/matryoshka_test.go b/src/pkg/http/cgi/matryoshka_test.go
index 548c050d41..3e4a6addfa 100644
--- a/src/pkg/http/cgi/matryoshka_test.go
+++ b/src/pkg/http/cgi/matryoshka_test.go
@@ -22,14 +22,6 @@ func TestHostingOurselves(t *testing.T) {
Path: os.Args[0],
Root: "/test.go",
Args: []string{"-test.run=TestBeChildCGIProcess"},
- // When using a shared library with gccgo, make sure
- // we can still find the library when we exec
- // ourselves.
- InheritEnv: []string{
- "LD_LIBRARY_PATH",
- "SHLIB_PATH",
- "DYLD_LIBRARY_PATH",
- },
}
expectedMap := map[string]string{
"test": "Hello CGI-in-CGI",