We're using cfengine-2.1.21, and I see that this bug seems to exist in 
that codebase as well, however I'm not sure whether we've ever 
encountered it.

In your experience, is the hang on "zero-hashed" macro names random, or 
will it occur every run of cfagent if a "zero-hashed" macro name exists?


Paul Krizak                         7171 Southwest Pkwy MS B200.3A
Senior Systems Engineer             Austin, TX  78735
Advanced Micro Devices              Desk:  (512) 602-8775
Linux/Unix Systems Engineering      Cell:  (512) 791-0686
Global IT Infrastructure            Fax:   (512) 602-0468

On 04/12/10 09:31, fo...@cfengine.com wrote:
> Forum: Cfengine Help
> Subject: Possible bug in cfengine 2
> Author: kevinmusker
> Link to topic: https://cfengine.com/forum/read.php?3,16863,16863#msg-16863
>
> We are currently using cfengine 2.2.8 to manage a bunch of FreeBSD boxes. 
> Last week we made some configuration changes which led to cfagent hanging 
> while trying to parse the cf files. We managed to track it down to the 
> addition of a variable named 'voip_group'. In order to deploy the changes, we 
> renamed the variable.
>
> This seems to have been caused by a bug in the GetMacroValue function defined 
> in macro.c. The string 'voip_group' hashes to the value 0 (zero), meaning 
> that the while loop never exits if the variable isn't defined in the 
> hashtable associated with the current scope (in our case, it was hangnig 
> while searching for the variable in the 'main' scope). The reason I say that 
> it _seems_ to have been caused by a bug is that, if my assumptions are 
> correct, it has a 1 in 4969 chance of being triggered for any given variable 
> name.
>
> Below is a patch which fixed the problem for us. Although we are not using 
> the latest version of cfengine 2, the bug is present in the latest version of 
> macro.c in VC.
>
>
> --- src/macro.c.orig    2007-08-19 16:27:48.000000000 +0100
> +++ src/macro.c 2010-04-09 14:45:37.000000000 +0100
> @@ -380,6 +380,10 @@
>
>         if (i>= CF_HASHTABLESIZE-1)
>            {
> +         if (slot == 0)
> +            {
> +            return(getenv(vname));
> +            }
>            i = 0;
>            }
>
>
>
> Has anybody else experienced a similar problem?
>
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine
>

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to