From f4432a306ac59feee1fc45c8efefad3619e37629 Mon Sep 17 00:00:00 2001
From: Steffen Busch <37350514+steffenbusch@users.noreply.github.com>
Date: Sat, 8 Mar 2025 21:45:05 +0100
Subject: [PATCH] caddyfile: add error handling for unrecognized
 subdirective/options in various modules (#6884)

---
 caddyconfig/httpcaddyfile/serveroptions.go | 2 ++
 modules/caddyhttp/matchers.go              | 2 ++
 modules/caddytls/internalissuer.go         | 3 +++
 modules/logging/filewriter.go              | 3 +++
 modules/logging/netwriter.go               | 3 +++
 5 files changed, 13 insertions(+)

diff --git a/caddyconfig/httpcaddyfile/serveroptions.go b/caddyconfig/httpcaddyfile/serveroptions.go
index 40a8af209..d60ce51a9 100644
--- a/caddyconfig/httpcaddyfile/serveroptions.go
+++ b/caddyconfig/httpcaddyfile/serveroptions.go
@@ -246,6 +246,8 @@ func unmarshalCaddyfileServerOptions(d *caddyfile.Dispenser) (any, error) {
 				switch d.Val() {
 				case "per_host":
 					serverOpts.Metrics.PerHost = true
+				default:
+					return nil, d.Errf("unrecognized metrics option '%s'", d.Val())
 				}
 			}
 
diff --git a/modules/caddyhttp/matchers.go b/modules/caddyhttp/matchers.go
index e5ca28b95..01bd7b8b4 100644
--- a/modules/caddyhttp/matchers.go
+++ b/modules/caddyhttp/matchers.go
@@ -1342,6 +1342,8 @@ func (m *MatchTLS) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 			case "early_data":
 				var false bool
 				m.HandshakeComplete = &false
+			default:
+				return d.Errf("unrecognized option '%s'", d.Val())
 			}
 		}
 		if d.NextArg() {
diff --git a/modules/caddytls/internalissuer.go b/modules/caddytls/internalissuer.go
index b55757af5..be779757a 100644
--- a/modules/caddytls/internalissuer.go
+++ b/modules/caddytls/internalissuer.go
@@ -178,6 +178,9 @@ func (iss *InternalIssuer) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 				return d.ArgErr()
 			}
 			iss.SignWithRoot = true
+
+		default:
+			return d.Errf("unrecognized subdirective '%s'", d.Val())
 		}
 	}
 	return nil
diff --git a/modules/logging/filewriter.go b/modules/logging/filewriter.go
index ef3211cbb..0999bbfb2 100644
--- a/modules/logging/filewriter.go
+++ b/modules/logging/filewriter.go
@@ -313,6 +313,9 @@ func (fw *FileWriter) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 				return d.Errf("negative roll_keep_for duration: %v", keepFor)
 			}
 			fw.RollKeepDays = int(math.Ceil(keepFor.Hours() / 24))
+
+		default:
+			return d.Errf("unrecognized subdirective '%s'", d.Val())
 		}
 	}
 	return nil
diff --git a/modules/logging/netwriter.go b/modules/logging/netwriter.go
index dc2b0922c..7d8481e3c 100644
--- a/modules/logging/netwriter.go
+++ b/modules/logging/netwriter.go
@@ -145,6 +145,9 @@ func (nw *NetWriter) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 				return d.ArgErr()
 			}
 			nw.SoftStart = true
+
+		default:
+			return d.Errf("unrecognized subdirective '%s'", d.Val())
 		}
 	}
 	return nil