blob: 2cd05bb1348da7d66f25ccf4ca848bc62d752a35 [file] [log] [blame]
/*
* logtosyslog.c -- plugin for log module of websh3
* nca-073-9
*
* Copyright (c) 1996-2000 by Netcetera AG.
* Copyright (c) 2001 by Apache Software Foundation.
* All rights reserved.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* @(#) $Id$
*
*/
#include <tcl.h>
#include <stdio.h>
#include <string.h>
#include <syslog.h>
#include "macros.h"
#include "logtosyslog.h"
#include "webutl.h" /* args */
/* ----------------------------------------------------------------------------
* createLogToSyslogData --
* ------------------------------------------------------------------------- */
LogToSyslogData *createLogToSyslogData()
{
LogToSyslogData *logToSyslogData;
logToSyslogData = WebAllocInternalData(LogToSyslogData);
return logToSyslogData;
}
/* ----------------------------------------------------------------------------
* destroyLogToSyslogData --
* ------------------------------------------------------------------------- */
int destroyLogToSyslogData(Tcl_Interp * interp,
LogToSyslogData * logToSyslogData)
{
WebFreeIfNotNull(logToSyslogData);
return TCL_OK;
}
/* ----------------------------------------------------------------------------
* constructor
* ------------------------------------------------------------------------- */
ClientData createLogToSyslog(Tcl_Interp * interp, ClientData clientData,
int objc, Tcl_Obj * CONST objv[])
{
LogToSyslogData *logToSyslogData = NULL;
int priority = -1;
/* --------------------------------------------------------------------------
* syntax is: [web::logbag add] syslog priority
* 0 1
* ----------------------------------------------------------------------- */
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, WEB_LOGTOSYSLOG_USAGE);
return NULL;
}
if (strcmp(Tcl_GetString(objv[0]), "syslog") != 0) {
Tcl_SetResult(interp, WEB_LOGTOSYSLOG_USAGE, NULL);
return NULL;
}
/* --------------------------------------------------------------------------
* try to get priority
* ----------------------------------------------------------------------- */
if (Tcl_GetIntFromObj(interp, objv[1], &priority) == TCL_ERROR) {
Tcl_SetResult(interp, WEB_LOGTOSYSLOG_USAGE, NULL);
return NULL;
}
/* --------------------------------------------------------------------------
* create data
* ----------------------------------------------------------------------- */
logToSyslogData = createLogToSyslogData();
if (logToSyslogData == NULL) {
Tcl_SetResult(interp, "cannot alloc memory for internal data.", NULL);
return NULL;
}
*logToSyslogData = priority;
return logToSyslogData;
}
/* ----------------------------------------------------------------------------
* destructor
* ------------------------------------------------------------------------- */
int destroyLogToSyslog(Tcl_Interp * interp, ClientData clientData)
{
return destroyLogToSyslogData(interp, (LogToSyslogData *) clientData);
}
/* ----------------------------------------------------------------------------
* logToSyslog
* ------------------------------------------------------------------------- */
int logToSyslog(Tcl_Interp * interp, ClientData clientData, char *msg)
{
LogToSyslogData *logToSyslogData;
if ((interp == NULL) || (clientData == NULL) || (msg == NULL))
return TCL_ERROR;
logToSyslogData = (LogToSyslogData *) clientData;
/* ----------------------------------------------------------------------
* gonna call syslogName msg
* ------------------------------------------------------------------- */
syslog((int) (*logToSyslogData), "%s", msg);
return TCL_OK;
}