100 Commits
Author SHA1 Message Date
Matthew Holt 7a58576d34 reverseproxy: keep empty unknown-length request bodies retryable
The consumed-stream retry guard treated any read of a streaming request
body as consumption. Go's transport probes unknown-length bodies of GET,
HEAD, and similar requests before sending them, and HTTP/3 reports
bodyless GET and HEAD requests with an unknown length, so every such
request lost its retries once an upstream connection was established.

A first read that returns io.EOF without data no longer counts as
consumption. Later attempts send http.NoBody, while bodies that yield
data, fail, or are interrupted mid-read remain non-retryable.

Follow-up to de1bcf6d-457c-4348-9d4e-5eeb41cc120b.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 0c7629e52b caddyhttp: verify CEL pattern provenance and satisfy lint
Follow up report dff6e149-9cd3-47fb-8e21-b4d3d4bad807: make AST handling exhaustive and preallocate map entries. Verify regex and URL-pattern factories do not expand runtime env/file placeholders while preserving their existing pattern grammar and static behavior.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 9fca4b8ab8 caddyhttp: keep runtime CEL matcher arguments literal
Fix report dff6e149-9cd3-47fb-8e21-b4d3d4bad807 by retaining string provenance through CEL matcher factories. Runtime strings must not become templates or globs on a second pass; static leaves retain their existing matcher syntax and caching.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 13ae3457cf caddyhttp: reject opaque targets before routing and proxying
Reject opaque HTTP request targets before either normal or error routes can interpret them. Clear URL.Opaque defensively on proxy clones. Verify HTTP/1 parsing, path authentication, supported target forms and outbound serialization without contacting an upstream.

Addresses scan report e17d2fcd-d50c-4d68-82d1-96519a437a24.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 2ee6bdf837 reverseproxy: align trailer tests with consumed-stream retry safety
Follow up report de1bcf6d-457c-4348-9d4e-5eeb41cc120b. Expect one transport attempt for consumed partial streams while keeping unread dial retries and fully buffered trailer replay covered.

Validated the entire reverseproxy package with offline race-short tests in a loopback-only network namespace.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot d52d097109 reverseproxy: fix buffered body ownership and unsafe retries
Fix report de1bcf6d-457c-4348-9d4e-5eeb41cc120b. Release pooled buffers exactly once, serialize reads with release, and retain safe replay cursors for fully buffered requests. Retire each stream attempt so consumed bodies cannot be retried while unread dial failures remain retryable.

Add deterministic concurrent ownership checks, boundary coverage, local transport failure cases, and synthetic canary tests.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 7cc0460738 httpcaddyfile: update nested-route fixture to retain all handlers
The old expected JSON captured the handler-dropping bug. Keep invoke and the following response in each named route, matching the corrected adapter.

Regression fixture for scan report 99a222bd-3c1e-4096-b94d-43076920963c.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 09630fa5fa caddyhttp: sanitize header aliases before request validation
Apply the existing header-alias rules before method and host validation, so early errors cannot carry spoofed identity aliases into user-defined error routes. Verify all early error paths with synthetic authentication headers.

Addresses scan report 3ebe3dfa-8541-44a7-8f1f-cd5071d55a67. The supplied checker has a malformed Authorization header; regression tests use independently constructed requests.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 7593fd002f rewrite: clean paths before regexp replacement changes depth
Canonicalize the path before capturing and substituting its components, not only afterward. Retain repeated slashes, query strings and valid alternate encodings; cover the supplied depth-changing traversal and encoded dot segments.

Addresses scan report 34013c71-0786-4179-8403-eacc143a1d89 (marked duplicate, but not fixed by the prior post-replacement safeguard).

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 9461da6583 caddytls: preserve regexp quantifiers during placeholder expansion
Expand only known placeholders in TLS regexp patterns, matching HTTP regexp behavior. Test numeric quantifiers and selection of the client-certificate-verifying fallback policy.

Addresses scan report b6c9c0a1-79a7-4254-b057-b1d8fc96b412.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot b0731f7d2a httpcaddyfile: allocate route groups across named and site routes
Share the adaptation group counter with named-route extraction because group satisfaction is request-wide. Cover nested invoke and handle_path while retaining sibling exclusivity.

Addresses scan report fb62a11d-5561-49e3-87df-c175ea5a1f4d.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot ec849f542c httpcaddyfile: preserve all handlers in simplified named routes
Retain the complete matcherless route instead of only its first handler. Verify header and authentication ordering with authorized and unauthorized requests without starting a server.

Addresses scan report 99a222bd-3c1e-4096-b94d-43076920963c.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 13d000e010 fileserver: anchor file-match paths relative to root
Use filepath.Rel rather than prefix trimming for both existing and fallback candidates. Preserve dotfiles and directory suffixes, and always expose a slash-prefixed path so rewrites and downstream path guards agree.

Addresses scan report 3188624e-2157-49e6-b3e0-8c5049b72269.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:41 -07:00
Matthew HoltandCopilot 32bb6603b2 caddytls: normalize automation policy selection
Policy subjects and handshake names were compared without the IDNA
Lookup normalization CertMagic applies to SNI, so a Unicode or mapped
SNI could select the fallback issuer. Normalize both the same way,
preserving wildcard labels and non-DNS subjects.

Addresses scan report e804f22226c85b87.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 7ed32623a6 caddytls: handle absent on-demand permission
An empty on_demand object with no permission module caused a nil
dereference during the handshake. Treat it like absent permission
settings.

Addresses scan report 01e4330f22e4a986.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 6346f043fc caddytls: block unprotected manager fallback
For wildcard or default policies with explicit certificate managers but
no on-demand permission module, a manager miss fell through to issuance
for any client-chosen SNI. Fail closed after managers are consulted.

Addresses scan report a6eb136fbbaa01c0.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 0c37a20697 caddytls: honor CA-pool TLS server name
The http CA pool's tls.server_name was never applied, so the endpoint
was verified against the URL host instead. Use the configured name,
including placeholders.

Addresses scan report 8b7d4c9c392321ab.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 48bf07591a caddy: run OnCancel callbacks and restore std logger on reload
Callbacks registered with OnCancel were appended to a copy of the
Context and never ran on config unload, so e.g. the std log redirect to
a removed sink was never undone. Share callbacks across copies of a
Context so they run exactly once on cancellation; callbacks registered
after cancellation run immediately, and OnCancel on a zero-value
Context remains safe.

Since overlapping configs mean an old config's cleanup runs after the
new one is set up, track ownership of the default logger and std log
redirect so cleanup restores the most recent live config's state.

Addresses scan report 88637e95bf243f5a.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot cffa6a0e8a logging: filter typed string and certificate SAN arrays
The hash, ip_mask, regexp and multi_regexp filters only handled
LoggableStringArray, so typed string, IP and URI slices (such as TLS
client certificate SANs) bypassed them. Filter those and string array
marshalers too, without mutating the source slices.

Addresses scan report 26365d1881c34ded.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot ebfc03a7b6 caddyhttp: preserve invalid UTF-8 bytes throughout path matching
Lowercasing and slash-preserving path cleaning rewrote invalid UTF-8
bytes as U+FFFD, so the path matcher could evaluate a different path
than the file server opens. Preserve the original bytes in both, keeping
case-insensitive matching for valid Unicode.

Addresses scan report 18c02f60a5b43529.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot c3fab6576f caddyhttp: keep escaped path cursor at wildcard span start
When an escape sequence was followed by a wildcard in the pattern, the
path cursor had already skipped to the last hex digit, so an encoded
slash could be swallowed into the wildcard span. Advance the cursor by
the escape width only when the character is consumed.

Addresses scan report 0e63a0fe7fea5ef7.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 3c65959560 rewrite: escape decoded original and component path placeholders
Decoded path placeholders (orig_uri.path, path components and file
matcher values) were inserted raw into the rewritten URI, so an
encoded '%' or '?' could be decoded a second time. Escape all decoded
path placeholders in path context in a single replacement pass; escaped
and whole-URI placeholders keep their URI syntax.

Addresses scan report 9e3a082391f793d1.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot fc6c202ea6 rewrite: canonicalize paths after substring and regexp replacement
Like prefix/suffix stripping, substring and regexp path replacement can
produce a relative path or expose dot segments that later path-scoped
handlers interpret differently. Apply the existing canonicalizePath
safeguard whenever these operations change the path.

Addresses scan report 65568b0d767b733c.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot fe69f5da2d caddyhttp: enforce bounded host metric labels on HTTPS
With per_host metrics, HTTPS servers automatically observed catch-all
hosts, and port/case variants of configured hosts produced distinct
labels. Require explicit observe_catchall_hosts for unconfigured hosts,
normalize the host label, and also collect hosts from subroutes, error
routes and named routes (scanned after handlers are provisioned).

Behavior change: unconfigured hosts on HTTPS servers are now labeled
"_other" unless observe_catchall_hosts is enabled.

Addresses scan report 457dcf090b421495.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 927eb48c21 headers: compile dynamic replacement regexes once per operation
A placeholder-dependent search_regexp was recompiled for every matching
header value. Compile it once per replacement operation, keep skipping
invalid expanded expressions, and merge the duplicated "*" code path.

Addresses scan report 6c26a7b4c2e5ddc3.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot a6af063626 caddyauth: cache only successful password comparisons
Failed comparisons for missing accounts all used the same fake hash, so
their cached results returned quickly while failures for real accounts
did not, leaking which usernames exist. Cache only successful
comparisons and scope cache keys to the username.

Addresses scan report 430e037dbf6a4fd3.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew HoltandCopilot 3fea1cc800 cmd: validate storage archive entries before import
Reject absolute, non-canonical, traversing or platform-unsafe keys and
non-regular entries (links, devices, FIFOs) before writing to storage,
so importing an untrusted archive cannot write outside the storage root.
Directory entries are skipped and a single leading "./" is removed, so
archives created with tar(1) from a storage directory still import.

Addresses scan report 89de9a51d786c23e.

Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-11 11:06:40 -07:00
Matthew Holt 4ad0c6b197 Clarify release flow instructions 2026-09-30 14:33:04 -06:00
Matt HoltandClaude Code 0a137e2faf caddyhttp: use errors.AsType for request body limit errors (#8090)
With the Go 1.26 floor, golangci-lint's modernize analyzer (errorsastype)
flags the three errors.As calls that look for RequestBodyLimitError, which
turned the Lint workflow red on master after #8056. Replace them with the
generic errors.AsType; behavior is unchanged.

Assistance disclosure: this change was made by an AI agent (Claude Sonnet
5.5, model ID claude-sonnet-5-5) acting as Matthew Holt's agent and under
his approval. Build, go vet and the caddyhttp and caddyhttp/templates tests
pass locally; golangci-lint itself was not run locally.

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-09-30 13:50:42 -06:00
Matthew Holt 90efc8fe64 go.mod: Upgrade CertMagic, acmez, ZeroSSL, & some others 2026-09-30 13:48:29 -06:00
Matthew Holt 51a4bde176 Update human and agent contributing guidelines 2026-06-20 14:19:24 -06:00
Matthew Holt 5760382213 caddyhttp: Clean up variable scope in vars matcher 2026-06-20 13:45:10 -06:00
Matthew Holt 30f0ddd912 caddyhttp: Document dropping underscore headers 2026-06-20 13:45:10 -06:00
Matthew Holt 6ab855d3c4 browse: Update Caddy logo 2026-06-20 13:45:10 -06:00
Matthew Holt ab56721a73 Remove -v from tests
Also add release notes to TODO for release proposal flow
2026-06-17 10:38:00 -06:00
Matt Holt 4dbe0a93be readme: Update logo
Signed-off-by: Matt Holt <mholt@users.noreply.github.com>
2026-06-16 23:39:45 -06:00
Matthew Holt 4fd8c87f56 caddyhttp: Default max_header_bytes to 16 KiB 2026-06-09 12:07:27 -06:00
Matthew Holt 4c04143261 Clarify policies for agents / LLM use 2026-05-26 14:03:39 -06:00
Matthew Holt 44b667a79f go.mod: Update x/crypto 2026-05-22 09:25:04 -06:00
Matt Holt 6c675e29f8 caddytls: Fix client auth (fix #7724) (#7727)
The peer certificates should be loaded even if existingVerifyPeerCert is nil.

Patched with the assistance of Copilot, as an experiment.
2026-05-14 10:05:57 -06:00
Matthew Holt cc58caa109 go.mod: Upgrade quic-go to v0.59.1 2026-05-11 17:33:42 -06:00
Matthew Holt 761347aa63 templates: Explicitly warn about misconfigurations 2026-05-11 16:45:49 -06:00
Matthew Holt 9c78b97f9e fastcgi: Fix lint 2026-05-08 10:46:28 -06:00
Matt Holt 4d6945769d reverseproxy: Add ability to clear dynamic upstreams cache during retries (#7662)
* reverseproxy: Add ability to clear dynamic upstreams cache during retries

This is an optional interface for dynamic upstream modules to implement if they cache results.

TODO: More documentation; this is an experiment.

* Add some godoc

* Export interface; update godoc
2026-04-28 09:16:18 -06:00
Matthew Holt f6ee80be1b go.mod: Upgrade dependencies including CertMagic 2026-04-24 11:40:54 -06:00
Matthew Holt 48c08e3890 admin: Limit config size (by @omercnet)
GitHub was giving me errors related to merge status so we are doing this instead
2026-04-24 11:28:40 -06:00
Matthew Holt cf42f61566 Typo fix in security policy 2026-04-24 09:50:06 -06:00
Matt Holt 441d5eb062 caddyhttp: prefer port 443 in auto-HTTPS and add tests (#7666) 2026-04-23 17:29:03 +10:00
Matt Holt acf8d6a1ae caddytls: Consolidate empty APs more smartly (#7567)
* caddytls: Consoldate empty APs more smartly (fix #7559)

* Revise consolidation logic
2026-03-26 14:41:34 -06:00
Matt Holt e98ed6232d chore: Resolve recent CI failures (#7593) 2026-03-25 23:21:27 -06:00
Matthew Holt c35ba5588d Add missing return to handleError in admin server
Thanks to @Wernerina's LLM for finding this bug
2026-03-25 16:33:24 -06:00
Matthew Holt 8499e34e10 caddytls: Ensure key list always gets set (fix #7555) 2026-03-16 16:21:47 -06:00
Matthew Holt 1fbb28720b Fix lint errors
Use VerifyConnection instead of VerifyPeerCertificate; the other 2 fixes are "meh" not really a big deal or an issue at all.
2026-03-11 13:33:59 -06:00
Matthew Holt ffb6ab0644 Revert cosign (see #7536) 2026-03-05 08:41:54 -07:00
Matthew Holt fbfb8fc517 rewrite: Force recomputing path when escaped path matches rewrite target
Thank you for the report by @MaherAzzouzi, and the suggested fix!
2026-03-04 16:18:33 -07:00
Matt Holt e06dfcf6ed Update SECURITY.md
Simplify what versions are supported, clarify our policy for unreleased code (or beta code), and expand our AI policy to require a disclosure in ALL cases, even if AI is not used. As well as an invitation to share in some chocolate milk with us if you're human.
2026-03-04 16:16:24 -07:00
Matt Holt 174fa2ddb9 caddyhttp: Evaluate tls.client placeholders more accurately (fix #7530) (#7534) 2026-02-28 22:03:18 -07:00
Matt HoltandFrancis Lavoie cd9e1660aa cmd: Pass configFile, not configFlag, for reload command (#7532)
* cmd: Pass configFile, not configFlag, for reload command

This *should* fix #7528.

* Remove debug log line

---------

Co-authored-by: Francis Lavoie <lavofr@gmail.com>
2026-02-27 15:24:05 -07:00
Matthew Holt 06a05e383c Revert "encode: Implement Flush for legacy compatibility"
This reverts commit bdcdaf77ba.
2026-02-27 14:14:19 -07:00
Matthew Holt ce203aa9e1 go.mod: Upgrade x/net 2026-02-27 10:35:24 -07:00
Matthew Holt eac02ee98f caddyhttp: Limit empty Host check to HTTP/1.1 2026-02-27 10:22:39 -07:00
Matthew Holt 03243e42fe go.mod: Upgrade dependencies 2026-02-20 12:28:11 -07:00
Matthew Holt cb436f0a0e fileserver: Fix tests on Windows 2026-02-20 11:46:45 -07:00
Matt HoltandAsim Viladi Oglu Manizada a1081194bf Merge commit from fork
Necessary as otherwise the early-bail in `until =
strings.IndexByte(remaining, nextCh) ... if until == -1` can cause a
case-insensitive mismatch

Co-authored-by: Asim Viladi Oglu Manizada <manizada@users.noreply.github.com>
2026-02-20 10:54:50 -07:00
Matthew Holt a2825c5dd9 fileserver: Replace \ with \\ in file matcher paths 2026-02-19 13:18:14 -07:00
Matthew Holt 6772ffb805 Revert "listeners: Add support for named socket activation (#7243)"
This reverts commit 156ce99d3a.
2026-02-19 11:32:26 -07:00
Matt Holt 95941a71e8 chore: Add nolints to work around haywire linters (#7493)
* chore: Add nolints to work around haywire linters

* More lint wrangling
2026-02-17 16:52:54 -07:00
Matthew Holt bdcdaf77ba encode: Implement Flush for legacy compatibility
(By sponsor request)
2026-02-16 15:59:10 -07:00
Matthew Holt 6718bd470f caddytls: Finish removing prefer_wildcard
Finish what should have been done a year ago in #6959)
2026-02-12 11:35:28 -07:00
Matthew Holt 72ac479f5d admin: Enforce origin implicitly based on request headers 2026-02-11 09:52:56 -07:00
Matt Holt 96f142c2a6 Update SECURITY.md 2026-02-10 11:44:40 -07:00
Matt Holt 5ff50779cc Update LLM disclosure requirements in SECURITY.md
Clarified disclosure requirements for LLMs in security reports.
2026-02-09 14:40:41 -07:00
Matthew Holt 1f43e8566b caddyhttp: Use case-insensitive comparison for large Host lists 2026-02-09 14:18:55 -07:00
Matthew Holt bd374ca9d7 caddyhttp: Lowercase comparison when matching with escape sequence 2026-02-09 13:12:00 -07:00
Matthew Holt 58968b3fd3 Update detail in readme 2026-02-06 08:45:09 -07:00
Matthew Holt 42ca010e9d admin: Reject requests with Sec-Fetch-Mode headers
And buggy Origin: null headers.

Resolves a low-risk security report by @1seal.
2026-02-05 09:39:11 -07:00
Matt Holt 40927d2f75 Require disclosure of LLM usage in security reports
Added requirement to disclose the use of LLMs in security reports.
2026-02-05 06:12:26 -07:00
Matthew Holt e0f8d9b204 caddytls: Check type assertion
Fix https://github.com/mholt/caddy-l4/issues/378
2026-02-03 13:59:53 -07:00
Matthew Holt 3bb22672f9 reverseproxy: Customizable dial network for SRV upstreams
By request of a sponsor
2026-02-02 11:25:51 -07:00
Matthew Holt 935b09de83 caddtls: Skip .ts.net domains for ECH (#6971)
As it is also a special case in our automatic HTTPS.
2026-01-30 12:24:59 -07:00
Matthew Holt 7d24124430 caddyhttp: Reject invalid Host header (fix #7449) 2026-01-30 12:24:16 -07:00
Matthew Holt 28103aafba Revise top of readme to include Warp sponsorship section 2026-01-06 16:44:11 -07:00
Matthew Holt b2d21f650a go.mod: Upgrade CertMagic and ZeroSSL deps 2026-01-05 12:28:52 -07:00
Matt Holt 3c9c67e804 caddytls: ECH key rotation (#7356)
* caddytls: ECH key rotation

* Stop rotation goroutine on config unload

* Publish ECH keys after rotating
2025-12-10 11:50:35 -07:00
Matthew Holt 38848f7f25 caddytls: Allow disabling distributed solving (except http-01) 2025-09-04 08:51:36 -06:00
Matthew Holt e0a8f9541d caddyhttp: Normalize (lowercase) {label.N} placeholders 2025-08-25 13:18:13 -06:00
Matthew Holt b866a9e099 It can't be in the subfolder!? 2025-08-25 13:13:27 -06:00
Matthew Holt 1db26128a6 Uhh I guess it has to be named something specific 2025-08-25 13:11:30 -06:00
Matthew Holt 02c9f0ff90 Tweak issue form 2025-08-25 13:07:17 -06:00
Matthew Holt 63ec1f4e1c Issue template chooser config 2025-08-25 13:05:02 -06:00
Matthew Holt 293de94f34 Fix issue form ... again 2025-08-25 13:02:54 -06:00
Matthew Holt d8d359eca2 Fix syntax of issue form 2025-08-25 12:59:41 -06:00
Matt Holt 11a95cee6d AI assistance disclosure (#7212)
* AI disclosure templates

* Update assistance disclosure

* Add AI moderator

* Set read permissions by default

* Pin to hash
2025-08-25 12:50:26 -06:00
Matthew Holt b7c022a61a Set read permissions as default 2025-08-25 10:18:40 -06:00
Matthew Holt 3723e89585 go.mod: Upgrade CertMagic to v0.24.0 2025-08-22 09:41:47 -06:00
Matthew Holt 42c888ee1d Ignore irrelevant linter warning 2025-08-04 16:28:13 -06:00
Matthew Holt 731e6c2482 caddytls: Improve ECH error logging (close #7152) 2025-08-04 16:22:25 -06:00
Matthew Holt 0badb071ef httpcaddyfile: Fix generated config related to ACME global options
If global DNS provider is configured, it does not need to be repeated in the JSON.

If acme_* options are used, base automation policies should populate their issuers accordingly.

Global issuer settings like acme_* options don't need to specify subjects in the automation policy since they should apply as a global default.
2025-08-04 16:22:25 -06:00
Matthew Holt 4fd2acb5c9 Add test for 5b727bde29 2025-07-30 14:43:20 -06:00
Matthew Holt 3bd413546b go.mod: Upgrade dependencies 2025-07-29 11:59:43 -06:00