From 3c96718027db0fc6bf40837b2983f849578b5f7f Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Tue, 12 Jan 2016 10:01:57 -0700 Subject: [PATCH 01/11] Version 0.8.1 --- dist/CHANGES.txt | 6 +++--- dist/README.txt | 2 +- main.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/CHANGES.txt b/dist/CHANGES.txt index bf62001b2..6e8963346 100644 --- a/dist/CHANGES.txt +++ b/dist/CHANGES.txt @@ -1,9 +1,9 @@ CHANGES - +0.8.1 (January 12, 2016) - Improved OCSP stapling -- Can reload config with new hosts that need certs from Let's Encrypt -- If pidfile is created, it is deleted when Caddy exits +- Better graceful reload when new hosts need certificates from Let's Encrypt +- Current pidfile is now deleted when Caddy exits - browse: New default template - gzip: Added min_length setting - import: Support for glob patterns (*) to import multiple files diff --git a/dist/README.txt b/dist/README.txt index aa0a0e784..8b6368a60 100644 --- a/dist/README.txt +++ b/dist/README.txt @@ -1,4 +1,4 @@ -CADDY 0.8 +CADDY 0.8.1 Website https://caddyserver.com diff --git a/main.go b/main.go index acff133a3..813423018 100644 --- a/main.go +++ b/main.go @@ -27,7 +27,7 @@ var ( const ( appName = "Caddy" - appVersion = "0.8" + appVersion = "0.8.1" ) func init() { From e74558eaea2d41ef217d81b0d363046bc35f52d5 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Wed, 13 Jan 2016 13:17:58 -0700 Subject: [PATCH 02/11] browse: Fix for files and dirs with ':' in name --- middleware/browse/browse.go | 2 +- middleware/browse/browse_test.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/middleware/browse/browse.go b/middleware/browse/browse.go index 94741d9b5..a6e8be867 100644 --- a/middleware/browse/browse.go +++ b/middleware/browse/browse.go @@ -196,7 +196,7 @@ func directoryListing(files []os.FileInfo, r *http.Request, canGoUp bool, root s fileCount++ } - url := url.URL{Path: name} + url := url.URL{Path: "./" + name} // prepend with "./" to fix paths with ':' in the name fileinfos = append(fileinfos, FileInfo{ IsDir: f.IsDir(), diff --git a/middleware/browse/browse_test.go b/middleware/browse/browse_test.go index a0c2cb244..f90f4f6f5 100644 --- a/middleware/browse/browse_test.go +++ b/middleware/browse/browse_test.go @@ -147,11 +147,11 @@ func TestBrowseTemplate(t *testing.T) {

/photos/

-test.html
+test.html
-test2.html
+test2.html
-test3.html
+test3.html
@@ -209,7 +209,7 @@ func TestBrowseJson(t *testing.T) { name += "/" } - url := url.URL{Path: name} + url := url.URL{Path: "./" + name} fileinfos = append(fileinfos, FileInfo{ IsDir: f.IsDir(), From c9e0517e5e8d90f901db670377ab3de7b057011c Mon Sep 17 00:00:00 2001 From: Alexey Khalyapin Date: Thu, 14 Jan 2016 11:52:03 +0300 Subject: [PATCH 03/11] Add .svg to default ext list in gzip middleware --- middleware/gzip/request_filter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware/gzip/request_filter.go b/middleware/gzip/request_filter.go index 76a9ef83c..10f25c59b 100644 --- a/middleware/gzip/request_filter.go +++ b/middleware/gzip/request_filter.go @@ -15,7 +15,7 @@ type RequestFilter interface { } // defaultExtensions is the list of default extensions for which to enable gzipping. -var defaultExtensions = []string{"", ".txt", ".htm", ".html", ".css", ".php", ".js", ".json", ".md", ".xml"} +var defaultExtensions = []string{"", ".txt", ".htm", ".html", ".css", ".php", ".js", ".json", ".md", ".xml", ".svg"} // DefaultExtFilter creates an ExtFilter with default extensions. func DefaultExtFilter() ExtFilter { From 0d8526b7d9254e3f6d657b74b12ee000aa18f3ce Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Fri, 15 Jan 2016 11:59:05 -0700 Subject: [PATCH 04/11] gzip: Allow empty extension (#509) --- caddy/setup/gzip.go | 2 +- caddy/setup/gzip_test.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/caddy/setup/gzip.go b/caddy/setup/gzip.go index 40c81252f..7d09fe01e 100644 --- a/caddy/setup/gzip.go +++ b/caddy/setup/gzip.go @@ -47,7 +47,7 @@ func gzipParse(c *Controller) ([]gzip.Config, error) { return configs, c.ArgErr() } for _, e := range exts { - if !strings.HasPrefix(e, ".") && e != gzip.ExtWildCard { + if !strings.HasPrefix(e, ".") && e != gzip.ExtWildCard && e != "" { return configs, fmt.Errorf(`gzip: invalid extension "%v" (must start with dot)`, e) } extFilter.Exts.Add(e) diff --git a/caddy/setup/gzip_test.go b/caddy/setup/gzip_test.go index 36eeb0aea..4c24ab0ab 100644 --- a/caddy/setup/gzip_test.go +++ b/caddy/setup/gzip_test.go @@ -50,6 +50,9 @@ func TestGzip(t *testing.T) { level 1 } gzip`, false}, + {`gzip { + ext "" + }`, false}, {`gzip { not /file ext .html level 1 From 0d8d0ba5a092ed539a26ec5a36ff80c5e1abcce5 Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Sat, 16 Jan 2016 12:36:40 +1100 Subject: [PATCH 05/11] letsencrypt: Fix perm of user key --- caddy/letsencrypt/crypto.go | 1 + caddy/letsencrypt/crypto_test.go | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/caddy/letsencrypt/crypto.go b/caddy/letsencrypt/crypto.go index 3322cc1ca..95f2069de 100644 --- a/caddy/letsencrypt/crypto.go +++ b/caddy/letsencrypt/crypto.go @@ -25,6 +25,7 @@ func saveRSAPrivateKey(key *rsa.PrivateKey, file string) error { if err != nil { return err } + keyOut.Chmod(0600) defer keyOut.Close() return pem.Encode(keyOut, &pemKey) } diff --git a/caddy/letsencrypt/crypto_test.go b/caddy/letsencrypt/crypto_test.go index ca81efd68..672095d90 100644 --- a/caddy/letsencrypt/crypto_test.go +++ b/caddy/letsencrypt/crypto_test.go @@ -6,6 +6,7 @@ import ( "crypto/rsa" "crypto/x509" "os" + "runtime" "testing" ) @@ -28,13 +29,26 @@ func TestSaveAndLoadRSAPrivateKey(t *testing.T) { t.Fatal("error saving private key:", err) } + // it doesn't make sense to test file permission on windows + if runtime.GOOS != "windows" { + // get info of the key file + info, err := os.Stat(keyFile) + if err != nil { + t.Fatal("error stating private key:", err) + } + // verify permission of key file is correct + if info.Mode().Perm() != 0600 { + t.Error("Expected key file to have permission 0600, but it wasn't") + } + } + // test load loadedKey, err := loadRSAPrivateKey(keyFile) if err != nil { t.Error("error loading private key:", err) } - // very loaded key is correct + // verify loaded key is correct if !rsaPrivateKeysSame(privateKey, loadedKey) { t.Error("Expected key bytes to be the same, but they weren't") } From bae4ac97643881c8b2464c20665b1ae78d7f76c8 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Sat, 23 Jan 2016 03:18:10 +0000 Subject: [PATCH 06/11] proxy: add a insecure_skip_verify option - closes #320 --- middleware/proxy/reverseproxy.go | 11 +++++++++++ middleware/proxy/upstream.go | 14 ++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/middleware/proxy/reverseproxy.go b/middleware/proxy/reverseproxy.go index 90e546670..4b18a822e 100644 --- a/middleware/proxy/reverseproxy.go +++ b/middleware/proxy/reverseproxy.go @@ -12,6 +12,7 @@ package proxy import ( + "crypto/tls" "io" "net" "net/http" @@ -103,6 +104,16 @@ var hopHeaders = []string{ "Upgrade", } +var InsecureTransport http.RoundTripper = &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, +} + func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request, extraHeaders http.Header) error { transport := p.Transport if transport == nil { diff --git a/middleware/proxy/upstream.go b/middleware/proxy/upstream.go index 28dbb665a..9d87c07ab 100644 --- a/middleware/proxy/upstream.go +++ b/middleware/proxy/upstream.go @@ -19,10 +19,11 @@ var ( ) type staticUpstream struct { - from string - proxyHeaders http.Header - Hosts HostPool - Policy Policy + from string + proxyHeaders http.Header + Hosts HostPool + Policy Policy + insecureSkipVerify bool FailTimeout time.Duration MaxFails int32 @@ -90,6 +91,9 @@ func NewStaticUpstreams(c parse.Dispenser) ([]Upstream, error) { } if baseURL, err := url.Parse(uh.Name); err == nil { uh.ReverseProxy = NewSingleHostReverseProxy(baseURL, uh.WithoutPathPrefix) + if upstream.insecureSkipVerify { + uh.ReverseProxy.Transport = InsecureTransport + } } else { return upstreams, err } @@ -175,6 +179,8 @@ func parseBlock(c *parse.Dispenser, u *staticUpstream) error { return c.ArgErr() } u.IgnoredSubPaths = ignoredPaths + case "insecure_skip_verify": + u.insecureSkipVerify = true default: return c.Errf("unknown property '%s'", c.Val()) } From 82b049229b5c6d91ed665a0280e9c1e7ffaddc27 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Sat, 23 Jan 2016 10:14:13 -0700 Subject: [PATCH 07/11] proxy: Add basic proxying test and InsecureSkipVerify transport test --- middleware/proxy/proxy.go | 6 +- middleware/proxy/proxy_test.go | 115 ++++++++++++++++++++++++++++++--- 2 files changed, 112 insertions(+), 9 deletions(-) diff --git a/middleware/proxy/proxy.go b/middleware/proxy/proxy.go index fcb00abea..3efcf6030 100644 --- a/middleware/proxy/proxy.go +++ b/middleware/proxy/proxy.go @@ -57,6 +57,10 @@ func (uh *UpstreamHost) Down() bool { return uh.CheckDown(uh) } +// tryDuration is how long to try upstream hosts; failures result in +// immediate retries until this duration ends or we get a nil host. +var tryDuration = 60 * time.Second + // ServeHTTP satisfies the middleware.Handler interface. func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { @@ -68,7 +72,7 @@ func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { // Since Select() should give us "up" hosts, keep retrying // hosts until timeout (or until we get a nil host). - for time.Now().Sub(start) < (60 * time.Second) { + for time.Now().Sub(start) < tryDuration { host := upstream.Select() if host == nil { return http.StatusBadGateway, errUnreachable diff --git a/middleware/proxy/proxy_test.go b/middleware/proxy/proxy_test.go index 55abe2dc2..18e2034b6 100644 --- a/middleware/proxy/proxy_test.go +++ b/middleware/proxy/proxy_test.go @@ -4,10 +4,13 @@ import ( "bufio" "bytes" "io" + "io/ioutil" + "log" "net" "net/http" "net/http/httptest" "net/url" + "os" "strings" "testing" "time" @@ -15,6 +18,70 @@ import ( "golang.org/x/net/websocket" ) +func init() { + tryDuration = 50 * time.Millisecond // prevent tests from hanging +} + +func TestReverseProxy(t *testing.T) { + log.SetOutput(ioutil.Discard) + defer log.SetOutput(os.Stderr) + + var requestReceived bool + backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + requestReceived = true + w.Write([]byte("Hello, client")) + })) + defer backend.Close() + + // set up proxy + p := &Proxy{ + Upstreams: []Upstream{newFakeUpstream(backend.URL, false)}, + } + + // create request and response recorder + r, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatalf("Failed to create request: %v", err) + } + w := httptest.NewRecorder() + + p.ServeHTTP(w, r) + + if !requestReceived { + t.Error("Expected backend to receive request, but it didn't") + } +} + +func TestReverseProxyInsecureSkipVerify(t *testing.T) { + log.SetOutput(ioutil.Discard) + defer log.SetOutput(os.Stderr) + + var requestReceived bool + backend := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + requestReceived = true + w.Write([]byte("Hello, client")) + })) + defer backend.Close() + + // set up proxy + p := &Proxy{ + Upstreams: []Upstream{newFakeUpstream(backend.URL, true)}, + } + + // create request and response recorder + r, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatalf("Failed to create request: %v", err) + } + w := httptest.NewRecorder() + + p.ServeHTTP(w, r) + + if !requestReceived { + t.Error("Even with insecure HTTPS, expected backend to receive request, but it didn't") + } +} + func TestWebSocketReverseProxyServeHTTPHandler(t *testing.T) { // No-op websocket backend simply allows the WS connection to be // accepted then it will be immediately closed. Perfect for testing. @@ -93,18 +160,24 @@ func TestWebSocketReverseProxyFromWSClient(t *testing.T) { } } -// newWebSocketTestProxy returns a test proxy that will -// redirect to the specified backendAddr. The function -// also sets up the rules/environment for testing WebSocket -// proxy. -func newWebSocketTestProxy(backendAddr string) *Proxy { - return &Proxy{ - Upstreams: []Upstream{&fakeUpstream{name: backendAddr}}, +func newFakeUpstream(name string, insecure bool) *fakeUpstream { + uri, _ := url.Parse(name) + u := &fakeUpstream{ + name: name, + host: &UpstreamHost{ + Name: name, + ReverseProxy: NewSingleHostReverseProxy(uri, ""), + }, } + if insecure { + u.host.ReverseProxy.Transport = InsecureTransport + } + return u } type fakeUpstream struct { name string + host *UpstreamHost } func (u *fakeUpstream) From() string { @@ -112,6 +185,32 @@ func (u *fakeUpstream) From() string { } func (u *fakeUpstream) Select() *UpstreamHost { + return u.host +} + +func (u *fakeUpstream) IsAllowedPath(requestPath string) bool { + return true +} + +// newWebSocketTestProxy returns a test proxy that will +// redirect to the specified backendAddr. The function +// also sets up the rules/environment for testing WebSocket +// proxy. +func newWebSocketTestProxy(backendAddr string) *Proxy { + return &Proxy{ + Upstreams: []Upstream{&fakeWsUpstream{name: backendAddr}}, + } +} + +type fakeWsUpstream struct { + name string +} + +func (u *fakeWsUpstream) From() string { + return "/" +} + +func (u *fakeWsUpstream) Select() *UpstreamHost { uri, _ := url.Parse(u.name) return &UpstreamHost{ Name: u.name, @@ -122,7 +221,7 @@ func (u *fakeUpstream) Select() *UpstreamHost { } } -func (u *fakeUpstream) IsAllowedPath(requestPath string) bool { +func (u *fakeWsUpstream) IsAllowedPath(requestPath string) bool { return true } From a6abec82101248860f7af3fc046903f9b6a53588 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 25 Jan 2016 08:47:28 -0700 Subject: [PATCH 08/11] letsencrypt: Update to match upstream refactor Challenge names now have their own type and constants --- caddy/letsencrypt/letsencrypt.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/caddy/letsencrypt/letsencrypt.go b/caddy/letsencrypt/letsencrypt.go index a2965a104..dbde60c71 100644 --- a/caddy/letsencrypt/letsencrypt.go +++ b/caddy/letsencrypt/letsencrypt.go @@ -346,7 +346,7 @@ func newClientPort(leEmail, port string) (*acme.Client, error) { client.SetHTTPAddress(":" + port) client.SetTLSAddress(":" + port) } - client.ExcludeChallenges([]string{"tls-sni-01", "dns-01"}) // We can only guarantee http-01 at this time, but tls-01 should work if port is not custom! + client.ExcludeChallenges([]acme.Challenge{acme.TLSSNI01, acme.DNS01}) // We can only guarantee http-01 at this time, but tls-01 should work if port is not custom! // If not registered, the user must register an account with the CA // and agree to terms From cf06abd69123d1b9c34951a67dcb5a0b8fdceaca Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 25 Jan 2016 13:41:51 -0700 Subject: [PATCH 09/11] Log restarts --- caddy/restart.go | 2 ++ caddy/restart_windows.go | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/caddy/restart.go b/caddy/restart.go index 56c856160..cc16568f7 100644 --- a/caddy/restart.go +++ b/caddy/restart.go @@ -32,6 +32,8 @@ func init() { // work if executing with `go run`, since the binary is cleaned up // when `go run` sees the initial parent process exit. func Restart(newCaddyfile Input) error { + log.Println("[INFO] Restarting") + if newCaddyfile == nil { caddyfileMu.Lock() newCaddyfile = caddyfile diff --git a/caddy/restart_windows.go b/caddy/restart_windows.go index 18478f4bd..f179ba693 100644 --- a/caddy/restart_windows.go +++ b/caddy/restart_windows.go @@ -1,8 +1,12 @@ package caddy +import "log" + // Restart restarts Caddy forcefully using newCaddyfile, // or, if nil, the current/existing Caddyfile is reused. func Restart(newCaddyfile Input) error { + log.Println("[INFO] Restarting") + if newCaddyfile == nil { caddyfileMu.Lock() newCaddyfile = caddyfile From ad664e5bbaa85b66cdf1e370692bf96fea288f51 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 25 Jan 2016 13:43:35 -0700 Subject: [PATCH 10/11] browse: Render names with multiple consecutive spaces correctly --- caddy/setup/browse.go | 1 + 1 file changed, 1 insertion(+) diff --git a/caddy/setup/browse.go b/caddy/setup/browse.go index 40d5746ee..13d42e542 100644 --- a/caddy/setup/browse.go +++ b/caddy/setup/browse.go @@ -214,6 +214,7 @@ td .name { margin-left: 1.75em; word-break: break-all; overflow-wrap: break-word; + white-space: pre-wrap; } footer { From 7613ae3bf0dfc536d1a22fc15b71d36ae9544a7d Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 25 Jan 2016 13:46:07 -0700 Subject: [PATCH 11/11] Change to Windows line endings for poor Notepad --- dist/CHANGES.txt | 342 +++++++------- dist/LICENSES.txt | 1078 ++++++++++++++++++++++----------------------- dist/README.txt | 42 +- 3 files changed, 731 insertions(+), 731 deletions(-) diff --git a/dist/CHANGES.txt b/dist/CHANGES.txt index 6e8963346..21fa64296 100644 --- a/dist/CHANGES.txt +++ b/dist/CHANGES.txt @@ -1,171 +1,171 @@ -CHANGES - -0.8.1 (January 12, 2016) -- Improved OCSP stapling -- Better graceful reload when new hosts need certificates from Let's Encrypt -- Current pidfile is now deleted when Caddy exits -- browse: New default template -- gzip: Added min_length setting -- import: Support for glob patterns (*) to import multiple files -- rewrite: New complex rules with conditions, regex captures, and status code -- tls: Removed DES ciphers from default cipher suite list -- tls: All supported certificates are OCSP-stapled -- tls: Allow custom configuration without specifying certificate and key -- tls: No longer allow HTTPS over port 80 -- Dozens of bug fixes, improvements, and more tests across the board - -0.8.0 (December 4, 2015) -- HTTPS by default via Let's Encrypt (certs & keys are fully managed) -- Graceful restarts (on POSIX-compliant systems) -- Major internal refactoring to allow use of Caddy as library -- New directive 'mime' to customize Content-Type based on file extension -- New -accept flag to accept Let's Encrypt SA without prompt -- New -email flag to customize default email used for ACME transactions -- New -ca flag to customize ACME CA server URL -- New -revoke flag to revoke a certificate -- New -log flag to enable process log -- New -pidfile flag to enable writing pidfile -- New -grace flag to customize the graceful shutdown timeout -- New support for SIGHUP, SIGTERM, and SIGQUIT signals -- browse: Render filenames with multiple whitespace properly -- core: Use environment variables in Caddyfile -- markdown: Include Last-Modified header in response -- markdown: Render tables, strikethrough, and fenced code blocks -- proxy: Ability to exclude/ignore paths from proxying -- startup, shutdown: Better Windows support -- templates: Bug fix for .Host when port is absent -- templates: Include Last-Modified header in response -- templates: Support for custom delimiters -- tls: For non-local hosts, default port is now 443 unless specified -- tls: Force-disable HTTPS -- tls: Specify Let's Encrypt email address -- Many, many more tests and numerous bug fixes and improvements - - -0.7.6 (September 28, 2015) -- Pass in simple Caddyfile as command line arguments -- basicauth: Support for legacy htpasswd files -- browse: JSON response with file listing -- core: Caddyfile as command line argument -- errors: Can write full stack trace to HTTP response for debugging -- errors, log: Roll log files after certain size or age -- proxy: Fix for 32-bit architectures -- rewrite: Better compatibility with fastcgi and PHP apps -- templates: Added .StripExt and .StripHTML methods -- Internal improvements and minor bug fixes - - -0.7.5 (August 5, 2015) -- core: All listeners bind to 0.0.0.0 unless 'bind' directive is used -- fastcgi: Set HTTPS env variable if connection is secure -- log: Output to system log (except Windows) -- markdown: Added dev command to disable caching during development -- markdown: Fixed error reporting during initial site generation -- markdown: Fixed crash if path does not exist when server starts -- markdown: Fixed site generation and link indexing when files change -- templates: Added .NowDate for use in date-related functions -- Several bug fixes related to startup and shutdown functions - - -0.7.4 (July 30, 2015) -- browse: Sorting preference persisted in cookie -- browse: Added index.txt and default.txt to list of default files -- browse: Template files may now use Caddy template actions -- markdown: Template files may now use Caddy template actions -- markdown: Several bug fixes, especially for large and empty Markdown files -- markdown: Generate index pages to link to markdown pages (sitegen only) -- markdown: Flatten structure of front matter, changed template variables -- redir: Can use variables (placeholders) like log formats can -- redir: Catch-all redirects no longer preserve path; use {uri} instead -- redir: Syntax supports redirect tables by opening a block -- templates: Renamed .Date to .Now and added .Truncate, .Replace actions -- Other minor internal improvements and more tests - - -0.7.3 (July 15, 2015) -- errors: Error log now shows timestamp with each entry -- gzip: Fixed; Default filtering is by extension; removed MIME type filter -- import: Fixed; works inside and outside server blocks -- redir: Query string preserved on catch-all redirects -- templates: Proper 403 or 404 errors for restricted or missing files - - -0.7.2 (July 1, 2015) -- Custom builds through caddyserver.com - extend Caddy by writing addons -- browse: Sort by clicking column heading or using query string -- core: Serving hostname that doesn't resolve issues warning then listens on 0.0.0.0 -- errors: Missing error page during parse time is warning, not error -- ext: Extension only appended if request path does not end in / -- fastcgi: Fix for backend responding without status text -- fastcgi: Fix PATH_TRANSLATED when PATH_INFO is empty (RFC 3875) -- git: Removed from core (available as add-on) -- gzip: Enable by file path and/or extension -- gzip: Customize compression level -- log: Fix for missing status in log entry when error unhandled -- proxy: Strip prefix from path for proxy to path -- redir: Meta tag redirects -- templates: Support for nested includes -- Internal improvements and more tests - - -0.7.1 (June 2, 2015) -- basicauth: Patched timing vulnerability -- proxy: Support for WebSocket backends -- tls: Client authentication - - -0.7.0 (May 25, 2015) -- New directive 'internal' to protect resources with X-Accel-Redirect -- New -version flag to show program name and version -- core: Fixed escaped backslash characters inside quoted strings -- core: Fixed parsing Caddyfile for IPv6 addresses missing ports -- core: A notice is shown when non-local address resolves to loopback interface -- core: Warns if file descriptor limit is too low for production site (Mac/Linux) -- fastcgi: Support for Unix sockets -- git: Fixed issue that prevented pulling at designated interval -- header: Remove a header field by prefixing field name with "-" -- markdown: Simple static site generation -- markdown: Support for metadata ("front matter") at beginning of files -- rewrite: Experimental support for regular expressions -- tls: Customize cipher suites and protocols -- tls: Removed RC4 ciphers -- Other internal improvements that are not user-facing (more tests, etc.) - - -0.6.0 (May 7, 2015) -- New directive 'git' to automatically pull changes -- New directive 'bind' to override host server binds to -- New -root flag to specify root path to default site -- Ability to receive config data piped through stdin -- core: Warning if root directory doesn't exist at startup -- core: Entire process dies if any server fails to start -- gzip: Fixed Content-Length value when proxying requests -- errors: Error log now includes file and line number of panics -- fastcgi: Pass custom environment variables -- fastcgi: Support for HEAD, OPTIONS, PUT, PATCH, and DELETE methods -- fastcgi: Fixed SERVER_SOFTWARE variables -- markdown: Support for index files when URL points to a directory -- proxy: Load balancing with multiple backends, health checks, failovers, and multiple policies -- proxy: Add custom headers -- startup/shutdown: Run command in background with '&' at end -- templates: Added .tpl and .tmpl as default extensions -- templates: Support for index files when URL points to a directory -- templates: Changed .RemoteAddr to .IP and stripped out remote port -- tls: TLS disabled (with warning) for servers that are explicitly http:// -- websocket: Fixed SERVER_SOFTWARE and GATEWAY_INTERFACE variables -- Many internal improvements - - -0.5.1 (April 30, 2015) -- Default host is now 0.0.0.0 (wildcard) -- New -host and -port flags to override default host and port -- core: Support for binding to 0.0.0.0 -- core: Graceful error handling during heavy load; proper error responses -- errors: Fixed file path handling -- errors: Fixed panic due to nil log file -- fastcgi: Support for index files -- fastcgi: Fix for handling errors that come from responder - - -0.5.0 (April 28, 2015) -- Initial release +CHANGES + +0.8.1 (January 12, 2016) +- Improved OCSP stapling +- Better graceful reload when new hosts need certificates from Let's Encrypt +- Current pidfile is now deleted when Caddy exits +- browse: New default template +- gzip: Added min_length setting +- import: Support for glob patterns (*) to import multiple files +- rewrite: New complex rules with conditions, regex captures, and status code +- tls: Removed DES ciphers from default cipher suite list +- tls: All supported certificates are OCSP-stapled +- tls: Allow custom configuration without specifying certificate and key +- tls: No longer allow HTTPS over port 80 +- Dozens of bug fixes, improvements, and more tests across the board + +0.8.0 (December 4, 2015) +- HTTPS by default via Let's Encrypt (certs & keys are fully managed) +- Graceful restarts (on POSIX-compliant systems) +- Major internal refactoring to allow use of Caddy as library +- New directive 'mime' to customize Content-Type based on file extension +- New -accept flag to accept Let's Encrypt SA without prompt +- New -email flag to customize default email used for ACME transactions +- New -ca flag to customize ACME CA server URL +- New -revoke flag to revoke a certificate +- New -log flag to enable process log +- New -pidfile flag to enable writing pidfile +- New -grace flag to customize the graceful shutdown timeout +- New support for SIGHUP, SIGTERM, and SIGQUIT signals +- browse: Render filenames with multiple whitespace properly +- core: Use environment variables in Caddyfile +- markdown: Include Last-Modified header in response +- markdown: Render tables, strikethrough, and fenced code blocks +- proxy: Ability to exclude/ignore paths from proxying +- startup, shutdown: Better Windows support +- templates: Bug fix for .Host when port is absent +- templates: Include Last-Modified header in response +- templates: Support for custom delimiters +- tls: For non-local hosts, default port is now 443 unless specified +- tls: Force-disable HTTPS +- tls: Specify Let's Encrypt email address +- Many, many more tests and numerous bug fixes and improvements + + +0.7.6 (September 28, 2015) +- Pass in simple Caddyfile as command line arguments +- basicauth: Support for legacy htpasswd files +- browse: JSON response with file listing +- core: Caddyfile as command line argument +- errors: Can write full stack trace to HTTP response for debugging +- errors, log: Roll log files after certain size or age +- proxy: Fix for 32-bit architectures +- rewrite: Better compatibility with fastcgi and PHP apps +- templates: Added .StripExt and .StripHTML methods +- Internal improvements and minor bug fixes + + +0.7.5 (August 5, 2015) +- core: All listeners bind to 0.0.0.0 unless 'bind' directive is used +- fastcgi: Set HTTPS env variable if connection is secure +- log: Output to system log (except Windows) +- markdown: Added dev command to disable caching during development +- markdown: Fixed error reporting during initial site generation +- markdown: Fixed crash if path does not exist when server starts +- markdown: Fixed site generation and link indexing when files change +- templates: Added .NowDate for use in date-related functions +- Several bug fixes related to startup and shutdown functions + + +0.7.4 (July 30, 2015) +- browse: Sorting preference persisted in cookie +- browse: Added index.txt and default.txt to list of default files +- browse: Template files may now use Caddy template actions +- markdown: Template files may now use Caddy template actions +- markdown: Several bug fixes, especially for large and empty Markdown files +- markdown: Generate index pages to link to markdown pages (sitegen only) +- markdown: Flatten structure of front matter, changed template variables +- redir: Can use variables (placeholders) like log formats can +- redir: Catch-all redirects no longer preserve path; use {uri} instead +- redir: Syntax supports redirect tables by opening a block +- templates: Renamed .Date to .Now and added .Truncate, .Replace actions +- Other minor internal improvements and more tests + + +0.7.3 (July 15, 2015) +- errors: Error log now shows timestamp with each entry +- gzip: Fixed; Default filtering is by extension; removed MIME type filter +- import: Fixed; works inside and outside server blocks +- redir: Query string preserved on catch-all redirects +- templates: Proper 403 or 404 errors for restricted or missing files + + +0.7.2 (July 1, 2015) +- Custom builds through caddyserver.com - extend Caddy by writing addons +- browse: Sort by clicking column heading or using query string +- core: Serving hostname that doesn't resolve issues warning then listens on 0.0.0.0 +- errors: Missing error page during parse time is warning, not error +- ext: Extension only appended if request path does not end in / +- fastcgi: Fix for backend responding without status text +- fastcgi: Fix PATH_TRANSLATED when PATH_INFO is empty (RFC 3875) +- git: Removed from core (available as add-on) +- gzip: Enable by file path and/or extension +- gzip: Customize compression level +- log: Fix for missing status in log entry when error unhandled +- proxy: Strip prefix from path for proxy to path +- redir: Meta tag redirects +- templates: Support for nested includes +- Internal improvements and more tests + + +0.7.1 (June 2, 2015) +- basicauth: Patched timing vulnerability +- proxy: Support for WebSocket backends +- tls: Client authentication + + +0.7.0 (May 25, 2015) +- New directive 'internal' to protect resources with X-Accel-Redirect +- New -version flag to show program name and version +- core: Fixed escaped backslash characters inside quoted strings +- core: Fixed parsing Caddyfile for IPv6 addresses missing ports +- core: A notice is shown when non-local address resolves to loopback interface +- core: Warns if file descriptor limit is too low for production site (Mac/Linux) +- fastcgi: Support for Unix sockets +- git: Fixed issue that prevented pulling at designated interval +- header: Remove a header field by prefixing field name with "-" +- markdown: Simple static site generation +- markdown: Support for metadata ("front matter") at beginning of files +- rewrite: Experimental support for regular expressions +- tls: Customize cipher suites and protocols +- tls: Removed RC4 ciphers +- Other internal improvements that are not user-facing (more tests, etc.) + + +0.6.0 (May 7, 2015) +- New directive 'git' to automatically pull changes +- New directive 'bind' to override host server binds to +- New -root flag to specify root path to default site +- Ability to receive config data piped through stdin +- core: Warning if root directory doesn't exist at startup +- core: Entire process dies if any server fails to start +- gzip: Fixed Content-Length value when proxying requests +- errors: Error log now includes file and line number of panics +- fastcgi: Pass custom environment variables +- fastcgi: Support for HEAD, OPTIONS, PUT, PATCH, and DELETE methods +- fastcgi: Fixed SERVER_SOFTWARE variables +- markdown: Support for index files when URL points to a directory +- proxy: Load balancing with multiple backends, health checks, failovers, and multiple policies +- proxy: Add custom headers +- startup/shutdown: Run command in background with '&' at end +- templates: Added .tpl and .tmpl as default extensions +- templates: Support for index files when URL points to a directory +- templates: Changed .RemoteAddr to .IP and stripped out remote port +- tls: TLS disabled (with warning) for servers that are explicitly http:// +- websocket: Fixed SERVER_SOFTWARE and GATEWAY_INTERFACE variables +- Many internal improvements + + +0.5.1 (April 30, 2015) +- Default host is now 0.0.0.0 (wildcard) +- New -host and -port flags to override default host and port +- core: Support for binding to 0.0.0.0 +- core: Graceful error handling during heavy load; proper error responses +- errors: Fixed file path handling +- errors: Fixed panic due to nil log file +- fastcgi: Support for index files +- fastcgi: Fix for handling errors that come from responder + + +0.5.0 (April 28, 2015) +- Initial release diff --git a/dist/LICENSES.txt b/dist/LICENSES.txt index 83c2ea97b..c6ca2e2b0 100644 --- a/dist/LICENSES.txt +++ b/dist/LICENSES.txt @@ -1,539 +1,539 @@ -The enclosed software makes use of third-party libraries either in full -or in part, original or modified. This file is part of your download so -as to be in full compliance with the licenses of all bundled property. - - - -### -### github.com/mholt/caddy -### - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - - - - - - - -### -### Go standard library and http2 -### - - -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - - - - -### -### github.com/russross/blackfriday -### - - -Blackfriday is distributed under the Simplified BSD License: - -> Copyright © 2011 Russ Ross -> All rights reserved. -> -> Redistribution and use in source and binary forms, with or without -> modification, are permitted provided that the following conditions -> are met: -> -> 1. Redistributions of source code must retain the above copyright -> notice, this list of conditions and the following disclaimer. -> -> 2. Redistributions in binary form must reproduce the above -> copyright notice, this list of conditions and the following -> disclaimer in the documentation and/or other materials provided with -> the distribution. -> -> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -> POSSIBILITY OF SUCH DAMAGE. - - - - - - - - -### -### github.com/dustin/go-humanize -### - - -Copyright (c) 2005-2008 Dustin Sallings - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - - - - - - - -### -### github.com/flynn/go-shlex -### - -Apache 2.0 license as found in this file - - - - - - -### -### github.com/go-yaml/yaml -### - - -Copyright (c) 2011-2014 - Canonical Inc. - -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. +The enclosed software makes use of third-party libraries either in full +or in part, original or modified. This file is part of your download so +as to be in full compliance with the licenses of all bundled property. + + + +### +### github.com/mholt/caddy +### + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + + + + + + + +### +### Go standard library and http2 +### + + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + + + + +### +### github.com/russross/blackfriday +### + + +Blackfriday is distributed under the Simplified BSD License: + +> Copyright © 2011 Russ Ross +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions +> are met: +> +> 1. Redistributions of source code must retain the above copyright +> notice, this list of conditions and the following disclaimer. +> +> 2. Redistributions in binary form must reproduce the above +> copyright notice, this list of conditions and the following +> disclaimer in the documentation and/or other materials provided with +> the distribution. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +> POSSIBILITY OF SUCH DAMAGE. + + + + + + + + +### +### github.com/dustin/go-humanize +### + + +Copyright (c) 2005-2008 Dustin Sallings + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + + + + + + + +### +### github.com/flynn/go-shlex +### + +Apache 2.0 license as found in this file + + + + + + +### +### github.com/go-yaml/yaml +### + + +Copyright (c) 2011-2014 - Canonical Inc. + +This software is licensed under the LGPLv3, included below. + +As a special exception to the GNU Lesser General Public License version 3 +("LGPL3"), the copyright holders of this Library give you permission to +convey to a third party a Combined Work that links statically or dynamically +to this Library without providing any Minimal Corresponding Source or +Minimal Application Code as set out in 4d or providing the installation +information set out in section 4e, provided that you comply with the other +provisions of LGPL3 and provided that you meet, for the Application the +terms and conditions of the license(s) which apply to the Application. + +Except as stated in this special exception, the provisions of LGPL3 will +continue to comply in full to this Library. If you modify this Library, you +may apply this exception to your version of this Library, but you are not +obliged to do so. If you do not wish to do so, delete this exception +statement from your version. This exception does not (and cannot) modify any +license terms which apply to the Application, with which you must still +comply. + + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/dist/README.txt b/dist/README.txt index 8b6368a60..85baab0f5 100644 --- a/dist/README.txt +++ b/dist/README.txt @@ -1,21 +1,21 @@ -CADDY 0.8.1 - -Website - https://caddyserver.com - @caddyserver - -Source Code - https://github.com/mholt/caddy - - -For instructions on using Caddy, please see the user guide on the website. For a list of what's new in this version, see CHANGES.txt. - -If you have a question, bug report, or would like to contribute, please open an issue or submit a pull request on GitHub. Your contributions do not go unnoticed! - -For a good time, follow @mholt6 on Twitter. - -And thanks - you're awesome! - - ---- -(c) 2015 Matthew Holt +CADDY 0.8.1 + +Website + https://caddyserver.com + @caddyserver + +Source Code + https://github.com/mholt/caddy + + +For instructions on using Caddy, please see the user guide on the website. For a list of what's new in this version, see CHANGES.txt. + +If you have a question, bug report, or would like to contribute, please open an issue or submit a pull request on GitHub. Your contributions do not go unnoticed! + +For a good time, follow @mholt6 on Twitter. + +And thanks - you're awesome! + + +--- +(c) 2015 Matthew Holt