summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2007-12-31 12:54:03 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2007-12-31 12:54:03 +0000
commitdd4dedbc38006e09e01ad1ed7f9790a5bc6fce59 (patch)
tree367a3ffef20c89b20a42e9af396564a0d5e7666d
parentf02c825c9518f576a4447152fd024726193a7dec (diff)
downloadrsyslog-dd4dedbc38006e09e01ad1ed7f9790a5bc6fce59.tar.gz
rsyslog-dd4dedbc38006e09e01ad1ed7f9790a5bc6fce59.tar.xz
rsyslog-dd4dedbc38006e09e01ad1ed7f9790a5bc6fce59.zip
created omtesting, a debug and development aid output module. This is stage
work for the new queueing engine - we need a way to delay rule execution and that's what the module currently does ;)
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac12
-rw-r--r--omfwd.c2
-rw-r--r--omusrmsg.c2
-rw-r--r--plugins/omgssapi/omgssapi.c5
-rw-r--r--plugins/omtesting/.cvsignore6
-rw-r--r--plugins/omtesting/Makefile.am6
-rw-r--r--plugins/omtesting/omtesting.c187
8 files changed, 214 insertions, 8 deletions
diff --git a/Makefile.am b/Makefile.am
index a8bda2b7..4f3ee472 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -74,7 +74,7 @@ EXTRA_DIST = \
SUBDIRS = doc
-SUBDIRS += plugins/immark plugins/imuxsock plugins/imtcp plugins/imudp
+SUBDIRS += plugins/immark plugins/imuxsock plugins/imtcp plugins/imudp plugins/omtesting
if ENABLE_IMKLOGD
SUBDIRS += plugins/imklog
diff --git a/configure.ac b/configure.ac
index 7589097d..b11f557d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -350,7 +350,17 @@ AC_SUBST(pgsql_cflags)
AC_SUBST(pgsql_libs)
-AC_CONFIG_FILES([Makefile doc/Makefile plugins/imudp/Makefile plugins/imtcp/Makefile plugins/imuxsock/Makefile plugins/immark/Makefile plugins/imklog/Makefile plugins/omgssapi/Makefile plugins/ommysql/Makefile plugins/ompgsql/Makefile])
+AC_CONFIG_FILES([Makefile \
+ doc/Makefile \
+ plugins/imudp/Makefile \
+ plugins/imtcp/Makefile \
+ plugins/imuxsock/Makefile \
+ plugins/immark/Makefile \
+ plugins/imklog/Makefile \
+ plugins/omtesting/Makefile \
+ plugins/omgssapi/Makefile \
+ plugins/ommysql/Makefile \
+ plugins/ompgsql/Makefile])
AC_OUTPUT
echo "****************************************************"
diff --git a/omfwd.c b/omfwd.c
index 857ce648..a4a546df 100644
--- a/omfwd.c
+++ b/omfwd.c
@@ -417,7 +417,7 @@ CODESTARTdoAction
CHKiRet(UDPSend(pData, psz, l));
} else {
/* forward via TCP */
- int ret;
+ rsRetVal ret;
ret = TCPSend(pData, psz, l, pData->tcp_framing, TCPSendInit, TCPSendFrame, TCPSendPrepRetry);
if(ret != RS_RET_OK) {
/* error! */
diff --git a/omusrmsg.c b/omusrmsg.c
index 96a25c57..76e27f33 100644
--- a/omusrmsg.c
+++ b/omusrmsg.c
@@ -98,7 +98,7 @@ BEGINdbgPrintInstInfo
register int i;
CODESTARTdbgPrintInstInfo
for (i = 0; i < MAXUNAMES && *pData->uname[i]; i++)
- printf("%s, ", pData->uname[i]);
+ dbgprintf("%s, ", pData->uname[i]);
ENDdbgPrintInstInfo
diff --git a/plugins/omgssapi/omgssapi.c b/plugins/omgssapi/omgssapi.c
index 7097d742..7b9c7bb1 100644
--- a/plugins/omgssapi/omgssapi.c
+++ b/plugins/omgssapi/omgssapi.c
@@ -89,9 +89,6 @@ typedef struct _instanceData {
int compressionLevel; /* 0 - no compression, else level for zlib */
char *port;
TCPFRAMINGMODE tcp_framing;
-# define FORW_UDP 0
-# define FORW_TCP 1
- /* following fields for TCP-based delivery */
time_t ttSuspend; /* time selector was suspended */
gss_ctx_id_t gss_context;
OM_uint32 gss_flags;
@@ -623,7 +620,7 @@ ENDparseSelectorAct
BEGINneedUDPSocket
CODESTARTneedUDPSocket
- iRet = RS_RET_TRUE;
+ iRet = RS_RET_FALSE;
ENDneedUDPSocket
diff --git a/plugins/omtesting/.cvsignore b/plugins/omtesting/.cvsignore
new file mode 100644
index 00000000..9730646f
--- /dev/null
+++ b/plugins/omtesting/.cvsignore
@@ -0,0 +1,6 @@
+.deps
+.libs
+Makefile
+Makefile.in
+*.la
+*.lo
diff --git a/plugins/omtesting/Makefile.am b/plugins/omtesting/Makefile.am
new file mode 100644
index 00000000..d7c9663b
--- /dev/null
+++ b/plugins/omtesting/Makefile.am
@@ -0,0 +1,6 @@
+pkglib_LTLIBRARIES = omtesting.la
+
+omtesting_la_SOURCES = omtesting.c omtesting.h ../../module-template.h
+omtesting_la_CPPFLAGS = $(mysql_cflags) -I$(srcdir)/../.. $(pthreads_cflags)
+omtesting_la_LDFLAGS = -module -avoid-version
+omtesting_la_LIBADD = $(mysql_libs)
diff --git a/plugins/omtesting/omtesting.c b/plugins/omtesting/omtesting.c
new file mode 100644
index 00000000..8fec66ac
--- /dev/null
+++ b/plugins/omtesting/omtesting.c
@@ -0,0 +1,187 @@
+/* omtesting.c
+ *
+ * This module is a testing aid. It is not meant to be used in production. I have
+ * initially written it to introduce delays of custom length to action processing.
+ * This is needed for development of new message queueing methods. However, I think
+ * there are other uses for this module. For example, I can envision that it is a good
+ * thing to have an output module that requests a retry on every "n"th invocation
+ * and such things. I implement only what I need. But should further testing needs
+ * arise, it makes much sense to add them here.
+ *
+ * This module will become part of the CVS and the rsyslog project because I think
+ * it is a generally useful debugging, testing and development aid for everyone
+ * involved with rsyslog.
+ *
+ * CURRENT SUPPORTED COMMANDS:
+ *
+ * :omtesting:sleep <seconds> <milliseconds>
+ *
+ * Must be specified exactly as above. Keep in mind milliseconds are a millionth
+ * of a second!
+ *
+ * NOTE: read comments in module-template.h to understand how this file
+ * works!
+ *
+ * Copyright 2007 Rainer Gerhards and Adiscon GmbH.
+ *
+ * This file is part of rsyslog.
+ *
+ * Rsyslog is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Rsyslog is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Rsyslog. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * A copy of the GPL can be found in the file "COPYING" in this distribution.
+ */
+#include "config.h"
+#include "rsyslog.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include "syslogd.h"
+#include "syslogd-types.h"
+#include "module-template.h"
+
+MODULE_TYPE_OUTPUT
+
+/* internal structures
+ */
+DEF_OMOD_STATIC_DATA
+
+typedef struct _instanceData {
+ int iWaitSeconds;
+ int iWaitUSeconds; /* milli-seconds (one million of a second, just to make sure...) */
+} instanceData;
+
+BEGINcreateInstance
+CODESTARTcreateInstance
+ pData->iWaitSeconds = 1;
+ pData->iWaitUSeconds = 0;
+ENDcreateInstance
+
+
+BEGINdbgPrintInstInfo
+CODESTARTdbgPrintInstInfo
+ dbgprintf("Action delays rule by %d second(s) and %d millisecond(s)\n",
+ pData->iWaitSeconds, pData->iWaitUSeconds);
+ /* do nothing */
+ENDdbgPrintInstInfo
+
+
+BEGINisCompatibleWithFeature
+CODESTARTisCompatibleWithFeature
+ /* we are not compatible with repeated msg reduction feature, so do not allow it */
+ENDisCompatibleWithFeature
+
+
+BEGINtryResume
+CODESTARTtryResume
+ENDtryResume
+
+BEGINdoAction
+CODESTARTdoAction
+ struct timeval tvSelectTimeout;
+
+ dbgprintf("sleep(%d, %d)\n", pData->iWaitSeconds, pData->iWaitUSeconds);
+ tvSelectTimeout.tv_sec = pData->iWaitSeconds;
+ tvSelectTimeout.tv_usec = pData->iWaitUSeconds; /* milli seconds */
+ select(0, NULL, NULL, NULL, &tvSelectTimeout);
+ENDdoAction
+
+
+BEGINfreeInstance
+CODESTARTfreeInstance
+ /* we do not have instance data, so we do not need to
+ * do anything here. -- rgerhards, 2007-07-25
+ */
+ENDfreeInstance
+
+
+BEGINparseSelectorAct
+ int i;
+ uchar szBuf[1024];
+CODESTARTparseSelectorAct
+CODE_STD_STRING_REQUESTparseSelectorAct(0)
+ /* code here is quick and dirty - if you like, clean it up. But keep
+ * in mind it is just a testing aid ;) -- rgerhards, 2007-12-31
+ */
+ if(!strncmp((char*) p, ":omtesting:", sizeof(":omtesting:") - 1)) {
+ p += sizeof(":omtesting:") - 1; /* eat indicator sequence (-1 because of '\0'!) */
+ } else {
+ ABORT_FINALIZE(RS_RET_CONFLINE_UNPROCESSED);
+ }
+
+ /* ok, if we reach this point, we have something for us */
+ if((iRet = createInstance(&pData)) != RS_RET_OK)
+ goto finalize_it;
+
+ /* check mode */
+ for(i = 0 ; *p && !isspace((char) *p) && ((unsigned) i < sizeof(szBuf) - 1) ; ++i) {
+ szBuf[i] = (uchar) *p++;
+ }
+ szBuf[i] = '\0';
+ if(isspace(*p))
+ ++p;
+
+ if(!strcmp((char*) szBuf, "sleep")) {
+ /* parse seconds */
+ for(i = 0 ; *p && !isspace(*p) && ((unsigned) i < sizeof(szBuf) - 1) ; ++i) {
+ szBuf[i] = *p++;
+ }
+ szBuf[i] = '\0';
+ if(isspace(*p))
+ ++p;
+ pData->iWaitSeconds = atoi((char*) szBuf);
+ /* parse milliseconds */
+ for(i = 0 ; *p && !isspace(*p) && ((unsigned) i < sizeof(szBuf) - 1) ; ++i) {
+ szBuf[i] = *p++;
+ }
+ szBuf[i] = '\0';
+ if(isspace(*p))
+ ++p;
+ pData->iWaitUSeconds = atoi((char*) szBuf);
+ }
+ /* once there are other modes, here is the spot to add it! */
+ else {
+ dbgprintf("invalid mode '%s', doing 'sleep 1 0' - fix your config\n", szBuf);
+ }
+
+CODE_STD_FINALIZERparseSelectorAct
+ENDparseSelectorAct
+
+
+BEGINneedUDPSocket
+CODESTARTneedUDPSocket
+ENDneedUDPSocket
+
+
+BEGINmodExit
+CODESTARTmodExit
+ENDmodExit
+
+
+BEGINqueryEtryPt
+CODESTARTqueryEtryPt
+CODEqueryEtryPt_STD_OMOD_QUERIES
+ENDqueryEtryPt
+
+
+BEGINmodInit()
+CODESTARTmodInit
+ *ipIFVersProvided = 1; /* so far, we only support the initial definition */
+CODEmodInit_QueryRegCFSLineHdlr
+ENDmodInit
+/*
+ * vi:set ai:
+ */