1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/* $Id: netsys_c_syslog.c 1691 2012-02-05 18:29:36Z gerd $ */
#include "netsys_c.h"
#ifdef HAVE_SYSLOG
#include <syslog.h>
#endif
/**********************************************************************/
/* Syslog */
/**********************************************************************/
#ifdef HAVE_SYSLOG
static int syslog_lev_flags[] = {
LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE,
LOG_INFO, LOG_DEBUG
};
#ifndef LOG_AUTHPRIV
#define LOG_AUTHPRIV LOG_LOCAL0
#endif
#ifndef LOG_CRON
#define LOG_CRON LOG_LOCAL0
#endif
#ifndef LOG_DAEMON
#define LOG_DAEMON LOG_LOCAL0
#endif
#ifndef LOG_FTP
#define LOG_FTP LOG_LOCAL0
#endif
#ifndef LOG_KERN
#define LOG_KERN LOG_LOCAL0
#endif
#ifndef LOG_LPR
#define LOG_LPR LOG_LOCAL0
#endif
#ifndef LOG_MAIL
#define LOG_MAIL LOG_LOCAL0
#endif
#ifndef LOG_NEWS
#define LOG_NEWS LOG_LOCAL0
#endif
#ifndef LOG_SYSLOG
#define LOG_SYSLOG LOG_LOCAL0
#endif
#ifndef LOG_UUCP
#define LOG_UUCP LOG_LOCAL0
#endif
static int syslog_fac_flags[] = {
LOG_AUTHPRIV, LOG_CRON, LOG_DAEMON, LOG_FTP, LOG_KERN,
LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4,
LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7, LOG_LPR, LOG_MAIL,
LOG_NEWS, LOG_SYSLOG, LOG_USER, LOG_UUCP, 0
};
static int syslog_opt_flags[] = {
LOG_CONS, LOG_NDELAY, LOG_ODELAY, LOG_NOWAIT, LOG_PID
};
static char *ident_buf = NULL;
#define IDENT_BUF_LEN 256
#endif
CAMLprim value netsys_openlog(value ident,
value opts,
value fac)
{
#ifdef HAVE_SYSLOG
char *id;
int options;
int facility;
id=NULL;
if (Is_block(ident)) {
if (ident_buf == NULL) {
ident_buf = stat_alloc(IDENT_BUF_LEN);
};
strncpy(ident_buf,
String_val(Field(ident, 0)),
IDENT_BUF_LEN-1);
ident_buf[IDENT_BUF_LEN-1] = 0;
id=ident_buf;
};
options = convert_flag_list(opts, syslog_opt_flags);
facility = syslog_fac_flags[Int_val(fac)];
openlog(id, options, facility);
return Val_unit;
#else
invalid_argument("Netsys_posix.openlog not available");
#endif
}
CAMLprim value netsys_syslog(value fac, value lev, value msg)
{
#ifdef HAVE_SYSLOG
int facility;
int level;
facility = syslog_fac_flags[Int_val(fac)];
level = syslog_lev_flags[Int_val(lev)];
syslog(facility | level, "%s", String_val(msg));
return Val_unit;
#else
invalid_argument("Netsys_posix.syslog not available");
#endif
}
CAMLprim value netsys_closelog(value dummy)
{
#ifdef HAVE_SYSLOG
closelog();
return Val_unit;
#else
invalid_argument("Netsys_posix.closelog not available");
#endif
}
|