From 96bcf591b845168453839950f6a68c97ce6d3d35 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 22 Mar 2016 00:40:36 +0000 Subject: [PATCH] cgi-fcgi-perl: wip, convert to err.h; do mkdir --- cprogs/cgi-fcgi-perl.c | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/cprogs/cgi-fcgi-perl.c b/cprogs/cgi-fcgi-perl.c index 617f8f0..58a858a 100644 --- a/cprogs/cgi-fcgi-perl.c +++ b/cprogs/cgi-fcgi-perl.c @@ -73,6 +73,7 @@ #include #include #include +#include #include @@ -87,8 +88,7 @@ static const char *ident; static int numservers; void diee(const char *m) { - fprintf(stderr,"cgi-fcgi-: error: %s failed: %s\n", m, strerror(errno)); - exit(127); + err(127, "error: %s failed", m); } static void fusagemessage(FILE *f) { @@ -129,16 +129,16 @@ static bool find_run_base_var_run(void) { diee("stat /var/run/user/UID"); } if (!S_ISDIR(stab.st_mode)) { - fprintf(stderr,"%s not a directory, falling back to ~\n", try); + warnx("%s not a directory, falling back to ~\n", try); return 0; } if (stab.st_uid != us) { - fprintf(stderr,"%s not owned by uid %lu, falling back to ~\n", - try, (unsigned long)us); + warnx("%s not owned by uid %lu, falling back to ~\n", try, + (unsigned long)us); return 0; } if (stab.st_mode & 0077) { - fprintf(stderr,"%s writeable by group or other, falling back to ~\n",try); + warnx("%s writeable by group or other, falling back to ~\n", try); return 0; } run_base = m_asprintf("%s/%s", try, "cgi-fcgi-perl"); @@ -166,6 +166,7 @@ static bool find_run_base_home(void) { static void find_socket_path(void) { struct sockaddr_un sun; + int r; us = getuid(); if (us==(uid_t)-1) diee("getuid"); @@ -176,13 +177,11 @@ static void find_socket_path(void) { int maxidentlen = sizeof(sun.sun_path) - strlen(run_base) - 10 - 2; if (!ident) { - if (maxidentlen < MINHEXHASH) { - fprintf(stderr,"cgi-fcgi-perl: base directory `%s'" - " leaves only %d characters for command name hash" - " which is too little (<%d)\n", - run_base, maxidentlen, MINHEXHASH); - exit(127); - } + if (maxidentlen < MINHEXHASH) + errx(127,"cgi-fcgi-perl: base directory `%s'" + " leaves only %d characters for command name hash" + " which is too little (<%d)", + run_base, maxidentlen, MINHEXHASH); int identlen = maxidentlen > 64 ? 64 : maxidentlen; char *hexident = xmalloc(identlen + 2); @@ -201,11 +200,15 @@ static void find_socket_path(void) { ident = hexident; } - if (strlen(ident) > maxidentlen) { - fprintf(stderr,"cgi-fgci-perl: base directory `%s'" - " plus ident `%s' too long (with spare) for socket\n", - run_base, ident); - exit(127); + if (strlen(ident) > maxidentlen) + errx(127, "base directory `%s' plus ident `%s' too long" + " (with spare) for socket (max ident %d)\n", + run_base, ident, maxidentlen); + + r = mkdir(run_base, 0700); + if (r) { + if (!(errno == EEXIST)) + err(127,"mkdir %s",run_base); } socket_path = m_asprintf("%s/g%s",run_base,ident); @@ -215,10 +218,8 @@ int main(int argc, const char *const *argv) { myopt(&argv, cmdinfos); command = *argv++; - if (!command || *argv) { - fprintf(stderr,"wrong number of arguments\n"); - exit(127); - } + if (!command) errx(127,"need command argument"); + if (*argv) errx(127,"too many arguments"); find_socket_path(); -- 2.30.2