]> Cypherpunks repositories - gostls13.git/commitdiff
http/cgi: copy some PATH environment variables to child
authorIan Lance Taylor <iant@golang.org>
Fri, 22 Apr 2011 15:53:52 +0000 (08:53 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 22 Apr 2011 15:53:52 +0000 (08:53 -0700)
R=bradfitz, bradfitzwork, iant2, bradfitzgo
CC=golang-dev
https://golang.org/cl/4444058

src/pkg/http/cgi/host.go
src/pkg/http/cgi/matryoshka_test.go

index a713d7c3c30ea94291cd900f5d37cc2431652837..1ab5716766c25e316f53da12db9eb6ed05a033ac 100644 (file)
@@ -36,9 +36,10 @@ type Handler struct {
        Path string // path to the CGI executable
        Root string // root URI prefix of handler or empty for "/"
 
-       Env    []string    // extra environment variables to set, if any
-       Logger *log.Logger // optional log for errors or nil to use log.Print
-       Args   []string    // optional arguments to pass to child process
+       Env        []string    // extra environment variables to set, if any, as "key=value"
+       InheritEnv []string    // environment variables to inherit from host, as "key"
+       Logger     *log.Logger // optional log for errors or nil to use log.Print
+       Args       []string    // optional arguments to pass to child process
 }
 
 func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
@@ -110,6 +111,12 @@ func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
                env = append(env, h.Env...)
        }
 
+       for _, e := range h.InheritEnv {
+               if v := os.Getenv(e); v != "" {
+                       env = append(env, e+"="+v)
+               }
+       }
+
        cwd, pathBase := filepath.Split(h.Path)
        if cwd == "" {
                cwd = "."
index 3e4a6addfa5dd182ff57bac33ed4cc0632954650..548c050d41c22ed6f6f4bc590e1a7ddb358c5bdf 100644 (file)
@@ -22,6 +22,14 @@ 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",