Annotation of 43BSDTahoe/usr.bin/uucp/logent.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)logent.c   5.9     (Berkeley) 5/4/88";
                      3: #endif
                      4: 
                      5: #include "uucp.h"
                      6: #ifdef BSD4_2
                      7: #include <sys/time.h>
                      8: #else
                      9: #include <time.h>
                     10: #endif
                     11: #if defined(USG) || defined(BSD4_2)
                     12: #include <fcntl.h>
                     13: #endif
                     14: 
                     15: extern int errno;
                     16: extern int sys_nerr;
                     17: extern char *sys_errlist[];
                     18: 
                     19: static FILE *Lp = NULL;
                     20: static FILE *Sp = NULL;
                     21: #ifndef USE_SYSLOG
                     22: static FILE *Ep = NULL;
                     23: #endif /* !USE_SYSLOG */
                     24: static int pid = 0;
                     25: 
                     26: /*LINTLIBRARY*/
                     27: 
                     28: /*
                     29:  *     make log entry
                     30:  */
                     31: FILE *
                     32: get_logfd(pname, logfilename)
                     33: char *pname;
                     34: char *logfilename;
                     35: {
                     36:        FILE *fp;
                     37:        int savemask;
                     38: #ifdef LOGBYSITE
                     39:        char lfile[MAXFULLNAME];
                     40: #endif LOGBYSITE
                     41: 
                     42:        savemask = umask(LOGMASK);
                     43: #ifdef LOGBYSITE
                     44:        if (pname != NULL) {
                     45:                (void) sprintf(lfile, "%s/%s/%s", LOGBYSITE, pname, Rmtname);
                     46:                logfilename = lfile;
                     47:        }
                     48: #endif LOGBYSITE
                     49:        fp = fopen(logfilename, "a");
                     50:        umask(savemask);
                     51:        if (fp) {
                     52: #ifdef         F_SETFL
                     53:                int flags;
                     54:                flags = fcntl(fileno(fp), F_GETFL, 0);
                     55:                fcntl(fileno(Lp), F_SETFL, flags|O_APPEND);
                     56: #endif         /* F_SETFL */
                     57:                fioclex(fileno(fp));
                     58:        } else /* we really want to log this, but it's the logging that failed*/
                     59:                perror(logfilename);
                     60:        return fp;
                     61: }
                     62: 
                     63: /*
                     64:  *     make a log entry
                     65:  */
                     66: mlogent(fp, status, text)
                     67: char *text, *status;
                     68: register FILE *fp;
                     69: {
                     70:        register struct tm *tp;
                     71:        extern struct tm *localtime();
                     72: 
                     73:        if (text == NULL)
                     74:                text = "";
                     75:        if (status == NULL)
                     76:                status = "";
                     77:        if (pid == 0)
                     78:                pid = getpid();
                     79: #ifdef USG
                     80:        time(&Now.time);
                     81:        Now.millitm = 0;
                     82: #else !USG
                     83:        ftime(&Now);
                     84: #endif !USG
                     85:        tp = localtime(&Now.time);
                     86: #ifdef USG
                     87:        fprintf(fp, "%s %s (%d/%d-%2.2d:%2.2d-%d) ",
                     88: #else !USG
                     89:        fprintf(fp, "%s %s (%d/%d-%02d:%02d-%d) ",
                     90: #endif !USG
                     91:                User, Rmtname, tp->tm_mon + 1, tp->tm_mday,
                     92:                tp->tm_hour, tp->tm_min, pid);
                     93:        fprintf(fp, "%s %s\n", status, text);
                     94: 
                     95:        /* Since it's buffered */
                     96: #ifndef F_SETFL
                     97:        lseek (fileno(fp), (long)0, 2);
                     98: #endif !F_SETFL
                     99:        fflush (fp);
                    100:        if (Debug) {
                    101:                fprintf(stderr, "%s %s ", User, Rmtname);
                    102: #ifdef USG
                    103:                fprintf(stderr, "(%d/%d-%2.2d:%2.2d-%d) ", tp->tm_mon + 1,
                    104:                        tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
                    105: #else !USG
                    106:                fprintf(stderr, "(%d/%d-%02d:%02d-%d) ", tp->tm_mon + 1,
                    107:                        tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
                    108: #endif !USG
                    109:                fprintf(stderr, "%s %s\n", status, text);
                    110:        }
                    111: }
                    112: 
                    113: /*
                    114:  *     close log file
                    115:  */
                    116: logcls()
                    117: {
                    118:        if (Lp != NULL)
                    119:                fclose(Lp);
                    120:        Lp = NULL;
                    121: 
                    122:        if (Sp != NULL)
                    123:                fclose (Sp);
                    124:        Sp = NULL;
                    125: #ifndef USE_SYSLOG
                    126:        if (Ep != NULL)
                    127:                fclose (Ep);
                    128:        Ep = NULL;
                    129: #endif /* !USE_SYSLOG */
                    130: }
                    131: 
                    132: /*
                    133:  * Arrange to close fd on exec(II).
                    134:  * Otherwise unwanted file descriptors are inherited
                    135:  * by other programs.  And that may be a security hole.
                    136:  */
                    137: #ifndef        USG
                    138: #include <sgtty.h>
                    139: #endif
                    140: 
                    141: fioclex(fd)
                    142: int fd;
                    143: {
                    144:        register int ret;
                    145: 
                    146: #if defined(USG) || defined(BSD4_2)
                    147:        ret = fcntl(fd, F_SETFD, 1);    /* Steve Bellovin says this does it */
                    148: #else
                    149:        ret = ioctl(fd, FIOCLEX, STBNULL);
                    150: #endif
                    151:        if (ret)
                    152:                DEBUG(2, "CAN'T FIOCLEX %d\n", fd);
                    153: }
                    154: 
                    155: logent(text, status)
                    156: char *text, *status;
                    157: {
                    158:        if (Lp == NULL)
                    159:                Lp = get_logfd(Progname, LOGFILE);
                    160: 
                    161:        mlogent(Lp, status, text);
                    162: }
                    163: 
                    164: /*
                    165:  *     make system log entry
                    166:  */
                    167: log_xferstats(text)
                    168: char *text;
                    169: {
                    170:        char tbuf[BUFSIZ];
                    171:        if (Sp == NULL)
                    172:                Sp = get_logfd("xferstats", SYSLOG);
                    173:        sprintf(tbuf, "(%ld.%02u)", Now.time, Now.millitm/10);
                    174:        mlogent(Sp, tbuf, text);
                    175: }
                    176: 
                    177: #ifndef USE_SYSLOG
                    178: /*
                    179:  * This is for sites that don't have a decent syslog() in their library
                    180:  * This routine would be a lot simpler if syslog() didn't permit %m
                    181:  * (or if printf did!)
                    182:  */
                    183: syslog(priority, format, p0, p1, p2, p3, p4)
                    184: int priority;
                    185: char *format;
                    186: {
                    187:        char nformat[BUFSIZ], sbuf[BUFSIZ];
                    188:        register char *s, *d;
                    189:        register int c;
                    190:        long now;
                    191: 
                    192:        s = format;
                    193:        d = nformat;
                    194:        while ((c = *s++) != '\0' && c != '\n' && d < &nformat[BUFSIZ]) {
                    195:                if (c != '%') {
                    196:                        *d++ = c;
                    197:                        continue;
                    198:                }
                    199:                if ((c = *s++) != 'm') {
                    200:                        *d++ = '%';
                    201:                        *d++ = c;
                    202:                        continue;
                    203:                }
                    204:                if ((unsigned)errno > sys_nerr)
                    205:                        sprintf(d, "error %d", errno);
                    206:                else
                    207:                        strcpy(d, sys_errlist[errno]);
                    208:                d += strlen(d);
                    209:        }
                    210:        *d = '\0';
                    211: 
                    212:        if (Ep == NULL)
                    213:                Ep = get_logfd(NULL, ERRLOG);
                    214:        sprintf(sbuf, nformat, p0, p1, p2, p3, p4);
                    215:        mlogent(Ep, sbuf, "");
                    216: }
                    217: #endif /* !USE_SYSLOG */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.