python: Added a global wsgidir module attribute to indicate currentness.
[ashd.git] / src / accesslog.c
index 5b0c708..88b61b3 100644 (file)
@@ -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)) {
@@ -273,6 +276,7 @@ static void reopenlog(void)
 static void usage(FILE *out)
 {
     fprintf(out, "usage: accesslog [-hFaL] [-f FORMAT] [-p PIDFILE] OUTFILE CHILD [ARGS...]\n");
+    fprintf(out, "       accesslog -P LOGFILE\n");
 }
 
 int main(int argc, char **argv)
@@ -325,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)) {
@@ -391,6 +397,7 @@ int main(int argc, char **argv)
        if(pfd[1].revents & POLLHUP)
            break;
     }
+    fclose(out);
     if(pidfile != NULL)
        unlink(pidfile);
     return(0);