X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Faccesslog.c;h=88b61b3a889067922295b56703c97811f76077a7;hb=fd0303c3260c6397b33912312af67e7a99523926;hp=02e5f1ad1a2e3149553f88ad00c337ebc39129c8;hpb=470938bdc9149ae9c7befd0cd983f46fcc056192;p=ashd.git diff --git a/src/accesslog.c b/src/accesslog.c index 02e5f1a..88b61b3 100644 --- a/src/accesslog.c +++ b/src/accesslog.c @@ -46,8 +46,10 @@ static char *format; static struct timeval now; static volatile int reopen = 0; -static void qputs(char *s, FILE *o) +static void qputs(char *sp, FILE *o) { + unsigned char *s = (unsigned char *)sp; + for(; *s; s++) { if(*s == '\"') { fputs("\\\"", o); @@ -58,7 +60,7 @@ static void qputs(char *s, FILE *o) } else if(*s == '\t') { fputs("\\t", o); } else if((*s < 32) || (*s >= 128)) { - fprintf(o, "\\x%02x", *s); + fprintf(o, "\\x%02x", (int)*s); } else { fputc(*s, o); } @@ -255,6 +257,7 @@ static void reopenlog(void) flog(LOG_WARNING, "accesslog: could not reopen log file `%s' on SIGHUP: %s", outname, strerror(errno)); return; } + fcntl(fileno(new), F_SETFD, FD_CLOEXEC); if(locklog) { if(lockfile(new)) { if((errno == EAGAIN) || (errno == EACCES)) { @@ -326,11 +329,13 @@ int main(int argc, char **argv) outname = argv[optind]; if(outname == NULL) { out = stdout; + locklog = 0; } else { if((out = fopen(argv[optind], "a")) == NULL) { flog(LOG_ERR, "accesslog: could not open %s for logging: %s", argv[optind], strerror(errno)); exit(1); } + fcntl(fileno(out), F_SETFD, FD_CLOEXEC); } if(locklog) { if(lockfile(out)) { @@ -342,7 +347,6 @@ int main(int argc, char **argv) } } } - fcntl(fileno(out), F_SETFD, FD_CLOEXEC); if((ch = stdmkchild(argv + optind + 1, NULL, NULL)) < 0) { flog(LOG_ERR, "accesslog: could not fork child: %s", strerror(errno)); exit(1); @@ -393,6 +397,7 @@ int main(int argc, char **argv) if(pfd[1].revents & POLLHUP) break; } + fclose(out); if(pidfile != NULL) unlink(pidfile); return(0);