144743Smarkm /* 244743Smarkm * Routines to report various classes of problems. Each report is decorated 344743Smarkm * with the current context (file name and line number), if available. 444743Smarkm * 544743Smarkm * tcpd_warn() reports a problem and proceeds. 644743Smarkm * 744743Smarkm * tcpd_jump() reports a problem and jumps. 844743Smarkm * 944743Smarkm * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. 1044743Smarkm */ 1144743Smarkm 1244743Smarkm#ifndef lint 1344743Smarkmstatic char sccsid[] = "@(#) diag.c 1.1 94/12/28 17:42:20"; 1444743Smarkm#endif 1544743Smarkm 1644743Smarkm/* System libraries */ 1744743Smarkm 1844743Smarkm#include <syslog.h> 1944743Smarkm#include <stdio.h> 2044743Smarkm#include <setjmp.h> 2144743Smarkm 2244743Smarkm/* Local stuff */ 2344743Smarkm 2444743Smarkm#include "tcpd.h" 2544743Smarkm#include "mystdarg.h" 2644743Smarkm 2744743Smarkmstruct tcpd_context tcpd_context; 2844743Smarkmjmp_buf tcpd_buf; 2944743Smarkm 3044743Smarkm/* tcpd_diag - centralize error reporter */ 3144743Smarkm 3244743Smarkmstatic void tcpd_diag(severity, tag, format, ap) 3344743Smarkmint severity; 3444743Smarkmchar *tag; 3544743Smarkmchar *format; 3644743Smarkmva_list ap; 3744743Smarkm{ 3844743Smarkm char fmt[BUFSIZ]; 3944743Smarkm 4044743Smarkm if (tcpd_context.file) 4144743Smarkm sprintf(fmt, "%s: %s, line %d: %s", 4244743Smarkm tag, tcpd_context.file, tcpd_context.line, format); 4344743Smarkm else 4444743Smarkm sprintf(fmt, "%s: %s", tag, format); 4544743Smarkm vsyslog(severity, fmt, ap); 4644743Smarkm} 4744743Smarkm 4844743Smarkm/* tcpd_warn - report problem of some sort and proceed */ 4944743Smarkm 5044743Smarkmvoid VARARGS(tcpd_warn, char *, format) 5144743Smarkm{ 5244743Smarkm va_list ap; 5344743Smarkm 5444743Smarkm VASTART(ap, char *, format); 5544743Smarkm tcpd_diag(LOG_ERR, "warning", format, ap); 5644743Smarkm VAEND(ap); 5744743Smarkm} 5844743Smarkm 5944743Smarkm/* tcpd_jump - report serious problem and jump */ 6044743Smarkm 6144743Smarkmvoid VARARGS(tcpd_jump, char *, format) 6244743Smarkm{ 6344743Smarkm va_list ap; 6444743Smarkm 6544743Smarkm VASTART(ap, char *, format); 6644743Smarkm tcpd_diag(LOG_ERR, "error", format, ap); 6744743Smarkm VAEND(ap); 6844743Smarkm longjmp(tcpd_buf, AC_ERROR); 6944743Smarkm} 70