94 lines
2.2 KiB
C
94 lines
2.2 KiB
C
/*
|
|
* Syslog functions.
|
|
* Copyright (C) 2003, 2004 Mondru AB.
|
|
*
|
|
* The contents of this file may be used under the terms of the GNU
|
|
* General Public License Version 2, provided that the above copyright
|
|
* notice and this permission notice is included in all copies or
|
|
* substantial portions of the software.
|
|
*
|
|
*/
|
|
|
|
#include <stdarg.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <stdio.h>
|
|
#include <syslog.h>
|
|
#include <string.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
|
|
#include "syserr.h"
|
|
|
|
static FILE* err_log;
|
|
|
|
void sys_err_setlogfile(FILE* log)
|
|
{
|
|
err_log = log;
|
|
}
|
|
|
|
void sys_err(int pri, char *fn, int ln, int en, char *fmt, ...)
|
|
{
|
|
va_list args;
|
|
char buf[SYSERR_MSGSIZE];
|
|
|
|
va_start(args, fmt);
|
|
vsnprintf(buf, SYSERR_MSGSIZE, fmt, args);
|
|
va_end(args);
|
|
buf[SYSERR_MSGSIZE - 1] = 0; /* Make sure it is null terminated */
|
|
if (en) {
|
|
if (err_log)
|
|
fprintf(err_log, "%s: %d: %d (%s) %s\n",
|
|
fn, ln, en, strerror(en), buf);
|
|
syslog(pri, "%s: %d: %d (%s) %s", fn, ln, en, strerror(en),
|
|
buf);
|
|
} else {
|
|
if (err_log)
|
|
fprintf(err_log, "%s: %d: %s\n", fn, ln, buf);
|
|
syslog(pri, "%s: %d: %s", fn, ln, buf);
|
|
}
|
|
}
|
|
|
|
void sys_errpack(int pri, char *fn, int ln, int en, struct sockaddr_in *peer,
|
|
void *pack, unsigned len, char *fmt, ...)
|
|
{
|
|
|
|
va_list args;
|
|
char buf[SYSERR_MSGSIZE];
|
|
char buf2[SYSERR_MSGSIZE];
|
|
unsigned int n;
|
|
int pos;
|
|
|
|
va_start(args, fmt);
|
|
vsnprintf(buf, SYSERR_MSGSIZE, fmt, args);
|
|
va_end(args);
|
|
buf[SYSERR_MSGSIZE - 1] = 0;
|
|
|
|
snprintf(buf2, SYSERR_MSGSIZE,
|
|
"Packet from %s:%u, length: %d, content:",
|
|
inet_ntoa(peer->sin_addr), ntohs(peer->sin_port), len);
|
|
buf2[SYSERR_MSGSIZE - 1] = 0;
|
|
pos = strlen(buf2);
|
|
for (n = 0; n < len; n++) {
|
|
if ((pos + 4) < SYSERR_MSGSIZE) {
|
|
sprintf((buf2 + pos), " %02hhx",
|
|
((unsigned char *)pack)[n]);
|
|
pos += 3;
|
|
}
|
|
}
|
|
buf2[pos] = 0;
|
|
|
|
if (en) {
|
|
if (err_log)
|
|
fprintf(err_log, "%s: %d: %d (%s) %s. %s\n",
|
|
fn, ln, en, strerror(en), buf, buf2);
|
|
syslog(pri, "%s: %d: %d (%s) %s. %s", fn, ln, en, strerror(en),
|
|
buf, buf2);
|
|
} else {
|
|
if (err_log)
|
|
fprintf(err_log, "%s: %d: %s. %s\n", fn, ln, buf, buf2);
|
|
syslog(pri, "%s: %d: %s. %s", fn, ln, buf, buf2);
|
|
}
|
|
|
|
}
|