|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)logent.c 5.6 (Berkeley) 10/9/85";
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: static FILE *Lp = NULL;
16: static FILE *Sp = NULL;
17: static Ltried = 0;
18: static Stried = 0;
19:
20: /*LINTLIBRARY*/
21:
22: /*
23: * make log entry
24: */
25: logent(text, status)
26: char *text, *status;
27: {
28: #ifdef LOGBYSITE
29: char lfile[MAXFULLNAME];
30: static char LogRmtname[64];
31: #endif LOGBYSITE
32: if (Rmtname[0] == '\0')
33: strcpy(Rmtname, Myname);
34: /* Open the log file if necessary */
35: #ifdef LOGBYSITE
36: if (strcmp(Rmtname, LogRmtname)) {
37: if (Lp != NULL)
38: fclose(Lp);
39: Lp = NULL;
40: Ltried = 0;
41: }
42: #endif LOGBYSITE
43: if (Lp == NULL) {
44: if (!Ltried) {
45: int savemask;
46: #ifdef F_SETFL
47: int flags;
48: #endif
49: savemask = umask(LOGMASK);
50: #ifdef LOGBYSITE
51: (void) sprintf(lfile, "%s/%s/%s", LOGBYSITE, Progname, Rmtname);
52: strcpy(LogRmtname, Rmtname);
53: Lp = fopen (lfile, "a");
54: #else !LOGBYSITE
55: Lp = fopen (LOGFILE, "a");
56: #endif LOGBYSITE
57: umask(savemask);
58: #ifdef F_SETFL
59: flags = fcntl(fileno(Lp), F_GETFL, 0);
60: fcntl(fileno(Lp), F_SETFL, flags|O_APPEND);
61: #endif
62: }
63: Ltried = 1;
64: if (Lp == NULL)
65: return;
66: fioclex(fileno(Lp));
67: }
68:
69: /* make entry in existing temp log file */
70: mlogent(Lp, status, text);
71: }
72:
73: /*
74: * make a log entry
75: */
76:
77: mlogent(fp, status, text)
78: char *text, *status;
79: register FILE *fp;
80: {
81: static pid = 0;
82: register struct tm *tp;
83: extern struct tm *localtime();
84:
85: if (text == NULL)
86: text = "";
87: if (status == NULL)
88: status = "";
89: if (!pid)
90: pid = getpid();
91: #ifdef USG
92: time(&Now.time);
93: Now.millitm = 0;
94: #else !USG
95: ftime(&Now);
96: #endif !USG
97: tp = localtime(&Now.time);
98: #ifdef USG
99: fprintf(fp, "%s %s (%d/%d-%2.2d:%2.2d-%d) ",
100: #else !USG
101: fprintf(fp, "%s %s (%d/%d-%02d:%02d-%d) ",
102: #endif !USG
103: User, Rmtname, tp->tm_mon + 1, tp->tm_mday,
104: tp->tm_hour, tp->tm_min, pid);
105: fprintf(fp, "%s (%s)\n", status, text);
106:
107: /* Since it's buffered */
108: #ifndef F_SETFL
109: lseek (fileno(fp), (long)0, 2);
110: #endif !F_SETFL
111: fflush (fp);
112: if (Debug) {
113: fprintf(stderr, "%s %s ", User, Rmtname);
114: #ifdef USG
115: fprintf(stderr, "(%d/%d-%2.2d:%2.2d-%d) ", tp->tm_mon + 1,
116: tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
117: #else !USG
118: fprintf(stderr, "(%d/%d-%02d:%02d-%d) ", tp->tm_mon + 1,
119: tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
120: #endif !USG
121: fprintf(stderr, "%s (%s)\n", status, text);
122: }
123: }
124:
125: /*
126: * close log file
127: */
128: logcls()
129: {
130: if (Lp != NULL)
131: fclose(Lp);
132: Lp = NULL;
133: Ltried = 0;
134:
135: if (Sp != NULL)
136: fclose (Sp);
137: Sp = NULL;
138: Stried = 0;
139: }
140:
141:
142: /*
143: * make system log entry
144: */
145: syslog(text)
146: char *text;
147: {
148: register struct tm *tp;
149: extern struct tm *localtime();
150: #ifdef LOGBYSITE
151: char lfile[MAXFULLNAME];
152: static char SLogRmtname[64];
153:
154: if (strcmp(Rmtname, SLogRmtname)) {
155: if (Sp != NULL)
156: fclose(Sp);
157: Sp = NULL;
158: Stried = 0;
159: }
160: #endif LOGBYSITE
161: if (Sp == NULL) {
162: if (!Stried) {
163: int savemask;
164: #ifdef F_SETFL
165: int flags;
166: #endif F_SETFL
167: savemask = umask(LOGMASK);
168: #ifdef LOGBYSITE
169: (void) sprintf(lfile, "%s/xferstats/%s", LOGBYSITE, Rmtname);
170: strcpy(SLogRmtname, Rmtname);
171: Sp = fopen (lfile, "a");
172: #else !LOGBYSITE
173: Sp = fopen (SYSLOG, "a");
174: #endif LOGBYSITE
175: umask(savemask);
176: #ifdef F_SETFL
177: flags = fcntl(fileno(Sp), F_GETFL, 0);
178: fcntl(fileno(Sp), F_SETFL, flags|O_APPEND);
179: #endif F_SETFL
180:
181: }
182: Stried = 1;
183: if (Sp == NULL)
184: return;
185: fioclex(fileno(Sp));
186: }
187:
188: #ifdef USG
189: time(&Now.time);
190: Now.millitm = 0;
191: #else !USG
192: ftime(&Now);
193: #endif !USG
194: tp = localtime(&Now.time);
195:
196: fprintf(Sp, "%s %s ", User, Rmtname);
197: #ifdef USG
198: fprintf(Sp, "(%d/%d-%2.2d:%2.2d) ", tp->tm_mon + 1,
199: tp->tm_mday, tp->tm_hour, tp->tm_min);
200: fprintf(Sp, "(%ld) %s\n", Now.time, text);
201: #else !USG
202: fprintf(Sp, "(%d/%d-%02d:%02d) ", tp->tm_mon + 1,
203: tp->tm_mday, tp->tm_hour, tp->tm_min);
204: fprintf(Sp, "(%ld.%02u) %s\n", Now.time, Now.millitm/10, text);
205: #endif !USG
206:
207: /* Position at end and flush */
208: #ifndef F_SETFL
209: lseek (fileno(Sp), (long)0, 2);
210: #endif F_SETFL
211: fflush (Sp);
212: }
213:
214: /*
215: * Arrange to close fd on exec(II).
216: * Otherwise unwanted file descriptors are inherited
217: * by other programs. And that may be a security hole.
218: */
219: #ifndef USG
220: #include <sgtty.h>
221: #endif
222:
223: fioclex(fd)
224: int fd;
225: {
226: register int ret;
227:
228: #if defined(USG) || defined(BSD4_2)
229: ret = fcntl(fd, F_SETFD, 1); /* Steve Bellovin says this does it */
230: #else
231: ret = ioctl(fd, FIOCLEX, STBNULL);
232: #endif
233: if (ret)
234: DEBUG(2, "CAN'T FIOCLEX %d\n", fd);
235: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.