xref: /csrg-svn/usr.bin/uucp/libuu/logent.c (revision 33566)
113661Ssam #ifndef lint
2*33566Srick static char sccsid[] = "@(#)logent.c	5.7 (Berkeley) 02/24/88";
313661Ssam #endif
413661Ssam 
513661Ssam #include "uucp.h"
617835Sralph #ifdef BSD4_2
713706Ssam #include <sys/time.h>
817835Sralph #else
917835Sralph #include <time.h>
1017835Sralph #endif
1117835Sralph #if defined(USG) || defined(BSD4_2)
1217835Sralph #include <fcntl.h>
1317835Sralph #endif
1413661Ssam 
1517835Sralph static FILE *Lp = NULL;
1617835Sralph static FILE *Sp = NULL;
1713661Ssam static Ltried = 0;
1813661Ssam static Stried = 0;
1913661Ssam 
2023611Sbloom /*LINTLIBRARY*/
2123611Sbloom 
2218620Sralph /*
2318620Sralph  *	make log entry
2413661Ssam  */
2513661Ssam logent(text, status)
2613661Ssam char *text, *status;
2713661Ssam {
2818620Sralph #ifdef LOGBYSITE
2918620Sralph 	char lfile[MAXFULLNAME];
3018620Sralph 	static char LogRmtname[64];
3118620Sralph #endif LOGBYSITE
3218620Sralph 	if (Rmtname[0] == '\0')
3318620Sralph 		strcpy(Rmtname, Myname);
3413661Ssam 	/* Open the log file if necessary */
3518620Sralph #ifdef LOGBYSITE
3618620Sralph 	if (strcmp(Rmtname, LogRmtname)) {
3718620Sralph 		if (Lp != NULL)
3818620Sralph 			fclose(Lp);
3918620Sralph 		Lp = NULL;
4018620Sralph 		Ltried = 0;
4118620Sralph 	}
4218620Sralph #endif LOGBYSITE
4313661Ssam 	if (Lp == NULL) {
4413661Ssam 		if (!Ltried) {
4513661Ssam 			int savemask;
4618620Sralph #ifdef F_SETFL
4717835Sralph 			int flags;
4817835Sralph #endif
4913661Ssam 			savemask = umask(LOGMASK);
5018620Sralph #ifdef LOGBYSITE
5118620Sralph 			(void) sprintf(lfile, "%s/%s/%s", LOGBYSITE, Progname, Rmtname);
5218620Sralph 			strcpy(LogRmtname, Rmtname);
5318620Sralph 			Lp = fopen (lfile, "a");
5418620Sralph #else !LOGBYSITE
5513661Ssam 			Lp = fopen (LOGFILE, "a");
5618620Sralph #endif LOGBYSITE
5713661Ssam 			umask(savemask);
5818620Sralph #ifdef F_SETFL
5917835Sralph 			flags = fcntl(fileno(Lp), F_GETFL, 0);
6017835Sralph 			fcntl(fileno(Lp), F_SETFL, flags|O_APPEND);
6117835Sralph #endif
6213661Ssam 		}
6313661Ssam 		Ltried = 1;
6413661Ssam 		if (Lp == NULL)
6513661Ssam 			return;
6613661Ssam 		fioclex(fileno(Lp));
6713661Ssam 	}
6813661Ssam 
6913661Ssam 	/*  make entry in existing temp log file  */
7013661Ssam 	mlogent(Lp, status, text);
7113661Ssam }
72*33566Srick static int pid = 0;
7313661Ssam 
7418620Sralph /*
7518620Sralph  *	make a log entry
7613661Ssam  */
7713661Ssam 
7813661Ssam mlogent(fp, status, text)
7913661Ssam char *text, *status;
8013661Ssam register FILE *fp;
8113661Ssam {
8213661Ssam 	register struct tm *tp;
8313661Ssam 	extern struct tm *localtime();
8413661Ssam 
8517835Sralph 	if (text == NULL)
8617835Sralph 		text = "";
8717835Sralph 	if (status == NULL)
8817835Sralph 		status = "";
89*33566Srick 	if (pid == 0)
9013661Ssam 		pid = getpid();
9117835Sralph #ifdef USG
9225134Sbloom 	time(&Now.time);
9325134Sbloom 	Now.millitm = 0;
9418620Sralph #else !USG
9525134Sbloom 	ftime(&Now);
9618620Sralph #endif !USG
9725134Sbloom 	tp = localtime(&Now.time);
9825134Sbloom #ifdef USG
9925134Sbloom 	fprintf(fp, "%s %s (%d/%d-%2.2d:%2.2d-%d) ",
10025134Sbloom #else !USG
10125134Sbloom 	fprintf(fp, "%s %s (%d/%d-%02d:%02d-%d) ",
10225134Sbloom #endif !USG
10325134Sbloom 		User, Rmtname, tp->tm_mon + 1, tp->tm_mday,
10425134Sbloom 		tp->tm_hour, tp->tm_min, pid);
10513661Ssam 	fprintf(fp, "%s (%s)\n", status, text);
10613661Ssam 
10713661Ssam 	/* Since it's buffered */
10818620Sralph #ifndef F_SETFL
10913661Ssam 	lseek (fileno(fp), (long)0, 2);
11018620Sralph #endif !F_SETFL
11113661Ssam 	fflush (fp);
11217835Sralph 	if (Debug) {
11313661Ssam 		fprintf(stderr, "%s %s ", User, Rmtname);
11417835Sralph #ifdef USG
11517835Sralph 		fprintf(stderr, "(%d/%d-%2.2d:%2.2d-%d) ", tp->tm_mon + 1,
11613661Ssam 			tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
11718620Sralph #else !USG
11817835Sralph 		fprintf(stderr, "(%d/%d-%02d:%02d-%d) ", tp->tm_mon + 1,
11917835Sralph 			tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
12018620Sralph #endif !USG
12113661Ssam 		fprintf(stderr, "%s (%s)\n", status, text);
12213661Ssam 	}
12313661Ssam }
12413661Ssam 
12518620Sralph /*
12618620Sralph  *	close log file
12713661Ssam  */
12813661Ssam logcls()
12913661Ssam {
13013661Ssam 	if (Lp != NULL)
13113661Ssam 		fclose(Lp);
13213661Ssam 	Lp = NULL;
13313661Ssam 	Ltried = 0;
13413661Ssam 
13513661Ssam 	if (Sp != NULL)
13613661Ssam 		fclose (Sp);
13713661Ssam 	Sp = NULL;
13813661Ssam 	Stried = 0;
13913661Ssam }
14013661Ssam 
14113661Ssam 
14218620Sralph /*
14318620Sralph  *	make system log entry
14413661Ssam  */
14513661Ssam syslog(text)
14613661Ssam char *text;
14713661Ssam {
14813661Ssam 	register struct tm *tp;
14913661Ssam 	extern struct tm *localtime();
15018620Sralph #ifdef LOGBYSITE
15118620Sralph 	char lfile[MAXFULLNAME];
15218620Sralph 	static char SLogRmtname[64];
15313661Ssam 
15418620Sralph 	if (strcmp(Rmtname, SLogRmtname)) {
15518620Sralph 		if (Sp != NULL)
15618620Sralph 			fclose(Sp);
15718620Sralph 		Sp = NULL;
15818620Sralph 		Stried = 0;
15918620Sralph 	}
16018620Sralph #endif LOGBYSITE
161*33566Srick 	if (!pid)
162*33566Srick 		pid = getpid();
16313661Ssam 	if (Sp == NULL) {
16413661Ssam 		if (!Stried) {
16513661Ssam 			int savemask;
16618620Sralph #ifdef F_SETFL
16717835Sralph 			int flags;
16818620Sralph #endif F_SETFL
16913661Ssam 			savemask = umask(LOGMASK);
17018620Sralph #ifdef LOGBYSITE
17118620Sralph 			(void) sprintf(lfile, "%s/xferstats/%s", LOGBYSITE, Rmtname);
17218620Sralph 			strcpy(SLogRmtname, Rmtname);
17318620Sralph 			Sp = fopen (lfile, "a");
17418620Sralph #else !LOGBYSITE
17518620Sralph 			Sp = fopen (SYSLOG, "a");
17618620Sralph #endif LOGBYSITE
17713661Ssam 			umask(savemask);
17818620Sralph #ifdef F_SETFL
17917835Sralph 			flags = fcntl(fileno(Sp), F_GETFL, 0);
18017835Sralph 			fcntl(fileno(Sp), F_SETFL, flags|O_APPEND);
18118620Sralph #endif F_SETFL
18218620Sralph 
18313661Ssam 		}
18413661Ssam 		Stried = 1;
18513661Ssam 		if (Sp == NULL)
18613661Ssam 			return;
18713661Ssam 		fioclex(fileno(Sp));
18813661Ssam 	}
18917835Sralph 
19018620Sralph #ifdef USG
19125134Sbloom 	time(&Now.time);
19225134Sbloom 	Now.millitm = 0;
19318620Sralph #else !USG
19425134Sbloom 	ftime(&Now);
19518620Sralph #endif !USG
19625134Sbloom 	tp = localtime(&Now.time);
19713661Ssam 
19813661Ssam 	fprintf(Sp, "%s %s ", User, Rmtname);
19917835Sralph #ifdef USG
200*33566Srick 	fprintf(Sp, "(%d/%d-%2.2d:%2.2d-%d) ", tp->tm_mon + 1,
201*33566Srick 		tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
20225134Sbloom 	fprintf(Sp, "(%ld) %s\n", Now.time, text);
20318620Sralph #else !USG
204*33566Srick 	fprintf(Sp, "(%d/%d-%02d:%02d-%d) ", tp->tm_mon + 1,
205*33566Srick 		tp->tm_mday, tp->tm_hour, tp->tm_min, pid);
20625134Sbloom 	fprintf(Sp, "(%ld.%02u) %s\n", Now.time, Now.millitm/10, text);
20718620Sralph #endif !USG
20813661Ssam 
20913661Ssam 	/* Position at end and flush */
21018620Sralph #ifndef F_SETFL
21113661Ssam 	lseek (fileno(Sp), (long)0, 2);
21218620Sralph #endif F_SETFL
21313661Ssam 	fflush (Sp);
21413661Ssam }
21513661Ssam 
21613661Ssam /*
21713661Ssam  * Arrange to close fd on exec(II).
21813661Ssam  * Otherwise unwanted file descriptors are inherited
21913661Ssam  * by other programs.  And that may be a security hole.
22013661Ssam  */
22117835Sralph #ifndef	USG
22213661Ssam #include <sgtty.h>
22313661Ssam #endif
22413661Ssam 
22513661Ssam fioclex(fd)
22613661Ssam int fd;
22713661Ssam {
22813661Ssam 	register int ret;
22913661Ssam 
23017835Sralph #if defined(USG) || defined(BSD4_2)
23113661Ssam 	ret = fcntl(fd, F_SETFD, 1);	/* Steve Bellovin says this does it */
23217835Sralph #else
23313661Ssam 	ret = ioctl(fd, FIOCLEX, STBNULL);
23413661Ssam #endif
23513661Ssam 	if (ret)
23613661Ssam 		DEBUG(2, "CAN'T FIOCLEX %d\n", fd);
23713661Ssam }
238