Blame ext/posix/syslog.c

Packit 437b5e
/*
Packit 437b5e
 * POSIX library for Lua 5.1, 5.2 & 5.3.
Packit 437b5e
 * (c) Gary V. Vaughan <gary@vaughan.pe>, 2013-2015
Packit 437b5e
 * (c) Reuben Thomas <rrt@sc3d.org> 2010-2013
Packit 437b5e
 * (c) Natanael Copa <natanael.copa@gmail.com> 2008-2010
Packit 437b5e
 * Clean up and bug fixes by Leo Razoumov <slonik.az@gmail.com> 2006-10-11
Packit 437b5e
 * Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br> 07 Apr 2006 23:17:49
Packit 437b5e
 * Based on original by Claudio Terra for Lua 3.x.
Packit 437b5e
 * With contributions by Roberto Ierusalimschy.
Packit 437b5e
 * With documentation from Steve Donovan 2012
Packit 437b5e
 */
Packit 437b5e
/***
Packit 437b5e
 Control System Log.
Packit 437b5e
Packit 437b5e
@module posix.syslog
Packit 437b5e
*/
Packit 437b5e
Packit 437b5e
#include <config.h>
Packit 437b5e
Packit 437b5e
#include "_helpers.c"		/* For LPOSIX_2001_COMPLIANT */
Packit 437b5e
Packit 437b5e
#if LPOSIX_2001_COMPLIANT
Packit 437b5e
#include <syslog.h>
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Open the system logger.
Packit 437b5e
@function openlog
Packit 437b5e
@string ident all messages will start with this
Packit 437b5e
@int[opt] option bitwise OR of zero or more of `LOG_CONS`, `LOG_NDELAY`,
Packit 437b5e
  or `LOG_PID`
Packit 437b5e
@int[opt=`LOG_USER`] facility one of `LOG_AUTH`, `LOG_AUTHPRIV`, `LOG_CRON`,
Packit 437b5e
  `LOG_DAEMON`, `LOG_FTP`, `LOG_KERN`, `LOG_LPR`, `LOG_MAIL`, `LOG_NEWS`,
Packit 437b5e
  `LOG_SECURITY`, `LOG_SYSLOG`, `LOG_USER`, `LOG_UUCP` or `LOG_LOCAL0`
Packit 437b5e
  through `LOG_LOCAL7`
Packit 437b5e
@see syslog(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Popenlog(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	const char *ident = luaL_checkstring(L, 1);
Packit 437b5e
	int option = optint(L, 2, 0);
Packit 437b5e
	int facility = optint(L, 3, LOG_USER);
Packit 437b5e
	checknargs(L, 3);
Packit 437b5e
	openlog(ident, option, facility);
Packit 437b5e
	return 0;
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Write to the system logger.
Packit 437b5e
@function syslog
Packit 437b5e
@int priority one of `LOG_EMERG`, `LOG_ALERT`, `LOG_CRIT`, `LOG_WARNING`,
Packit 437b5e
  `LOG_NOTICE`, `LOG_INFO` or `LOG_DEBUG`
Packit 437b5e
@string message log message
Packit 437b5e
@see syslog(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Psyslog(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	int priority = checkint(L, 1);
Packit 437b5e
	const char *msg = luaL_checkstring(L, 2);
Packit 437b5e
	checknargs(L, 2);
Packit 437b5e
	syslog(priority, "%s", msg);
Packit 437b5e
	return 0;
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Close system log.
Packit 437b5e
@function closelog
Packit 437b5e
@see syslog(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Pcloselog(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	checknargs(L, 0);
Packit 437b5e
	closelog();
Packit 437b5e
	return 0;
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Set log priority mask.
Packit 437b5e
@function setlogmask
Packit 437b5e
@int mask bitwise OR of @{LOG_MASK} bits.
Packit 437b5e
@treturn[1] int previous mask, if successful
Packit 437b5e
@return[2] nil
Packit 437b5e
@treturn[2] string error message
Packit 437b5e
@treturn[2] int errnum
Packit 437b5e
@see setlogmask(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
Psetlogmask(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	checknargs(L, 1);
Packit 437b5e
	return pushresult(L, setlogmask(optint(L, 1, 0)), "setlogmask");
Packit 437b5e
}
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Mask bit for given log priority.
Packit 437b5e
@function LOG_MASK
Packit 437b5e
@int priority one of `LOG_EMERG`, `LOG_ALERT`, `LOG_CRIT`, `LOG_WARNING`,
Packit 437b5e
  `LOG_NOTICE`, `LOG_INFO` or `LOG_DEBUG`
Packit 437b5e
@treturn int mask bit corresponding to *priority*
Packit 437b5e
@see setlogmask(3)
Packit 437b5e
*/
Packit 437b5e
static int
Packit 437b5e
PLOG_MASK(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	checknargs(L, 1);
Packit 437b5e
	return pushintresult(LOG_MASK(checkint(L, 1)));
Packit 437b5e
}
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
Packit 437b5e
static const luaL_Reg posix_syslog_fns[] =
Packit 437b5e
{
Packit 437b5e
#if LPOSIX_2001_COMPLIANT
Packit 437b5e
	LPOSIX_FUNC( PLOG_MASK		),
Packit 437b5e
	LPOSIX_FUNC( Popenlog		),
Packit 437b5e
	LPOSIX_FUNC( Psyslog		),
Packit 437b5e
	LPOSIX_FUNC( Pcloselog		),
Packit 437b5e
	LPOSIX_FUNC( Psetlogmask	),
Packit 437b5e
#endif
Packit 437b5e
	{NULL, NULL}
Packit 437b5e
};
Packit 437b5e
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
Constants.
Packit 437b5e
@section constants
Packit 437b5e
*/
Packit 437b5e
Packit 437b5e
/***
Packit 437b5e
System logging constants.
Packit 437b5e
Any constants not available in the underlying system will be `nil` valued.
Packit 437b5e
@table posix.syslog
Packit 437b5e
@int LOG_AUTH security/authorisation messages
Packit 437b5e
@int LOG_AUTHPRIV private authorisation messages
Packit 437b5e
@int LOG_CONS write directly to system console
Packit 437b5e
@int LOG_CRON clock daemon
Packit 437b5e
@int LOG_DAEMON system daemons
Packit 437b5e
@int LOG_FTP ftp daemon
Packit 437b5e
@int LOG_KERN kernel messages
Packit 437b5e
@int LOG_LOCAL0 reserved for local use
Packit 437b5e
@int LOG_LOCAL1 reserved for local use
Packit 437b5e
@int LOG_LOCAL2 reserved for local use
Packit 437b5e
@int LOG_LOCAL3 reserved for local use
Packit 437b5e
@int LOG_LOCAL4 reserved for local use
Packit 437b5e
@int LOG_LOCAL5 reserved for local use
Packit 437b5e
@int LOG_LOCAL6 reserved for local use
Packit 437b5e
@int LOG_LOCAL7 reserved for local use
Packit 437b5e
@int LOG_LPR line printer subsystem
Packit 437b5e
@int LOG_MAIL mail system
Packit 437b5e
@int LOG_NDELAY open the connection immediately
Packit 437b5e
@int LOG_NEWS network news subsystem
Packit 437b5e
@int LOG_PID include process id with each log message
Packit 437b5e
@int LOG_SYSLOG messages generated internally by syslogd
Packit 437b5e
@int LOG_USER random user-level messages
Packit 437b5e
@int LOG_UUCP unix-to-unix copy subsystem
Packit 437b5e
@int LOG_EMERG system is unusable
Packit 437b5e
@int LOG_ALERT action must be taken immediately
Packit 437b5e
@int LOG_CRIT critical conditions
Packit 437b5e
@int LOG_ERR error conditions
Packit 437b5e
@int LOG_WARNING warning conditions
Packit 437b5e
@int LOG_NOTICE normal but significant conditions
Packit 437b5e
@int LOG_INFO informational
Packit 437b5e
@int LOG_DEBUG debug-level messages
Packit 437b5e
@usage
Packit 437b5e
  -- Print syslog constants supported on this host.
Packit 437b5e
  for name, value in pairs (require "posix.syslog") do
Packit 437b5e
    if type (value) == "number" then
Packit 437b5e
      print (name, value)
Packit 437b5e
     end
Packit 437b5e
  end
Packit 437b5e
*/
Packit 437b5e
Packit 437b5e
LUALIB_API int
Packit 437b5e
luaopen_posix_syslog(lua_State *L)
Packit 437b5e
{
Packit 437b5e
	luaL_register(L, "posix.syslog", posix_syslog_fns);
Packit 437b5e
	lua_pushliteral(L, "posix.syslog for " LUA_VERSION " / " PACKAGE_STRING);
Packit 437b5e
	lua_setfield(L, -2, "version");
Packit 437b5e
Packit 437b5e
#if LPOSIX_2001_COMPLIANT
Packit 437b5e
	LPOSIX_CONST( LOG_CONS		);
Packit 437b5e
	LPOSIX_CONST( LOG_NDELAY	);
Packit 437b5e
	LPOSIX_CONST( LOG_PID		);
Packit 437b5e
Packit 437b5e
	LPOSIX_CONST( LOG_AUTH		);
Packit 437b5e
	LPOSIX_CONST( LOG_AUTHPRIV	);
Packit 437b5e
	LPOSIX_CONST( LOG_CRON		);
Packit 437b5e
	LPOSIX_CONST( LOG_DAEMON	);
Packit 437b5e
	LPOSIX_CONST( LOG_FTP		);
Packit 437b5e
	LPOSIX_CONST( LOG_KERN		);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL0	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL1	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL2	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL3	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL4	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL5	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL6	);
Packit 437b5e
	LPOSIX_CONST( LOG_LOCAL7	);
Packit 437b5e
	LPOSIX_CONST( LOG_LPR		);
Packit 437b5e
	LPOSIX_CONST( LOG_MAIL		);
Packit 437b5e
	LPOSIX_CONST( LOG_NEWS		);
Packit 437b5e
	LPOSIX_CONST( LOG_SYSLOG	);
Packit 437b5e
	LPOSIX_CONST( LOG_USER		);
Packit 437b5e
	LPOSIX_CONST( LOG_UUCP		);
Packit 437b5e
Packit 437b5e
	LPOSIX_CONST( LOG_EMERG		);
Packit 437b5e
	LPOSIX_CONST( LOG_ALERT		);
Packit 437b5e
	LPOSIX_CONST( LOG_CRIT		);
Packit 437b5e
	LPOSIX_CONST( LOG_ERR		);
Packit 437b5e
	LPOSIX_CONST( LOG_WARNING	);
Packit 437b5e
	LPOSIX_CONST( LOG_NOTICE	);
Packit 437b5e
	LPOSIX_CONST( LOG_INFO		);
Packit 437b5e
	LPOSIX_CONST( LOG_DEBUG		);
Packit 437b5e
#endif
Packit 437b5e
Packit 437b5e
	return 1;
Packit 437b5e
}