Annotation of 42BSD/usr.bin/uucp/logent.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)logent.c   5.2 (Berkeley) 7/2/83";
                      3: #endif
                      4: 
                      5: #include "uucp.h"
                      6: #include <sys/types.h>
                      7: #include <sys/time.h>
                      8: 
                      9: extern time_t  time();
                     10: 
                     11: /* This logfile stuff was awful -- it did output to an
                     12:  * unbuffered stream.
                     13:  *
                     14:  * This new version just open the single logfile and writes
                     15:  * the record in the stdio buffer.  Once that's done, it
                     16:  * positions itself at the end of the file (lseek), and
                     17:  * writes the buffer out.  This could mangle things but
                     18:  * it isn't likely. -- ittvax!swatt
                     19:  *
                     20:  * If the files could be opened with "guaranteed append to end",
                     21:  * the lseeks could be removed.
                     22:  * Using fseek would be slightly cleaner,
                     23:  * but would mangle things slightly more often.
                     24:  */
                     25: 
                     26: 
                     27: FILE *Lp = NULL;
                     28: FILE *Sp = NULL;
                     29: static Ltried = 0;
                     30: static Stried = 0;
                     31: 
                     32: /*******
                     33:  *     logent(text, status)    make log entry
                     34:  *     char *text, *status;
                     35:  *
                     36:  *     return code - none
                     37:  */
                     38: 
                     39: logent(text, status)
                     40: char *text, *status;
                     41: {
                     42:        /* Open the log file if necessary */
                     43:        if (Lp == NULL) {
                     44:                if (!Ltried) {
                     45:                        int savemask;
                     46:                        savemask = umask(LOGMASK);
                     47:                        Lp = fopen (LOGFILE, "a");
                     48:                        umask(savemask);
                     49:                }
                     50:                Ltried = 1;
                     51:                if (Lp == NULL)
                     52:                        return;
                     53:                fioclex(fileno(Lp));
                     54:        }
                     55: 
                     56:        /*  make entry in existing temp log file  */
                     57:        mlogent(Lp, status, text);
                     58: }
                     59: 
                     60: /***
                     61:  *     mlogent(fp, status, text)  - make a log entry
                     62:  */
                     63: 
                     64: mlogent(fp, status, text)
                     65: char *text, *status;
                     66: register FILE *fp;
                     67: {
                     68:        static pid = 0;
                     69:        register struct tm *tp;
                     70:        extern struct tm *localtime();
                     71:        time_t clock;
                     72: 
                     73:        if (!pid)
                     74:                pid = getpid();
                     75:        time(&clock);
                     76:        tp = localtime(&clock);
                     77:        fprintf(fp, "%s %s ", User, Rmtname);
                     78:        fprintf(fp, "(%d/%d-%d:%02d-%d) ", tp->tm_mon + 1,
                     79:                tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
                     80:        fprintf(fp, "%s (%s)\n", status, text);
                     81: 
                     82:        /* Since it's buffered */
                     83:        lseek (fileno(fp), (long)0, 2);
                     84:        fflush (fp);
                     85:        if (Debug > 0) {
                     86:                fprintf(stderr, "%s %s ", User, Rmtname);
                     87:                fprintf(stderr, "(%d/%d-%d:%02d-%d) ", tp->tm_mon + 1,
                     88:                        tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
                     89:                fprintf(stderr, "%s (%s)\n", status, text);
                     90:        }
                     91: }
                     92: 
                     93: /***
                     94:  *     logcls()        close log file
                     95:  *
                     96:  *     return codes:  none
                     97:  */
                     98: 
                     99: logcls()
                    100: {
                    101:        if (Lp != NULL)
                    102:                fclose(Lp);
                    103:        Lp = NULL;
                    104:        Ltried = 0;
                    105: 
                    106:        if (Sp != NULL)
                    107:                fclose (Sp);
                    108:        Sp = NULL;
                    109:        Stried = 0;
                    110: }
                    111: 
                    112: 
                    113: /***
                    114:  *     syslog(text)    make system log entry
                    115:  *     char *text;
                    116:  *
                    117:  *     return codes - none
                    118:  */
                    119: 
                    120: syslog(text)
                    121: char *text;
                    122: {
                    123:        register struct tm *tp;
                    124:        extern struct tm *localtime();
                    125:        time_t clock;
                    126: 
                    127:        if (Sp == NULL) {
                    128:                if (!Stried) {
                    129:                        int savemask;
                    130:                        savemask = umask(LOGMASK);
                    131:                        Sp = fopen(SYSLOG, "a");
                    132:                        umask(savemask);
                    133:                }
                    134:                Stried = 1;
                    135:                if (Sp == NULL)
                    136:                        return;
                    137:                fioclex(fileno(Sp));
                    138:        }
                    139:                        
                    140:        time(&clock);
                    141:        tp = localtime(&clock);
                    142: 
                    143:        fprintf(Sp, "%s %s ", User, Rmtname);
                    144:        fprintf(Sp, "(%d/%d-%d:%02d) ", tp->tm_mon + 1,
                    145:                tp->tm_mday, tp->tm_hour, tp->tm_min);
                    146:        fprintf(Sp, "(%ld) %s\n", clock, text);
                    147: 
                    148:        /* Position at end and flush */
                    149:        lseek (fileno(Sp), (long)0, 2);
                    150:        fflush (Sp);
                    151: }
                    152: 
                    153: /*
                    154:  * Arrange to close fd on exec(II).
                    155:  * Otherwise unwanted file descriptors are inherited
                    156:  * by other programs.  And that may be a security hole.
                    157:  */
                    158: #ifdef SYSIII
                    159: #include <fcntl.h>
                    160: #endif
                    161: #ifndef        SYSIII
                    162: #include <sgtty.h>
                    163: #endif
                    164: 
                    165: fioclex(fd)
                    166: int fd;
                    167: {
                    168:        register int ret;
                    169: 
                    170: #ifdef SYSIII
                    171:        ret = fcntl(fd, F_SETFD, 1);    /* Steve Bellovin says this does it */
                    172: #endif
                    173: #ifndef        SYSIII
                    174:        ret = ioctl(fd, FIOCLEX, STBNULL);
                    175: #endif
                    176:        if (ret)
                    177:                DEBUG(2, "CAN'T FIOCLEX %d\n", fd);
                    178: }

unix.superglobalmegacorp.com

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