[master] 668bde61a mgt_jail: Streamline VJ_make_workdir
Nils Goroll
nils.goroll at uplex.de
Fri Feb 14 08:53:14 UTC 2025
commit 668bde61ab75e4adf81e8a02c46991fe00d08e6f
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Fri Feb 14 09:37:35 2025 +0100
mgt_jail: Streamline VJ_make_workdir
return error in the vsb always.
diff --git a/bin/varnishd/mgt/mgt.h b/bin/varnishd/mgt/mgt.h
index f868613fc..2610aaf75 100644
--- a/bin/varnishd/mgt/mgt.h
+++ b/bin/varnishd/mgt/mgt.h
@@ -161,7 +161,7 @@ struct jail_tech {
void VJ_Init(const char *);
void VJ_master(enum jail_master_e);
void VJ_subproc(enum jail_subproc_e);
-int VJ_make_workdir(const char *);
+int VJ_make_workdir(const char *, struct vsb *);
int VJ_make_subdir(const char *, const char *, struct vsb *);
void VJ_fix_fd(int, enum jail_fixfd_e);
void VJ_unlink(const char *, int);
diff --git a/bin/varnishd/mgt/mgt_jail.c b/bin/varnishd/mgt/mgt_jail.c
index e9957a6bb..6d7971052 100644
--- a/bin/varnishd/mgt/mgt_jail.c
+++ b/bin/varnishd/mgt/mgt_jail.c
@@ -141,39 +141,42 @@ VJ_subproc(enum jail_subproc_e jse)
}
int
-VJ_make_workdir(const char *dname)
+VJ_make_workdir(const char *dname, struct vsb *vsb)
{
- struct vsb *vsb;
int i;
AN(dname);
+ AN(vsb);
CHECK_OBJ_NOTNULL(vjt, JAIL_TECH_MAGIC);
if (vjt->make_workdir != NULL) {
- vsb = VSB_new_auto();
- AN(vsb);
i = vjt->make_workdir(dname, NULL, vsb);
- MGT_ComplainVSB(i ? C_ERR : C_INFO, vsb);
- VSB_destroy(&vsb);
if (i)
return (i);
VJ_master(JAIL_MASTER_FILE);
} else {
VJ_master(JAIL_MASTER_FILE);
- if (mkdir(dname, 0755) < 0 && errno != EEXIST)
- ARGV_ERR("Cannot create working directory '%s': %s\n",
- dname, VAS_errtxt(errno));
+ if (mkdir(dname, 0755) < 0 && errno != EEXIST) {
+ VSB_printf(vsb,
+ "Cannot create working directory '%s': %s\n",
+ dname, VAS_errtxt(errno));
+ return (1);
+ }
}
- if (chdir(dname) < 0)
- ARGV_ERR("Cannot change to working directory '%s': %s\n",
+ if (chdir(dname) < 0) {
+ VSB_printf(vsb, "Cannot change to working directory '%s': %s\n",
dname, VAS_errtxt(errno));
+ return (1);
+ }
i = open("_.testfile", O_RDWR|O_CREAT|O_EXCL, 0600);
- if (i < 0)
- ARGV_ERR("Cannot create test-file in %s (%s)\n"
+ if (i < 0) {
+ VSB_printf(vsb, "Cannot create test-file in %s (%s)\n"
"Check permissions (or delete old directory)\n",
dname, VAS_errtxt(errno));
+ return (1);
+ }
#ifdef ST_NOEXEC
struct statvfs vfs[1];
@@ -182,8 +185,9 @@ VJ_make_workdir(const char *dname)
if (! fstatvfs(i, vfs) && vfs->f_flag & ST_NOEXEC) {
closefd(&i);
AZ(unlink("_.testfile"));
- ARGV_ERR("Working directory %s (-n argument) "
+ VSB_printf(vsb, "Working directory %s (-n argument) "
"cannot reside on a file system mounted noexec\n", dname);
+ return (1);
}
#endif
diff --git a/bin/varnishd/mgt/mgt_main.c b/bin/varnishd/mgt/mgt_main.c
index 47f51ae96..ed955acdb 100644
--- a/bin/varnishd/mgt/mgt_main.c
+++ b/bin/varnishd/mgt/mgt_main.c
@@ -879,7 +879,11 @@ main(int argc, char * const *argv)
openlog("varnishd", LOG_PID, LOG_LOCAL0);
- if (VJ_make_workdir(workdir))
+ vsb = VSB_new_auto();
+ AN(vsb);
+ o = VJ_make_workdir(workdir, vsb);
+ MGT_ComplainVSB(o ? C_ERR : C_INFO, vsb);
+ if (o)
ARGV_EXIT;
VJ_master(JAIL_MASTER_SYSTEM);
@@ -897,8 +901,6 @@ main(int argc, char * const *argv)
AZ(system("rm -rf vmod_cache vext_cache worker_tmpdir"));
VJ_master(JAIL_MASTER_LOW);
- vsb = VSB_new_auto();
- AN(vsb);
o = VJ_make_subdir("vmod_cache", "VMOD cache", vsb) ||
VJ_make_subdir("worker_tmpdir",
"TMPDIR for the worker process", vsb) ||
More information about the varnish-commit
mailing list