|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.