diff options
-rw-r--r-- | squid-cronolog.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/squid-cronolog.c b/squid-cronolog.c index 58bd6a9..c1cfc5d 100644 --- a/squid-cronolog.c +++ b/squid-cronolog.c @@ -5,13 +5,34 @@ #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> +#include <sys/stat.h> #include <errno.h> #include <string.h> -#define CRONOLOG "/usr/sbin/cronolog" - char *pidfile; +char *get_cronolog(void) { + int len = 0; + char *path, *tmp; + struct stat st; + + path = strtok(getenv("PATH"), ":"); + while(path != NULL) { + len = (strlen(path) + strlen("/cronolog") + 1); + tmp = (char *)malloc(len); + snprintf(tmp, len, "%s%s", path, "/cronolog"); + + stat(tmp, &st); + if(st.st_mode & S_IFREG) + return tmp; + else + free(tmp); + + path = strtok(NULL, ":"); + } + return NULL; +} + void die(int sig) { /* kill off children */ kill(0, SIGTERM); @@ -38,6 +59,12 @@ int main(int argc, char *argv[]) { fifo = argv[2]; log = argv[3]; + cronolog = get_cronolog(); + if(cronolog == NULL) { + fprintf(stderr, "cronolog not found in PATH\n"); + exit(1); + } + /* Test for fifo access, leave open for use */ /* O_NONBLOCK allows us to fork into the background */ fd = open(fifo, O_RDONLY|O_NONBLOCK); @@ -84,7 +111,7 @@ int main(int argc, char *argv[]) { /* unset O_NONBLOCK */ fcntl(0, F_SETFL, 0); /* exec cronolog */ - execl(CRONOLOG, CRONOLOG, log, (char *) 0); + execl(cronolog, cronolog, log, (char *) 0); /* filure! give up on life */ exit(1); } else { @@ -102,6 +129,8 @@ int main(int argc, char *argv[]) { /* PARENT 0 exits */ close(fd); + free(cronolog); + return 0; } |