X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=cprogs%2Fcgi-fcgi-interp.c;fp=cprogs%2Fcgi-fcgi-interp.c;h=b9deba7bc9b88d5d773079b4b43b950a07cfdf36;hp=ef48cfda3b80af8b02e6375639943f07558a44cf;hb=bb8d1285da705a02264f4e18708995fb8efabfd7;hpb=fb5f1edbf6752109c16ce276db3953f43f55c076 diff --git a/cprogs/cgi-fcgi-interp.c b/cprogs/cgi-fcgi-interp.c index ef48cfd..b9deba7 100644 --- a/cprogs/cgi-fcgi-interp.c +++ b/cprogs/cgi-fcgi-interp.c @@ -191,6 +191,7 @@ static const struct cmdinfo cmdinfos[]= { 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) { @@ -239,7 +240,8 @@ static bool find_run_base_home(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; } @@ -287,6 +289,11 @@ static void find_socket_path(void) { 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);