static uid_t us;
static const char *run_base, *script, *socket_path;
+static const char *run_base_mkdir_p;
static int stderr_copy;
static bool find_run_base_var_run(void) {
if (sizeof(ut.nodename) > 32)
ut.nodename[32] = 0;
- try = m_asprintf("%s/%s/%s", pw->pw_dir, ".cgi-fcgi-interp", ut.nodename);
+ run_base_mkdir_p = m_asprintf("%s/%s", pw->pw_dir, ".cgi-fcgi-interp");
+ try = m_asprintf("%/%s", run_base_mkdir_p, ut.nodename);
run_base = try;
return 1;
}
run_base, ident, maxidentlen);
r = mkdir(run_base, 0700);
+ if (r && errno==ENOENT && run_base_mkdir_p) {
+ r = mkdir(run_base_mkdir_p, 0700);
+ if (r) err(127,"mkdir %s (since %s was ENOENT)",run_base_mkdir_p,run_base);
+ r = mkdir(run_base, 0700);
+ }
if (r) {
if (!(errno == EEXIST))
err(127,"mkdir %s",run_base);