Excellent, thx. I'll see that I merge both into the main branch today. Right
now my main machine is running a performance benchmark, so I need to do this
later today.

Rainer

> -----Original Message-----
> From: [email protected] [mailto:rsyslog-
> [email protected]] On Behalf Of [email protected]
> Sent: Wednesday, January 26, 2011 10:06 AM
> To: rsyslog-users
> Subject: Re: [rsyslog] message manipulation in a parser
> 
> I tested the code in your branch and verified that it works.
> 
> David Lang
> 
> On Tue, 25 Jan 2011, Rainer Gerhards wrote:
> 
> > David,
> >
> > I now integrated the patch. I think I will also move it into the main
> branch
> > soon.
> >
> > Rainer
> >
> > On 01/17/2011 10:15 AM, [email protected] wrote:
> >> On Mon, 17 Jan 2011, Rainer Gerhards wrote:
> >>
> >>> Date: Mon, 17 Jan 2011 09:53:24 +0100
> >>>> [email protected]] On Behalf Of [email protected]
> >>>>
> >>>> On Mon, 17 Jan 2011, Rainer Gerhards wrote:
> >>>>
> >>>>> I guess it makes sense when you send me the code and give the
> line
> >>>>> number where you have the issue. I can't promise, but I'll try to
> >>>>> give a good suggestion in the course of the day.
> >>>>>
> >>>>> One important thing you need to think about is that pMsg does NOT
> >>>>> necessarily use cstr objects to represent the entities. For
> example
> >>>>> (IIRC), raw message is kept in a different buffer, and you cannot
> >>>>> use cstr methods on that buffer. %msg% is actually not stored at
> >>>>> all, it is taken from rawmsg. There is a whole lot of this kind
> of
> >>>>> optimization done inside the message object. I guess this is what
> is
> >>>>> hitting you.
> >>>>
> >>>> Ok, that makes sense. so should I just insert a \0 at the
> appropriate
> >>>> place and decrament the iLenRawMsg and iLenMSG values?
> >>>
> >>> Tob e 100% sure, I'd need to check more thoroughly, but I am sure
> you
> >>> are on
> >>> the right path... But have a look at msg.c. Where the buffer is
> located
> >>> depends on the size of it (it is static inside the object up to a
> certain
> >>> size, and dyn alloced otherwise -- another optimization). The safe
> bet
> >>> is to
> >>> duplicate the message text and re-set it, but that is obviously
> much
> >>> slower
> >>> (to gain speed, you need to break layers...).
> >>
> >> Ok, This is now working, I think I found all the variables to
> change.
> >>
> >> the patch on top of v5-devel-david is
> >>
> >> diff --git a/plugins/pmcisconames/pmcisconames.c
> >> b/plugins/pmcisconames/pmcisconames.c
> >> index 28fe33d..7b76f65 100644
> >> --- a/plugins/pmcisconames/pmcisconames.c
> >> +++ b/plugins/pmcisconames/pmcisconames.c
> >> @@ -41,7 +41,7 @@
> >> #include "unicode-helper.h"
> >>
> >> MODULE_TYPE_PARSER
> >> -PARSER_NAME("rsyslog.lastline")
> >> +PARSER_NAME("rsyslog.cisconames")
> >>
> >> /* internal structures
> >> */
> >> @@ -108,9 +108,15 @@ dbgprintf("not a cisco name mangled log!\n");
> >> ABORT_FINALIZE(RS_RET_COULD_NOT_PARSE);
> >> }
> >> /* bump the message portion up by two characters to overwrite the
> extra
> >> : */
> >> - memmove(p2parse, p2parse + 2, lenMsg - 2);
> >> + lenMsg -=2;
> >> + memmove(p2parse, p2parse + 2, lenMsg);
> >> + *(p2parse + lenMsg) = '\n';
> >> + *(p2parse + lenMsg + 1) = '\0';
> >> + pMsg->iLenRawMsg -=2;
> >> + pMsg->iLenMSG -=2;
> >> /* now, claim to abort so that something else can parse the now
> modified
> >> message */
> >> DBGPRINTF("pmcisconames detected a mangled Cisco log message
> message\n");
> >> + dbgprintf("pmcisconames: new mesage: [%d]'%s'\n", lenMsg,
> p2parse);
> >> ABORT_FINALIZE(RS_RET_COULD_NOT_PARSE);
> >>
> >> finalize_it:
> >> @@ -143,7 +149,7 @@ CODEmodInit_QueryRegCFSLineHdlr
> >> CHKiRet(objUse(parser, CORE_COMPONENT));
> >> CHKiRet(objUse(datetime, CORE_COMPONENT));
> >>
> >> - dbgprintf("lastmsg parser init called, compiled with version
> %s\n",
> >> VERSION);
> >> + dbgprintf("cisconames parser init called, compiled with version
> %s\n",
> >> VERSION);
> >> bParseHOSTNAMEandTAG = glbl.GetParseHOSTNAMEandTAG(); /* cache
> value, is
> >> set only during rsyslogd option processing */
> >>
> >>
> >>
> >> David Lang
> >>
> >> P.S. I think having the file named pmlastmsg but the intermal module
> >> name being lastline is confusing, they should be related.
> >> _______________________________________________
> >> rsyslog mailing list
> >> http://lists.adiscon.net/mailman/listinfo/rsyslog
> >> http://www.rsyslog.com
> >
> > _______________________________________________
> > rsyslog mailing list
> > http://lists.adiscon.net/mailman/listinfo/rsyslog
> > http://www.rsyslog.com
> >
> _______________________________________________
> rsyslog mailing list
> http://lists.adiscon.net/mailman/listinfo/rsyslog
> http://www.rsyslog.com
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com

Reply via email to