1 # include "sendmail.h" 2 # ifdef LOG 3 # include <syslog.h> 4 # endif LOG 5 6 static char SccsId[] = "@(#)err.c 3.9 08/20/81"; 7 8 extern bool HasXscrpt; 9 10 /* 11 ** SYSERR -- Print error message. 12 ** 13 ** Prints an error message via printf to the diagnostic 14 ** output. If LOG is defined, it logs it also. 15 ** 16 ** Parameters: 17 ** f -- the format string 18 ** a, b, c, d, e -- parameters 19 ** 20 ** Returns: 21 ** none 22 ** 23 ** Side Effects: 24 ** increments Errors. 25 ** sets ExitStat. 26 */ 27 28 # ifdef lint 29 int sys_nerr; 30 char *sys_errlist[]; 31 # endif lint 32 33 /*VARARGS1*/ 34 syserr(fmt, a, b, c, d, e) 35 char *fmt; 36 { 37 static char errbuf[MAXLINE+1]; 38 extern char *sys_errlist[]; 39 extern int sys_nerr; 40 register char *eb = errbuf; 41 extern char Arpa_Syserr[]; 42 43 /* add arpanet error number if not present */ 44 if (!isdigit(*fmt)) 45 { 46 (void) strcpy(eb, Arpa_Syserr); 47 eb[3] = ' '; 48 eb += 4; 49 } 50 51 /* put error message into buffer */ 52 (void) sprintf(eb, fmt, a, b, c, d, e); 53 if (errno != 0) 54 { 55 eb += strlen(eb); 56 if (errno < sys_nerr && errno > 0) 57 (void) sprintf(eb, ": %s", sys_errlist[errno]); 58 else 59 (void) sprintf(eb, ": error %d", errno); 60 } 61 62 if (ArpaMode != ARPA_NONE && !HasXscrpt) 63 printf("%s\r\n", errbuf); 64 else 65 printf("sendmail: %s\n", &errbuf[4]); 66 (void) fflush(stdout); 67 Errors++; 68 69 /* determine exit status if not already set */ 70 if (ExitStat == EX_OK) 71 { 72 if (errno == 0) 73 ExitStat = EX_SOFTWARE; 74 else 75 ExitStat = EX_OSERR; 76 } 77 78 # ifdef LOG 79 syslog(LOG_ERR, "%s->%s: %s", From.q_paddr, To, errbuf); 80 # endif LOG 81 errno = 0; 82 } 83 /* 84 ** USRERR -- Signal user error. 85 ** 86 ** This is much like syserr except it is for user errors. 87 ** 88 ** Parameters: 89 ** fmt, a, b, c, d -- printf strings 90 ** 91 ** Returns: 92 ** none 93 ** 94 ** Side Effects: 95 ** increments Errors. 96 */ 97 98 /*VARARGS1*/ 99 usrerr(fmt, a, b, c, d, e) 100 char *fmt; 101 { 102 extern char SuprErrs; 103 extern char Arpa_Usrerr[]; 104 105 if (SuprErrs) 106 return; 107 Errors++; 108 109 message(Arpa_Usrerr, fmt, a, b, c, d, e); 110 } 111 /* 112 ** MESSAGE -- print message (not necessarily an error) 113 ** 114 ** Parameters: 115 ** num -- the default ARPANET error number (in ascii) 116 ** msg -- the message (printf fmt) -- if it begins 117 ** with a digit, this number overrides num. 118 ** a, b, c, d, e -- printf arguments 119 ** 120 ** Returns: 121 ** none 122 ** 123 ** Side Effects: 124 ** none. 125 */ 126 127 /*VARARGS2*/ 128 message(num, msg, a, b, c, d, e) 129 register char *num; 130 register char *msg; 131 { 132 /* compute error number */ 133 if (isdigit(*msg)) 134 { 135 num = msg; 136 msg += 4; 137 } 138 139 /* print arpa format header if needed */ 140 if (ArpaMode != ARPA_NONE && !HasXscrpt) 141 printf("%.3s ", num); 142 143 if (To != NULL && To[0] != '\0') 144 printf("%s... ", To); 145 printf(msg, a, b, c, d, e); 146 if (ArpaMode != ARPA_NONE && !HasXscrpt) 147 printf("\r"); 148 printf("\n"); 149 (void) fflush(stdout); 150 } 151