summaryrefslogtreecommitdiff
path: root/internal/tmpl
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-08-25 21:23:04 -0500
committerClaude <noreply@anthropic.com>2026-08-25 21:23:04 -0500
commit2a9ca0577ecdbee8b5a4bc8886c112dbc4260eab (patch)
tree8f64cceb0a7831e8be9b7b76bbc9cc9e82e3f11c /internal/tmpl
parent9d934f49d032694e98f799f042e5eca30de6119c (diff)
new-app: configure jail mail relay and persist the jail's network alias
Two provisioning gaps in new-app: - The jail's dma.conf inherited the base image's shared SMARTHOST/ PORT/AUTHPATH, but never got a per-app MAILNAME - without one, dma can misroute mail for recipients on the jail's own apex domain as local delivery. EnableMail appends a MAILNAME of <app>.skiff.local, which can't collide with any real domain an app sends to or from. - A classic jail's ip4.addr is only a bind restriction, not a route, until something aliases it onto a host interface. jail.conf.tmpl never set jail(8)'s own `interface` parameter, so nothing ever created that alias - confirmed on skiff-freebsd, where the address had twice been made to work via an ad hoc `ifconfig alias` that didn't survive a reboot. Setting `interface` lets jail(8) manage the alias itself, including on every boot.
Diffstat (limited to 'internal/tmpl')
-rw-r--r--internal/tmpl/jail.conf.tmpl1
-rw-r--r--internal/tmpl/tmpl.go1
2 files changed, 2 insertions, 0 deletions
diff --git a/internal/tmpl/jail.conf.tmpl b/internal/tmpl/jail.conf.tmpl
index 446c8c8..c82b3a6 100644
--- a/internal/tmpl/jail.conf.tmpl
+++ b/internal/tmpl/jail.conf.tmpl
@@ -1,6 +1,7 @@
{{.Name}} {
path = "{{.JailRoot}}";
host.hostname = "{{.Name}}.skiff.local";
+ interface = "{{.Iface}}";
ip4.addr = "{{.IP}}";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
diff --git a/internal/tmpl/tmpl.go b/internal/tmpl/tmpl.go
index 68e917d..12baa70 100644
--- a/internal/tmpl/tmpl.go
+++ b/internal/tmpl/tmpl.go
@@ -37,6 +37,7 @@ type JailConfData struct {
Name string
JailRoot string
IP string
+ Iface string
}
func JailConf(d JailConfData) (string, error) { return Render(jailConf, d) }