diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-03-05 12:52:28 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-03-05 12:52:28 +0100 |
commit | 8f32f09d7e688091f432e0c0e156d3a9eec78a4b (patch) | |
tree | 4ac0e193728730cb8302960d647984c71faf3b00 | |
parent | 3a68c5cda88336af1fde3755180f4e293735da5d (diff) | |
download | rsyslog-8f32f09d7e688091f432e0c0e156d3a9eec78a4b.tar.gz rsyslog-8f32f09d7e688091f432e0c0e156d3a9eec78a4b.tar.bz2 rsyslog-8f32f09d7e688091f432e0c0e156d3a9eec78a4b.zip |
logsig: more interface plumbing
-rw-r--r-- | runtime/Makefile.am | 2 | ||||
-rw-r--r-- | runtime/lmsig_gt.c | 40 | ||||
-rw-r--r-- | runtime/sigprov.h | 5 | ||||
-rw-r--r-- | tools/omfile.c | 46 |
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 |