Changeset 14 for trunk/config.c

Show
Ignore:
Timestamp:
01/01/01 18:08:46 (17 years ago)
Author:
george
Message:

Added piped log support.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/config.c

    r10 r14  
    1818#include <sys/param.h> 
    1919#include <unistd.h> 
     20#include <signal.h> 
    2021 
    2122#include "config.h" 
     
    291292 
    292293 
     294int open_pipe_log(char *filename) 
     295{ 
     296        int pid, pfd[2]; 
     297 
     298        if (pipe(pfd) < 0) 
     299                return -1; 
     300        if ((pid = fork()) < 0) 
     301                return -1; 
     302        else if (pid == 0) { 
     303                close(pfd[1]); 
     304                dup2(pfd[0], STDIN_FILENO); 
     305                close(pfd[0]); 
     306                signal(SIGCHLD, SIG_DFL); 
     307                signal(SIGHUP, SIG_IGN); 
     308                filename++; /* skip past leading '|' */ 
     309                execl(SHELL_PATH, SHELL_PATH, "-c", filename, (char *) 0); 
     310        } 
     311        else { 
     312                close(pfd[0]); 
     313                return pfd[1]; 
     314        } 
     315        return -1; 
     316} 
    293317int config_start(void) { 
    294318  struct skiplistnode *sciter, *lfiter; 
     
    306330    do { 
    307331      if(lf->vhostdir) continue; 
    308       else if(lf->logfile->fd<0) 
    309         lf->logfile->fd = open(lf->logfile->filename, 
     332      else if(lf->logfile->fd<0) { 
     333                        if(lf->logfile->filename[0] == '|') { 
     334                                lf->logfile->fd = open_pipe_log(lf->logfile->filename); 
     335                        } 
     336                        else { 
     337                        lf->logfile->fd = open(lf->logfile->filename, 
    310338#ifdef __USE_LARGEFILE64 
    311339                               O_CREAT|O_APPEND|O_WRONLY|O_LARGEFILE, 
     
    314342#endif   
    315343                               00644); 
     344                        } 
     345                }        
    316346      if(!skiplocking) { 
    317347        if(flock(lf->logfile->fd, LOCK_NB|LOCK_EX)==-1) {