summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-04-17 09:07:12 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2008-04-17 09:07:12 +0200
commit87c936ab65b4381fed35689b38c98f130883d903 (patch)
tree460ca0e1481a62ab9a9728a7e56a74eceb8d2767
parentbf3e0d4f224a26e2ac9bc3edfd1e6eedcf56c9f8 (diff)
downloadrsyslog-87c936ab65b4381fed35689b38c98f130883d903.tar.gz
rsyslog-87c936ab65b4381fed35689b38c98f130883d903.tar.xz
rsyslog-87c936ab65b4381fed35689b38c98f130883d903.zip
modularization work
cleanup + created an abstract class for global data items and moved glblGetWorkDir to it
-rw-r--r--dirty.h2
-rw-r--r--doc/features.html6
-rw-r--r--plugins/im3195/Makefile.am8
-rw-r--r--plugins/imfile/imfile.c8
-rw-r--r--runtime/Makefile.am5
-rw-r--r--runtime/cfsysline.c (renamed from cfsysline.c)15
-rw-r--r--runtime/cfsysline.h (renamed from cfsysline.h)15
-rw-r--r--runtime/glbl.h19
-rw-r--r--runtime/obj-types.h19
-rw-r--r--runtime/queue.c16
-rw-r--r--runtime/rsyslog.c26
-rw-r--r--runtime/rsyslog.h4
-rw-r--r--tools/syslogd.c20
13 files changed, 104 insertions, 59 deletions
diff --git a/dirty.h b/dirty.h
index f0664639..9e15b4ab 100644
--- a/dirty.h
+++ b/dirty.h
@@ -42,7 +42,7 @@ extern char **StripDomains;
extern char *LocalDomain;
extern char**LocalHosts;
extern uchar *LocalHostName;
-extern int family;
+//extern int family;
extern int bDropMalPTRMsgs;
extern int option_DisallowWarning;
diff --git a/doc/features.html b/doc/features.html
index 13fc34c6..f9d17818 100644
--- a/doc/features.html
+++ b/doc/features.html
@@ -101,10 +101,8 @@ typically within reach of implementation. Users are encouraged to
submit feature requests there (or via our forums). If we like them but
they look quite long-lived (aka "not soon to be implemented"), they
will possibly be migrated to this list here and at some time moved back
-to the sourceforge tracker.</p>
+to the bugzilla tracker.</p>
<ul>
-<li>implement native email-functionality in selector (probably
-best done as a plug-in)</li>
<li>port it to more *nix variants (eg AIX and HP UX) - this
needs volunteers with access to those machines and knowledge </li>
<li>support for native SSL enryption of plain tcp syslog
@@ -124,4 +122,4 @@ future of RFC 3195 in rsyslog</a>.</li>
<p>To see when each feature was added, see the
<a href="http://www.rsyslog.com/Topic4.phtml">rsyslog
change log</a> (online only).</p>
-</body></html> \ No newline at end of file
+</body></html>
diff --git a/plugins/im3195/Makefile.am b/plugins/im3195/Makefile.am
new file mode 100644
index 00000000..57c8ab8b
--- /dev/null
+++ b/plugins/im3195/Makefile.am
@@ -0,0 +1,8 @@
+pkglib_LTLIBRARIES = im3195.la
+
+im3195_la_SOURCES = im3195.c im3195.h
+im3195_la_CPPFLAGS = $(rsrt_cflags) $(pthreads_cflags) $(LIBLOGGING_CFLAGS)
+im3195_la_LDFLAGS = -module -avoid-version
+im3195_la_LIBADD = $(LIBLOGGING_LIBS)
+
+EXTRA_DIST =
diff --git a/plugins/imfile/imfile.c b/plugins/imfile/imfile.c
index 925d0175..f95f9bc4 100644
--- a/plugins/imfile/imfile.c
+++ b/plugins/imfile/imfile.c
@@ -43,6 +43,7 @@
#include "msg.h"
#include "stream.h"
#include "errmsg.h"
+#include "glbl.h"
#include "datetime.h"
MODULE_TYPE_INPUT /* must be present for input modules, do not remove */
@@ -52,6 +53,7 @@ MODULE_TYPE_INPUT /* must be present for input modules, do not remove */
/* Module static data */
DEF_IMOD_STATIC_DATA /* must be present, starts static data */
DEFobjCurrIf(errmsg)
+DEFobjCurrIf(glbl)
DEFobjCurrIf(datetime)
typedef struct fileInfo_s {
@@ -121,7 +123,7 @@ openFile(fileInfo_t *pThis)
/* Construct file name */
lenSFNam = snprintf((char*)pszSFNam, sizeof(pszSFNam) / sizeof(uchar), "%s/%s",
- (char*) glblGetWorkDir(), (char*)pThis->pszStateFile);
+ (char*) glbl.GetWorkDir(), (char*)pThis->pszStateFile);
/* check if the file exists */
if(stat((char*) pszSFNam, &stat_buf) == -1) {
@@ -334,7 +336,7 @@ persistStrmState(fileInfo_t *pInfo)
/* TODO: create a function persistObj in obj.c? */
CHKiRet(strmConstruct(&psSF));
- CHKiRet(strmSetDir(psSF, glblGetWorkDir(), strlen((char*)glblGetWorkDir())));
+ CHKiRet(strmSetDir(psSF, glbl.GetWorkDir(), strlen((char*)glbl.GetWorkDir())));
CHKiRet(strmSettOperationsMode(psSF, STREAMMODE_WRITE));
CHKiRet(strmSetiAddtlOpenFlags(psSF, O_TRUNC));
CHKiRet(strmSetsType(psSF, STREAMTYPE_FILE_SINGLE));
@@ -381,6 +383,7 @@ BEGINmodExit
CODESTARTmodExit
/* release objects we used */
objRelease(datetime, CORE_COMPONENT);
+ objRelease(glbl, CORE_COMPONENT);
objRelease(errmsg, CORE_COMPONENT);
ENDmodExit
@@ -488,6 +491,7 @@ CODESTARTmodInit
*ipIFVersProvided = CURR_MOD_IF_VERSION; /* we only support the current interface specification */
CODEmodInit_QueryRegCFSLineHdlr
CHKiRet(objUse(errmsg, CORE_COMPONENT));
+ CHKiRet(objUse(glbl, CORE_COMPONENT));
CHKiRet(objUse(datetime, CORE_COMPONENT));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputfilename", 0, eCmdHdlrGetWord,
diff --git a/runtime/Makefile.am b/runtime/Makefile.am
index 6cd54f91..73418fdf 100644
--- a/runtime/Makefile.am
+++ b/runtime/Makefile.am
@@ -12,6 +12,7 @@ librsyslog_la_SOURCES = \
module-template.h \
obj-types.h \
glbl.h \
+ glbl.c \
msg.c \
msg.h \
linkedlist.c \
@@ -59,7 +60,9 @@ librsyslog_la_SOURCES = \
vmop.c \
vmop.h \
queue.c \
- queue.h
+ queue.h \
+ cfsysline.c \
+ cfsysline.h
librsyslog_la_CPPFLAGS = -D_PATH_MODDIR=\"$(pkglibdir)/\" -I$(top_srcdir) $(pthreads_cflags)
#librsyslog_la_LDFLAGS = -module -avoid-version
diff --git a/cfsysline.c b/runtime/cfsysline.c
index 9f2372af..cb86c7d4 100644
--- a/cfsysline.c
+++ b/runtime/cfsysline.c
@@ -3,22 +3,23 @@
*
* File begun on 2007-07-30 by RGerhards
*
- * This file is part of rsyslog.
+ * This file is part of the rsyslog runtime library.
*
- * 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 rsyslog runtime library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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,
+ * The rsyslog runtime library 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.
+ * GNU Lesser 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/>.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the rsyslog runtime library. If not, see <http://www.gnu.org/licenses/>.
*
* A copy of the GPL can be found in the file "COPYING" in this distribution.
+ * A copy of the LGPL can be found in the file "COPYING.LESSER" in this distribution.
*/
#include "config.h"
diff --git a/cfsysline.h b/runtime/cfsysline.h
index 2eec18ab..07ab5fcd 100644
--- a/cfsysline.h
+++ b/runtime/cfsysline.h
@@ -2,22 +2,23 @@
*
* Copyright 2007 Rainer Gerhards and Adiscon GmbH.
*
- * This file is part of rsyslog.
+ * This file is part of the rsyslog runtime library.
*
- * 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 rsyslog runtime library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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,
+ * The rsyslog runtime library 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.
+ * GNU Lesser 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/>.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the rsyslog runtime library. If not, see <http://www.gnu.org/licenses/>.
*
* A copy of the GPL can be found in the file "COPYING" in this distribution.
+ * A copy of the LGPL can be found in the file "COPYING.LESSER" in this distribution.
*/
#ifndef CFSYSLINE_H_INCLUDED
diff --git a/runtime/glbl.h b/runtime/glbl.h
index 037c9ec4..b2a26deb 100644
--- a/runtime/glbl.h
+++ b/runtime/glbl.h
@@ -35,7 +35,22 @@
#define glblGetIOBufSize() 4096 /* size of the IO buffer, e.g. for strm class */
extern uchar *glblModPath; /* module load path */
-extern uchar *pszWorkDir;
-#define glblGetWorkDir() (pszWorkDir == NULL ? (uchar*) "" : pszWorkDir)
+
+/* the glbl object
+ * Note: this must be defined to satisfy the interface. We do not
+ * actually have instance data.*/
+typedef struct glbl_s {
+ BEGINobjInstance; /* Data to implement generic object - MUST be the first data element! */
+} glbl_t;
+
+
+/* interfaces */
+BEGINinterface(glbl) /* name must also be changed in ENDinterface macro! */
+ uchar* (*GetWorkDir)(void);
+ENDinterface(glbl)
+#define glblCURR_IF_VERSION 1 /* increment whenever you change the interface structure! */
+
+/* the remaining prototypes */
+PROTOTYPEObj(glbl);
#endif /* #ifndef GLBL_H_INCLUDED */
diff --git a/runtime/obj-types.h b/runtime/obj-types.h
index 901733c5..32589646 100644
--- a/runtime/obj-types.h
+++ b/runtime/obj-types.h
@@ -64,13 +64,13 @@ typedef enum { /* IDs of base methods supported by all objects - used for jump t
/* the base data type for interfaces
* This MUST be in sync with the ifBEGIN macro
*/
-typedef struct interface_s {
+struct interface_s {
int ifVersion; /* must be set to version requested */
int ifIsLoaded; /* is the interface loaded? (0-no, 1-yes, 2-load failed; if not 1, functions can NOT be called! */
-} interface_t;
+};
-typedef struct objInfo_s {
+struct objInfo_s {
uchar *pszID; /* the object ID as a string */
size_t lenID; /* length of the ID string */
int iObjVers;
@@ -78,7 +78,7 @@ typedef struct objInfo_s {
rsRetVal (*objMethods[OBJ_NUM_METHODS])();
rsRetVal (*QueryIF)(interface_t*);
struct modInfo_s *pModInfo;
-} objInfo_t;
+};
typedef struct obj { /* the dummy struct that each derived class can be casted to */
@@ -313,8 +313,8 @@ rsRetVal objName##ClassExit(void) \
}
/* ------------------------------ object loader system ------------------------------ *
- * The following code is the early beginning of a dynamic object loader system. The
- * root idea is that all objects will become dynamically loadable libraries over time,
+ * The following code builds a dynamic object loader system. The
+ * root idea is that all objects are dynamically loadable,
* which is necessary to get a clean plug-in interface where every plugin can access
* rsyslog's rich object model via simple and quite portable methods.
*
@@ -327,17 +327,12 @@ rsRetVal objName##ClassExit(void) \
* macros create a static variable named like the object in each calling objects
* static data block.
*
- * To facilitate moving to this system, I begin to implement some hooks, which
- * allows to use interfaces today (when the rest of the infrastructure is not yet
- * there). This is in the hope that it will ease migration to the full-fledged system
- * once we are ready to work on that.
- * rgerhards, 2008-02-21
+ * rgerhards, 2008-02-21 (initial implementation), 2008-04-17 (update of this note)
*/
/* this defines the QueryInterface print entry point. Over time, it should be
* present in all objects.
*/
-//#define PROTOTYPEObjQueryInterface(obj) rsRetVal obj##QueryInterface(obj##_if_t *pThis)
#define BEGINobjQueryInterface(obj) \
rsRetVal obj##QueryInterface(obj##_if_t *pIf) \
{ \
diff --git a/runtime/queue.c b/runtime/queue.c
index 11c073a0..c6b617a9 100644
--- a/runtime/queue.c
+++ b/runtime/queue.c
@@ -53,6 +53,7 @@
/* static data */
DEFobjStaticHelpers
+DEFobjCurrIf(glbl)
/* forward-definitions */
rsRetVal queueChkPersist(queue_t *pThis);
@@ -642,7 +643,7 @@ queueLoadPersStrmInfoFixup(strm_t *pStrm, queue_t __attribute__((unused)) *pThis
DEFiRet;
ISOBJ_TYPE_assert(pStrm, strm);
ISOBJ_TYPE_assert(pThis, queue);
- CHKiRet(strmSetDir(pStrm, glblGetWorkDir(), strlen((char*)glblGetWorkDir())));
+ CHKiRet(strmSetDir(pStrm, glbl.GetWorkDir(), strlen((char*)glbl.GetWorkDir())));
finalize_it:
RETiRet;
}
@@ -667,7 +668,7 @@ queueHaveQIF(queue_t *pThis)
/* Construct file name */
lenQIFNam = snprintf((char*)pszQIFNam, sizeof(pszQIFNam) / sizeof(uchar), "%s/%s.qi",
- (char*) glblGetWorkDir(), (char*)pThis->pszFilePrefix);
+ (char*) glbl.GetWorkDir(), (char*)pThis->pszFilePrefix);
/* check if the file exists */
if(stat((char*) pszQIFNam, &stat_buf) == -1) {
@@ -704,7 +705,7 @@ queueTryLoadPersistedInfo(queue_t *pThis)
/* Construct file name */
lenQIFNam = snprintf((char*)pszQIFNam, sizeof(pszQIFNam) / sizeof(uchar), "%s/%s.qi",
- (char*) glblGetWorkDir(), (char*)pThis->pszFilePrefix);
+ (char*) glbl.GetWorkDir(), (char*)pThis->pszFilePrefix);
/* check if the file exists */
if(stat((char*) pszQIFNam, &stat_buf) == -1) {
@@ -791,7 +792,7 @@ static rsRetVal qConstructDisk(queue_t *pThis)
;
} else {
CHKiRet(strmConstruct(&pThis->tVars.disk.pWrite));
- CHKiRet(strmSetDir(pThis->tVars.disk.pWrite, glblGetWorkDir(), strlen((char*)glblGetWorkDir())));
+ CHKiRet(strmSetDir(pThis->tVars.disk.pWrite, glbl.GetWorkDir(), strlen((char*)glbl.GetWorkDir())));
CHKiRet(strmSetiMaxFiles(pThis->tVars.disk.pWrite, 10000000));
CHKiRet(strmSettOperationsMode(pThis->tVars.disk.pWrite, STREAMMODE_WRITE));
CHKiRet(strmSetsType(pThis->tVars.disk.pWrite, STREAMTYPE_FILE_CIRCULAR));
@@ -799,7 +800,7 @@ static rsRetVal qConstructDisk(queue_t *pThis)
CHKiRet(strmConstruct(&pThis->tVars.disk.pRead));
CHKiRet(strmSetbDeleteOnClose(pThis->tVars.disk.pRead, 1));
- CHKiRet(strmSetDir(pThis->tVars.disk.pRead, glblGetWorkDir(), strlen((char*)glblGetWorkDir())));
+ CHKiRet(strmSetDir(pThis->tVars.disk.pRead, glbl.GetWorkDir(), strlen((char*)glbl.GetWorkDir())));
CHKiRet(strmSetiMaxFiles(pThis->tVars.disk.pRead, 10000000));
CHKiRet(strmSettOperationsMode(pThis->tVars.disk.pRead, STREAMMODE_READ));
CHKiRet(strmSetsType(pThis->tVars.disk.pRead, STREAMTYPE_FILE_CIRCULAR));
@@ -1259,7 +1260,7 @@ rsRetVal queueConstruct(queue_t **ppThis, queueType_t qType, int iWorkerThreads,
/* we have an object, so let's fill the properties */
objConstructSetObjInfo(pThis);
- if((pThis->pszSpoolDir = (uchar*) strdup((char*)glblGetWorkDir())) == NULL)
+ if((pThis->pszSpoolDir = (uchar*) strdup((char*)glbl.GetWorkDir())) == NULL)
ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY);
/* set some water marks so that we have useful defaults if none are set specifically */
@@ -1872,7 +1873,7 @@ static rsRetVal queuePersist(queue_t *pThis, int bIsCheckpoint)
/* Construct file name */
lenQIFNam = snprintf((char*)pszQIFNam, sizeof(pszQIFNam) / sizeof(uchar), "%s/%s.qi",
- (char*) glblGetWorkDir(), (char*)pThis->pszFilePrefix);
+ (char*) glbl.GetWorkDir(), (char*)pThis->pszFilePrefix);
if((bIsCheckpoint != QUEUE_CHECKPOINT) && (queueGetOverallQueueSize(pThis) == 0)) {
if(pThis->bNeedDelQIF) {
@@ -2313,6 +2314,7 @@ rsRetVal queueQueryInterface(void) { return RS_RET_NOT_IMPLEMENTED; }
*/
BEGINObjClassInit(queue, 1, OBJ_IS_CORE_MODULE)
/* request objects we use */
+ CHKiRet(objUse(glbl, CORE_COMPONENT));
/* now set our own handlers */
OBJSetMethodHandler(objMethod_SETPROPERTY, queueSetProperty);
diff --git a/runtime/rsyslog.c b/runtime/rsyslog.c
index 6051cc57..b7f0c2c1 100644
--- a/runtime/rsyslog.c
+++ b/runtime/rsyslog.c
@@ -3,7 +3,7 @@
* This module contains all function which work on a RTL global level. It's
* name is abbreviated to "rsrt" (rsyslog runtime).
*
- * Please note that the runtime library is plugin-safe. That is, it must be
+ * Please note that the runtime library tends to be plugin-safe. That is, it must be
* initialized by calling a global initialization function. However, that
* function checks if the library is already initialized and, if so, does
* nothing except incrementing a refeence count. Similarly, the deinit
@@ -11,7 +11,23 @@
* is tracked via the refcount). As such, it is safe to call init and
* exit multiple times, as long as this are always matching calls. This
* capability is needed for a plugin system, where one plugin never
- * knows what the other did.
+ * knows what the other did. HOWEVER, as of this writing, not all runtime
+ * library objects may work cleanly without static global data (the
+ * debug system is a very good example of this). So while we aim at the
+ * ability to work well in a plugin environment, things may not really work
+ * out. If you intend to use the rsyslog runtime library inside plugins,
+ * you should investigate the situation in detail. Please note that the
+ * rsyslog project itself does not yet need this functionality - thus you
+ * can safely assume it is totally untested ;).
+ *
+ * rgerhards, 2008-04-17: I have now once again checked on the plugin-safety.
+ * Unfortunately, there is currently no hook at all with which we could
+ * abstract a global data instance class. As such, we can NOT make the
+ * runtime plugin-safe in the above-described sense. As the rsyslog
+ * project itself does not need this functionality (and it is quesationable
+ * if someone else ever will), we do currently do not make an effort to
+ * support it. So if you intend to use rsyslog runtime inside a non-rsyslog
+ * plugin system, be careful!
*
* The rsyslog runtime library is in general reentrant and thread-safe. There
* are some intentional exceptions (e.g. inside the msg object). These are
@@ -58,6 +74,7 @@
#include "datetime.h"
#include "queue.h"
#include "conf.h"
+#include "glbl.h"
/* static data */
static int iRefCount = 0; /* our refcount - it MUST exist only once inside a process (not thread)
@@ -91,6 +108,8 @@ rsrtInit(char **ppErrObj, obj_if_t *pObjIF)
* class immediately after it is initialized. And, of course, we load those classes
* first that we use ourselfs... -- rgerhards, 2008-03-07
*/
+ if(ppErrObj != NULL) *ppErrObj = "glbl";
+ CHKiRet(glblClassInit(NULL));
if(ppErrObj != NULL) *ppErrObj = "datetime";
CHKiRet(datetimeClassInit(NULL));
if(ppErrObj != NULL) *ppErrObj = "msg";
@@ -143,13 +162,14 @@ finalize_it:
* rgerhards, 2008-04-16
*/
rsRetVal
-rsrtExit(obj_if_t *pObjIF)
+rsrtExit(void)
{
DEFiRet;
if(iRefCount == 1) {
/* do actual de-init only if we are the last runtime user */
confClassExit();
+ glblClassExit();
objClassExit(); /* *THIS* *MUST/SHOULD?* always be the first class initilizer being called (except debug)! */
}
diff --git a/runtime/rsyslog.h b/runtime/rsyslog.h
index 54373673..3841df6c 100644
--- a/runtime/rsyslog.h
+++ b/runtime/rsyslog.h
@@ -63,6 +63,8 @@ typedef struct thrdInfo thrdInfo_t;
typedef struct filed selector_t; /* TODO: this so far resides in syslogd.c, think about modularization */
typedef struct NetAddr netAddr_t;
typedef struct msg msg_t;
+typedef struct interface_s interface_t;
+typedef struct objInfo_s objInfo_t;
/* some universal 64 bit define... */
typedef long long int64;
@@ -287,7 +289,7 @@ void dbgprintf(char *, ...) __attribute__((format(printf, 1, 2)));
/* some runtime prototypes */
rsRetVal rsrtInit(char **ppErrObj, obj_if_t *pObjIF);
-rsRetVal rsrtExit(obj_if_t *pObjIF);
+rsRetVal rsrtExit(void);
int rsrtIsInit(void);
#endif /* multi-include protection */
diff --git a/tools/syslogd.c b/tools/syslogd.c
index 6f252b3a..4fe0071a 100644
--- a/tools/syslogd.c
+++ b/tools/syslogd.c
@@ -160,6 +160,7 @@
/* definitions for objects we access */
DEFobjCurrIf(obj)
+DEFobjCurrIf(glbl)
DEFobjCurrIf(datetime)
DEFobjCurrIf(conf)
DEFobjCurrIf(expr)
@@ -288,14 +289,13 @@ static int bEscapeCCOnRcv = 1; /* escape control characters on reception: 0 - n
int bReduceRepeatMsgs; /* reduce repeated message - 0 - no, 1 - yes */
int bActExecWhenPrevSusp; /* execute action only when previous one was suspended? */
int iActExecOnceInterval = 0; /* execute action once every nn seconds */
-uchar *pszWorkDir = NULL;/* name of rsyslog's spool directory (without trailing slash) */
uchar *glblModPath = NULL; /* module load path - only used during initial init, only settable via -M command line option */
/* end global config file state variables */
uchar *LocalHostName = NULL;/* our hostname - read-only after startup */
char *LocalDomain; /* our local domain name - read-only after startup */
int MarkInterval = 20 * 60; /* interval between marks in seconds - read-only after startup */
-int family = PF_UNSPEC; /* protocol family (IPv4, IPv6 or both), set via cmdline */
+//int family = PF_UNSPEC; /* protocol family (IPv4, IPv6 or both), set via cmdline */
int send_to_all = 0; /* send message to all IPv4/IPv6 addresses */
static int NoFork = 0; /* don't fork - don't run in daemon mode - read-only after startup */
int DisableDNS = 0; /* don't look up IP addresses of remote messages */
@@ -373,10 +373,6 @@ static rsRetVal resetConfigVariables(uchar __attribute__((unused)) *pp, void __a
bEscapeCCOnRcv = 1; /* default is to escape control characters */
bReduceRepeatMsgs = 0;
bDropMalPTRMsgs = 0;
- if(pszWorkDir != NULL) {
- free(pszWorkDir);
- pszWorkDir = NULL;
- }
if(pszMainMsgQFName != NULL) {
free(pszMainMsgQFName);
pszMainMsgQFName = NULL;
@@ -1849,8 +1845,6 @@ static void doDie(int sig)
static void
freeAllDynMemForTermination(void)
{
- if(pszWorkDir != NULL)
- free(pszWorkDir);
if(pszMainMsgQFName != NULL)
free(pszMainMsgQFName);
if(pModDir != NULL)
@@ -2143,7 +2137,7 @@ static void dbgPrintInitInfo(void)
setQPROP(queueSetiMinMsgsPerWrkr, "$MainMsgQueueWorkerThreadMinimumMessages", 100);
setQPROP(queueSetbSaveOnShutdown, "$MainMsgQueueSaveOnShutdown", 1);
*/
- dbgprintf("Work Directory: '%s'.\n", pszWorkDir);
+ dbgprintf("Work Directory: '%s'.\n", glbl.GetWorkDir());
}
@@ -2266,7 +2260,7 @@ init(void)
if(MainMsgQueType == QUEUETYPE_DISK) {
errno = 0; /* for logerror! */
- if(pszWorkDir == NULL) {
+ if(glbl.GetWorkDir() == NULL) {
errmsg.LogError(NO_ERRCODE, "No $WorkDirectory specified - can not run main message queue in 'disk' mode. "
"Using 'FixedArray' instead.\n");
MainMsgQueType = QUEUETYPE_FIXED_ARRAY;
@@ -2618,7 +2612,7 @@ static rsRetVal loadBuildInModules(void)
* is that rsyslog will terminate if we can not register our built-in config commands.
* This, I think, is the right thing to do. -- rgerhards, 2007-07-31
*/
- CHKiRet(regCfSysLineHdlr((uchar *)"workdirectory", 0, eCmdHdlrGetWord, NULL, &pszWorkDir, NULL));
+// CHKiRet(regCfSysLineHdlr((uchar *)"workdirectory", 0, eCmdHdlrGetWord, NULL, &pszWorkDir, NULL));
CHKiRet(regCfSysLineHdlr((uchar *)"actionresumeretrycount", 0, eCmdHdlrInt, NULL, &glbliActionResumeRetryCount, NULL));
CHKiRet(regCfSysLineHdlr((uchar *)"mainmsgqueuefilename", 0, eCmdHdlrGetWord, NULL, &pszMainMsgQFName, NULL));
CHKiRet(regCfSysLineHdlr((uchar *)"mainmsgqueuesize", 0, eCmdHdlrInt, NULL, &iMainMsgQueueSize, NULL));
@@ -2782,6 +2776,8 @@ InitGlobalClasses(void)
CHKiRet(rsrtInit(&pErrObj, &obj));
/* Now tell the system which classes we need ourselfs */
+ pErrObj = "glbl";
+ CHKiRet(objUse(glbl, CORE_COMPONENT));
pErrObj = "errmsg";
CHKiRet(objUse(errmsg, CORE_COMPONENT));
pErrObj = "module";
@@ -2870,7 +2866,7 @@ GlobalClassExit(void)
CHKiRet(objUse(errmsg, CORE_COMPONENT));
CHKiRet(objUse(module, CORE_COMPONENT));
#endif
- rsrtExit(&obj); /* *THIS* *MUST/SHOULD?* always be the first class initilizer being called (except debug)! */
+ rsrtExit(); /* *THIS* *MUST/SHOULD?* always be the first class initilizer being called (except debug)! */
RETiRet;
}