diff options
author | Omar Polo <op@omarpolo.com> | 2024-01-09 14:15:58 +0000 |
---|---|---|
committer | Omar Polo <op@omarpolo.com> | 2024-01-09 14:15:58 +0000 |
commit | e371817b3437abf8e34475ff2544cb666769ccae (patch) | |
tree | bd49dacd75da6f48db47dd55624a69d54f5966c0 /server.c | |
parent | ef5057cdec1086930831b44ffdd9cac4606f953d (diff) |
fix configtest with chroot
The configtest checks try to open the root directories too, operation
that can fail when they're expected to be inside a chroot.
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -1412,12 +1412,25 @@ load_vhosts(struct conf *conf) { struct vhost *h; struct location *l; + char path[PATH_MAX], *p; + int r; TAILQ_FOREACH(h, &conf->hosts, vhosts) { TAILQ_FOREACH(l, &h->locations, locations) { if (*l->dir == '\0') continue; - l->dirfd = open(l->dir, O_RDONLY | O_DIRECTORY); + + p = l->dir; + + if (conf->conftest && *conf->chroot != '\0') { + r = snprintf(path, sizeof(path), "%s/%s", + conf->chroot, l->dir); + if (r < 0 || (size_t)r >= sizeof(path)) + fatalx("path too long: %s", l->dir); + p = path; + } + + l->dirfd = open(p, O_RDONLY | O_DIRECTORY); if (l->dirfd == -1) fatal("open %s for domain %s", l->dir, h->domain); |