You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.2 KiB
C
103 lines
2.2 KiB
C
// #include <config.h>
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <syslog.h>
|
|
|
|
#include <lua.h>
|
|
#include <lauxlib.h>
|
|
#include <lualib.h>
|
|
|
|
|
|
static int
|
|
lsyslog_open(lua_State *L)
|
|
{
|
|
static char *persistent_ident = NULL;
|
|
const char *ident = luaL_checkstring(L, 1);
|
|
int facility = luaL_checkinteger(L, 2);
|
|
|
|
if (persistent_ident != NULL) {
|
|
free(persistent_ident);
|
|
}
|
|
|
|
persistent_ident = strdup(ident);
|
|
openlog(persistent_ident, LOG_PID, facility);
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
lsyslog_log(lua_State *L)
|
|
{
|
|
int level = luaL_checkinteger(L, 1);
|
|
const char *line = luaL_checkstring(L, 2);
|
|
|
|
syslog(level, "%s", line);
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
lsyslog_close(lua_State *L)
|
|
{
|
|
closelog();
|
|
return 0;
|
|
}
|
|
|
|
|
|
#define set_field(f,v) lua_pushliteral(L, v); \
|
|
lua_setfield(L, -2, f)
|
|
#define add_constant(c) lua_pushinteger(L, LOG_##c); \
|
|
lua_setfield(L, -2, #c)
|
|
|
|
int
|
|
luaopen_lsyslog(lua_State *L)
|
|
{
|
|
const luaL_Reg API[] = {
|
|
{ "open", lsyslog_open },
|
|
{ "close", lsyslog_close },
|
|
{ "log", lsyslog_log },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
luaL_newlib(L, API);
|
|
|
|
// set_field("_COPYRIGHT", "Copyright (C) 2014 " PACKAGE_AUTHOR);
|
|
// set_field("_DESCRIPTION", PACKAGE_DESCRIPTION);
|
|
// set_field("_VERSION", PACKAGE_VERSION);
|
|
|
|
lua_newtable(L);
|
|
add_constant(AUTH);
|
|
add_constant(AUTHPRIV);
|
|
add_constant(CRON);
|
|
add_constant(DAEMON);
|
|
add_constant(FTP);
|
|
add_constant(KERN);
|
|
add_constant(LOCAL0);
|
|
add_constant(LOCAL1);
|
|
add_constant(LOCAL2);
|
|
add_constant(LOCAL3);
|
|
add_constant(LOCAL4);
|
|
add_constant(LOCAL5);
|
|
add_constant(LOCAL6);
|
|
add_constant(LOCAL7);
|
|
add_constant(LPR);
|
|
add_constant(MAIL);
|
|
add_constant(NEWS);
|
|
add_constant(SYSLOG);
|
|
add_constant(USER);
|
|
add_constant(UUCP);
|
|
lua_setfield(L, -2, "FACILITY");
|
|
|
|
lua_newtable(L);
|
|
add_constant(EMERG);
|
|
add_constant(ALERT);
|
|
add_constant(CRIT);
|
|
add_constant(ERR);
|
|
add_constant(WARNING);
|
|
add_constant(NOTICE);
|
|
add_constant(INFO);
|
|
add_constant(DEBUG);
|
|
lua_setfield(L, -2, "LEVEL");
|
|
|
|
return 1;
|
|
}
|