<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="generator" content="Osso Notes">
    <title></title></head>
<body>
<p>----- Original message -----
<br>&gt; Balazs Scheidler &lt;<a href="mailto:bazsi77@gmail.com">bazsi77@gmail.com</a>&gt; writes:
<br>&gt; 
<br>&gt; &gt; ----- Original message -----
<br>&gt; &gt; &gt; On 11/17/2012 09:00 AM, Balazs Scheidler wrote:
<br>&gt; &gt; &gt; &gt; dbparser: support inheriting properties in a corellation action
<br>&gt; &gt; &gt; &gt; 
<br>&gt; &gt; &gt; &gt; I merged this one, although I have some doubts. It uses
<br>&gt; &gt; &gt; &gt; log_msg_clone_cow(), which does have some tricky semantics, as it
<br>&gt; &gt; &gt; &gt; assumes that the cloned message will not change, once cloned.
<br>&gt; &gt; &gt; &gt; 
<br>&gt; &gt; &gt; &gt; I was thinking about removing clone_cow() completely because of
<br>&gt; &gt; &gt; &gt; this tricky stuff, and whenever we need a clone we're about to
<br>&gt; &gt; &gt; &gt; change the LogMessage anyway, and delaying the actual change means
<br>&gt; &gt; &gt; &gt; that we have to do two malloc() calls, instead of one.
<br>&gt; &gt; &gt; &gt; 
<br>&gt; &gt; &gt; &gt; Can you test whether changing the message that triggered the action
<br>&gt; &gt; &gt; &gt; with a rewrite rule, keeps the cloned one intact? This would need a
<br>&gt; &gt; &gt; &gt; parallel path to the db-parser().
<br>&gt; &gt; &gt; It seems, that log_msg_clone_cow write protects the original log 
<br>&gt; &gt; &gt; message, so trying to do a log_msg_set_value on the original message 
<br>&gt; &gt; &gt; will result in an assertion. Sorry I didn't realize this when doing
<br>&gt; &gt; &gt; the&nbsp; &#32;original patch, explicitly copying all the name-value pairs
<br>&gt; &gt; &gt; seemed&nbsp; &#32;inefficient, but this behaviour is not desirable. Should I
<br>&gt; &gt; &gt; rework the&nbsp; &#32;patch this way or is there a better way of doing it?
<br>&gt; &gt; &gt; 
<br>&gt; &gt; 
<br>&gt; &gt; I'd drop clone_cow() now, and implement a proper clone that allocates
<br>&gt; &gt; the logmsg header and nvtable in a single block, and copies everything
<br>&gt; &gt; through.
<br>&gt; &gt; 
<br>&gt; &gt; that way clone+change becomes cheaper and you got a clone call that
<br>&gt; &gt; works in this case too.
<br>&gt; 
<br>&gt; There's another problem, though: pattern_db_process() also sets the
<br>&gt; original message write protected, so even if I do a proper clone, the
<br>&gt; original will remain write protected.
<br>
<br>only in case it's stored in a correllation context.
<br>
<br>&gt; 
<br>&gt; I'm also a bit confused about the single block header + nvtable
<br>&gt; allocation...
<br>&gt; 
<br>&gt; I suppose I can do clone = log_msg_alloc(msg-&gt;payload-&gt;size), copy the
<br>&gt; header and the payload too and adjust clone-&gt;payload. Is that the
<br>&gt; correct way to do it?
<br>&gt; 
<br>
<br>I can't really remember the code too much. double check whether there are pointer values, those would probably need adjustments.
<br>
<br>also there are iv_list_heads used when a messagee is enqueued that need cleaning.</p>
</body>
</html>