op/patches: op-add-logging-to-filename.diff

File op-add-logging-to-filename.diff, 2.3 KB (added by athomas, 4 years ago)
  • main.c

    diff -u op-1.29/main.c op-1.29-new/main.c
    old new  
    8585int gargc = -1; 
    8686char **gargv = NULL; 
    8787sigset_t sig_mask, old_sig_mask; 
     88FILE *logfile = NULL; 
    8889 
    8990void Usage() 
    9091{ 
     
    772773        char            *new_envp[MAXENV]; 
    773774        char            *new_argv[MAXARG]; 
    774775        char            str[MAXSTRLEN]; 
     776        char            *logfilename; 
    775777        struct stat st; 
     778        struct timeval  tv; 
     779        struct tm       *tmsp; 
     780        struct timezone tz; 
    776781 
    777782#ifdef XAUTH 
    778783        if (getenv("DISPLAY") != NULL && (cp = FindOpt(cmd, "xauth")) != NULL) { 
     
    941946                minimum_logging_level = LOG_NOTICE; 
    942947        } 
    943948 
     949        /* option "log=syslog"    enable logging via syslog()                 */ 
     950        /* option "log=<dirname>" enable logging in filename <dirname>/opxxx  */ 
     951        /*                        where xxx is the day in year number         */ 
     952 
     953        if ((cp = FindOpt(cmd, "log")) != NULL) 
     954        { 
     955                if ((cp = GetField(cp, str, MAXSTRLEN)) != NULL) 
     956        { 
     957                if (strcmp(str, "syslog") != 0) 
     958                { 
     959                        logfilename = malloc(strlen(str) + 11); 
     960                        sprintf(logfilename, str); 
     961 
     962                        gettimeofday(&tv, &tz); 
     963                        tmsp = localtime(&tv.tv_sec); 
     964                        sprintf(logfilename + strlen(str), "/op%d.log", tmsp->tm_yday + 1); 
     965                        if ((logfile = fopen(logfilename, "a")) == NULL) 
     966                                fatal(1, "cannot open logfile '%s', aborting.", logfilename); 
     967                        chmod(logfilename, 0640); 
     968                } 
     969        } 
     970        else 
     971                logger(LOG_ERR, "missing \"log\" directory, syslog assumed."); 
     972        } 
     973 
    944974        if (FindOpt(cmd, "environment") == NULL) { 
    945975                for (i = 0; i < cmd->nopts; i++) { 
    946976                        if (cmd->opts[i][0] != '$') 
     
    11441174int vlogger(unsigned level, const char *format, va_list args) { 
    11451175char buffer[MAXSTRLEN], buffer2[MAXSTRLEN], buffer3[MAXSTRLEN]; 
    11461176char *username = "unknown"; 
     1177struct tm       *t; 
     1178time_t          curtime; 
    11471179 
    11481180        if (level >= minimum_logging_level) return -1; 
    11491181 
     
    11651197                format_cmd(gargc, gargv, buffer3, MAXSTRLEN), 
    11661198                buffer2); 
    11671199#endif 
    1168         syslog(level, "%s", buffer); 
     1200        if (logfile == NULL) 
     1201                syslog(level, "%s", buffer); 
     1202        else 
     1203        { 
     1204                curtime = time(NULL); 
     1205                t = localtime(&curtime); 
     1206                fprintf(logfile, "[%02d/%02d/%04d %02d:%02d:%02d] ", 
     1207                t->tm_mday, t->tm_mon + 1, t->tm_year + 1900, 
     1208                t->tm_hour, t->tm_min, t->tm_sec); 
     1209                fprintf(logfile, "%s\n", buffer); 
     1210                fflush(logfile); 
     1211        } 
     1212 
    11691213        return -1; 
    11701214} 
    11711215 
     
    11931237        va_end(ap); 
    11941238        exit(1); 
    11951239} 
    1196