summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--runtime/Makefile.am2
-rw-r--r--runtime/lmsig_gt.c40
-rw-r--r--runtime/sigprov.h5
-rw-r--r--tools/omfile.c46
4 files changed, 77 insertions, 16 deletions
diff --git a/runtime/Makefile.am b/runtime/Makefile.am
index b6009b98..20824494 100644
--- a/runtime/Makefile.am
+++ b/runtime/Makefile.am
@@ -184,7 +184,7 @@ if ENABLE_GUARDTIME
lmsig_gt_la_SOURCES = lmsig_gt.c
lmsig_gt_la_CPPFLAGS = $(RSRT_CFLAGS) $(GUARDTIME_CFLAGS)
lmsig_gt_la_LDFLAGS = -module -avoid-version
- lmsig_gt_la_LIBADD = librsgt.c $(GUARDTIME_LIBS)
+ lmsig_gt_la_LIBADD = librsgt.la $(GUARDTIME_LIBS)
endif
diff --git a/runtime/lmsig_gt.c b/runtime/lmsig_gt.c
index c390457a..f58d46c3 100644
--- a/runtime/lmsig_gt.c
+++ b/runtime/lmsig_gt.c
@@ -55,14 +55,46 @@ CODESTARTobjDestruct(lmsig_gt)
dbgprintf("DDDD: lmsig_gt: called destruct\n");
ENDobjDestruct(lmsig_gt)
+static rsRetVal
+OnFileOpen(void *pT, uchar *fn)
+{
+ lmsig_gt_t *pThis = (lmsig_gt_t*) pT;
+ DEFiRet;
+dbgprintf("DDDD: onFileOpen: %s\n", fn);
+
+ RETiRet;
+}
+
+static rsRetVal
+OnRecordWrite(void *pT, uchar *rec, rs_size_t lenRec)
+{
+ lmsig_gt_t *pThis = (lmsig_gt_t*) pT;
+ DEFiRet;
+dbgprintf("DDDD: onRecordWrite (%d): %s\n", lenRec, rec);
+
+ RETiRet;
+}
+
+static rsRetVal
+OnFileClose(void *pT)
+{
+ lmsig_gt_t *pThis = (lmsig_gt_t*) pT;
+ DEFiRet;
+dbgprintf("DDDD: onFileClose\n");
+
+ RETiRet;
+}
BEGINobjQueryInterface(lmsig_gt)
CODESTARTobjQueryInterface(lmsig_gt)
if(pIf->ifVersion != sigprovCURR_IF_VERSION) {/* check for current version, increment on each change */
ABORT_FINALIZE(RS_RET_INTERFACE_NOT_SUPPORTED);
}
- pIf->Construct = lmsig_gtConstruct;
- pIf->Destruct = lmsig_gtDestruct;
+ pIf->Construct = (rsRetVal(*)(void*)) lmsig_gtConstruct;
+ pIf->Destruct = (rsRetVal(*)(void*)) lmsig_gtDestruct;
+ pIf->OnFileOpen = OnFileOpen;
+ pIf->OnRecordWrite = OnRecordWrite;
+ pIf->OnFileClose = OnFileClose;
finalize_it:
ENDobjQueryInterface(lmsig_gt)
@@ -72,6 +104,8 @@ CODESTARTObjClassExit(lmsig_gt)
/* release objects we no longer need */
objRelease(errmsg, CORE_COMPONENT);
objRelease(glbl, CORE_COMPONENT);
+
+ rsgtExit();
ENDObjClassExit(lmsig_gt)
@@ -80,7 +114,7 @@ BEGINObjClassInit(lmsig_gt, 1, OBJ_IS_LOADABLE_MODULE) /* class, version */
CHKiRet(objUse(errmsg, CORE_COMPONENT));
CHKiRet(objUse(glbl, CORE_COMPONENT));
- /* set our own handlers */
+ rsgtInit("rsyslogd " VERSION);
ENDObjClassInit(lmsig_gt)
diff --git a/runtime/sigprov.h b/runtime/sigprov.h
index f0eb9350..0154a1f4 100644
--- a/runtime/sigprov.h
+++ b/runtime/sigprov.h
@@ -27,7 +27,10 @@
/* interface */
BEGINinterface(sigprov) /* name must also be changed in ENDinterface macro! */
rsRetVal (*Construct)(void *ppThis);
- rsRetVal (*Destruct)(void **ppThis);
+ rsRetVal (*Destruct)(void *ppThis);
+ rsRetVal (*OnFileOpen)(void *pThis, uchar *fn);
+ rsRetVal (*OnRecordWrite)(void *pThis, uchar *rec, rs_size_t lenRec);
+ rsRetVal (*OnFileClose)(void *pThis);
ENDinterface(sigprov)
#define sigprovCURR_IF_VERSION 1 /* increment whenever you change the interface structure! */
#endif /* #ifndef INCLUDED_SIGPROV_H */
diff --git a/tools/omfile.c b/tools/omfile.c
index 27bbe02e..efdf5e5b 100644
--- a/tools/omfile.c
+++ b/tools/omfile.c
@@ -441,6 +441,7 @@ dynaFileDelCacheEntry(dynaFileCacheEntry **pCache, int iEntry, int bFreeEntry)
if(pCache[iEntry]->pStrm != NULL) {
strm.Destruct(&pCache[iEntry]->pStrm);
+#warning add sig capability here
if(pCache[iEntry]->pStrm != NULL) /* safety check -- TODO: remove if no longer necessary */
abort();
}
@@ -488,6 +489,27 @@ static void dynaFileFreeCache(instanceData *pData)
}
+/* close current file */
+static rsRetVal
+closeFile(instanceData *pData)
+{
+ DEFiRet;
+ if(pData->useSigprov)
+ pData->sigprov.OnFileClose(pData->sigprovData);
+ strm.Destruct(&pData->pStrm);
+ RETiRet;
+}
+
+
+/* This prepares the signature provider to process a file */
+static rsRetVal
+sigprovPrepare(instanceData *pData, uchar *fn)
+{
+ DEFiRet;
+ pData->sigprov.OnFileOpen(pData->sigprovData, fn);
+ RETiRet;
+}
+
/* This is now shared code for all types of files. It simply prepares
* file access, which, among others, means the the file wil be opened
* and any directories in between will be created (based on config, of
@@ -570,11 +592,14 @@ prepareFile(instanceData *pData, uchar *newFileName)
if(pData->pszSizeLimitCmd != NULL)
CHKiRet(strm.SetpszSizeLimitCmd(pData->pStrm, ustrdup(pData->pszSizeLimitCmd)));
CHKiRet(strm.ConstructFinalize(pData->pStrm));
+
+ if(pData->useSigprov)
+ sigprovPrepare(pData, szNameBuf);
finalize_it:
if(iRet != RS_RET_OK) {
if(pData->pStrm != NULL) {
- strm.Destruct(&pData->pStrm);
+ closeFile(pData);
}
}
RETiRet;
@@ -701,7 +726,7 @@ prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsgOpts)
}
if((pCache[iFirstFree]->pName = ustrdup(newFileName)) == NULL) {
- strm.Destruct(&pData->pStrm); /* need to free failed entry! */
+ closeFile(pData); /* need to free failed entry! */
ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY);
}
pCache[iFirstFree]->pStrm = pData->pStrm;
@@ -729,7 +754,7 @@ doWrite(instanceData *pData, uchar *pszBuf, int lenBuf)
DBGPRINTF("write to stream, pData->pStrm %p, lenBuf %d\n", pData->pStrm, lenBuf);
if(pData->pStrm != NULL){
CHKiRet(strm.Write(pData->pStrm, pszBuf, lenBuf));
- FINALIZE;
+ CHKiRet(pData->sigprov.OnRecordWrite(pData->sigprovData, pszBuf, lenBuf));
}
finalize_it:
@@ -843,6 +868,12 @@ ENDcreateInstance
BEGINfreeInstance
CODESTARTfreeInstance
+ free(pData->tplName);
+ free(pData->f_fname);
+ if(pData->bDynamicName) {
+ dynaFileFreeCache(pData);
+ } else if(pData->pStrm != NULL)
+ closeFile(pData);
if(pData->useSigprov) {
dbgprintf("DDDD: destructing signature provider %s\n", pData->sigprovNameFull);
pData->sigprov.Destruct(&pData->sigprovData);
@@ -851,12 +882,6 @@ CODESTARTfreeInstance
free(pData->sigprovName);
free(pData->sigprovNameFull);
}
- free(pData->tplName);
- free(pData->f_fname);
- if(pData->bDynamicName) {
- dynaFileFreeCache(pData);
- } else if(pData->pStrm != NULL)
- strm.Destruct(&pData->pStrm);
ENDfreeInstance
@@ -1231,8 +1256,7 @@ CODESTARTdoHUP
dynaFileFreeCacheEntries(pData);
} else {
if(pData->pStrm != NULL) {
- strm.Destruct(&pData->pStrm);
- pData->pStrm = NULL;
+ closeFile(pData);
}
}
ENDdoHUP