FYI: I have added a bug tracker:
https://github.com/rsyslog/rsyslog/issues/136

Rainer

2014-10-13 16:03 GMT+02:00 Rainer Gerhards <[email protected]>:

> 2014-10-10 18:51 GMT+02:00 Dave Caplinger <[email protected]>:
>
>> (changed subject since this diverges from the original point a bit)
>>
>> On Oct 10, 2014, at 9:02 AM, Rainer Gerhards <[email protected]>
>> wrote:
>>
>> > And thinking about escaping, there is a subtle difference. Let's say you
>> > have a message that just says "a\nb". By default, this gets converted
>> > "a\\nb", so in a proper receiver, the string will again be "a\nb" (4
>> > chars). No message modification happens.
>> >
>> > In the jsonr case, we try to find C escape sequences in the property in
>> > question and try to unescape them. So "a\nb" (4 chars) becomes "a<LF>b"
>> (3
>> > chars), what then is json-encoded into "a\nb" and the proper receiver
>> will
>> > decode it as "a<LF>b" (3 chars). As such, the receiver actually does
>> see a
>> > DIFFERENT message than the one the original sender emitted. This may be
>> the
>> > desired result, even in many cases, but in other cases it may just be
>> > plainly wrong. For example, if a message hash was taken, that hash
>> would of
>> > course become invalid by changing "\n" to the single LF character.
>> >
>> > Does that explain why there are the different options?
>>
>> Yes, thanks for the clarification!
>>
>> I was bumping into this on v7.6 when we had UNIX and Windows logs hitting
>> the same action. Some of the UNIX stuff would wind up with a double-escaped
>> quote (\\") because the originating server escaped it (\") but that results
>> in invalid JSON since now the " is no longer escaped correctly.  For
>> example:
>>
>> Source message with pre-escaped quotes:
>>
>> Sep 24 20:00:20 someserver xenstored:  A697399.1    write
>>  /xapi/14/private/vbd/51744/vdi-id [[\"VDI\",
>> \"984de168-aabb-d3be-4357-33f62ee8a9a3\\/b1b99507-260d-423b-a1ef-5262d5443376\"]]
>>
>> 'json' format output (with newlines for clarity):
>>
>> {"time_received":"2014-09-24T20:00:20.150207-05:00",
>>   "receiver":"loghost",
>>   "from":"10.11.12.13",
>>   "time_reported":"Sep 24 20:00:20",
>>   "host":"someserver",
>>   "severity":"info",
>>   "facility":"local3",
>>   "app_name":"xenstored",
>>   "proc_id":"-",
>>   "message":"Sep 24 20:00:20 someserver/10.11.12.13 xenstored:
>> A697399.1    write     /xapi/14/private/vbd/51744/vdi-id [[\\"VDI\\",
>> \\"984de168-aabb-d3be-4357-33f62ee8a9a3\\/b1b99507-260d-423b-a1ef-5262d5443376\\"]]"
>> }
>>
>
> Oh, that's a good catch, that's certainly not correct!
>
>
>>
>> I was hoping that switching to 'jsonr' (and v8.2+) would fix this, but
>> haven't tested yet.  However, (non-escaped) tab-delimeted windows logs can
>> contain filesystem paths with invalid (or worse, valid) C escape sequences,
>> so 'jsonr' may mangle them.
>>
>> So maybe I really need 'json' format, but I also need mmnormalize to fix
>> the " handling, so I could turn (\") into (\\\") and leave all other (\)
>> alone (making it Windows path-safe).
>>
>
> actually, I'd say that's simply a bug in rsyslog's json encoder. If it
> sees a double-quote inside a value, it needs to escape it. I'll check
> what's going on...
>
> Thanks,
> Rainer
>
>
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com/professional-services/
What's up with rsyslog? Follow https://twitter.com/rgerhards
NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of 
sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE 
THAT.

Reply via email to