Forum: Cfengine Help
Subject: Re: regexp parameter quoting
Author: jonb1987
Link to topic: https://cfengine.com/forum/read.php?3,21851,21869#msg-21869
OK, so I think cfengine is in the clear after all.
The difficulty I had was with understanding exactly where the problem lay.
With some more detailed invetigation I've ended up with this, that seems to
work...
#----------------------------------------------------------
bundle agent main {
#----------------------------------------------------------
files:
any::
"/etc/passwd"
handle => "etc_passwd",
comment => "Set compat mode in passwd",
edit_line => fix_line("^\+::::::.*", "+::::::/bin/bash");
}
#----------------------------------------------------------
bundle edit_line fix_line(pattern, line) {
#----------------------------------------------------------
# If pattern does not exist
# Add line
# elsif line does not match
# replace with line
# So pattern must be anchored and match whole line
#----------------------------------------------------------
vars:
# Create a regexp string for line with whitespace replaced by \s+
"eline" string => escape("$(line)");
"rline" string => execresult("/bin/echo -e \"$(eline)\c\" | /usr/bin/perl
-pe 's/\s+/\\s+/g'", "useshell");
classes:
# Check for missing pattern, or incorrect line
"missing" not => regline("$(pattern)","$(edit.filename)");
"wrong" not => regline("$(rline)", "$(edit.filename)"),
comment => "rline : $(rline)";
insert_lines:
missing::
"$(line)";
replace_patterns:
wrong.!missing::
"$(pattern)" replace_with => value("$(line)");
"Fixed in $(edit.filename) : $(line)";
}
}
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine