Greetings.

Another issue with RedHat not being like everyone else. Consider the
following file:

# cat /tmp/test
test:a:b:c

With the following testcase:

##########################################################################

body common control {

  bundlesequence => { "test"};

}

##########################################################################


bundle agent test {

  files:

    "/tmp/test_copy"
       comment   => "create a test file",
       copy_from => local_copy("/tmp/test"),
       create    => "true",
       classes   => cdefine("copied","not_copied"),
       edit_line => test_edit;

}

##########################################################################

bundle edit_line test_edit {

  vars:

    copied::
       "no" int => getfields("test:.*","/tmp/test_copy",":","data");

 delete_lines:

   ".*";


  reports:

   cfengine_3::

    "teststring:$(data[2])";

}


##########################################################################

body classes cdefine(pass,fail) {

  promise_repaired => { "$(pass)" };
  repair_failed => { "$(fail)" };

}

##########################################################################

body copy_from local_copy(from) {

  source       => "$(from)";
  force_update => "true";

}

##########################################################################



On other OS'es, the result should be:
R: teststring:a

However, on RedHat it core dumps. The problem lies in IsCf3VarString
(vars.c ~line 485):

int IsCf3VarString(char *str)

{ char *sp;
  char left = 'x', right = 'x';
  int dollar = false;
  int bracks = 0, vars = 0;

Debug1("IsCf3VarString(%s) - syntax verify\n",str);

for (sp = str; *sp != '\0' ; sp++)       /* check for varitems */

When RedHat core dumps, str is NULL. Other OS'es can deal with sp =
str, but RedHat does not. In a layman's attempt to patch, I just did:

int IsCf3VarString(char *str)

{ char *sp;
  char left = 'x', right = 'x';
  int dollar = false;
  int bracks = 0, vars = 0;

Debug1("IsCf3VarString(%s) - syntax verify\n",str);

if ( str == NULL ) {
   Debug("Found %d variables in (%s)\n",vars,str);
   return vars;
}

for (sp = str; *sp != '\0' ; sp++)       /* check for varitems */


It appears to work. I am not sure if this is the right way to do it,
but you get the idea.

Thanks!
_______________________________________________
Bug-cfengine mailing list
Bug-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/bug-cfengine

Reply via email to