|
|
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.