Forum: Cfengine Help
Subject: Re: Loop through file in cfengine3?
Author: [email protected]
Link to topic: https://cfengine.com/forum/read.php?3,16856,17801#msg-17801
I have found a solution that lets me update the contents of the shadow file for
any number of users I like by reading a shadow-formatted file, and updating the
corresponding fields in the actual /etc/shadow file. Here's the code:
# Update passwords in /etc/shadow. For this to work, a shadow-formatted
# file for servers and workstations must exist on the cfengine master server
# in $(masterfiles)/passwords as
# shadow_servers and shadow_workstations.
#
# This file is copied locally to /var/cfengine/local/cfshadow, then
# it is read into an array and /etc/shadow is updated accordingly.
bundle agent passwords {
files:
# Copy in a shadow-formatted file with local users
# you want to update here
servers::
"/var/cfengine/local/cfshadow"
perms => system("0440","root","root"),
copy_from => mycopy("${g.masterfiles}/passwords/shadow_server",
"${g.phost}");
!servers::
"/var/cfengine/local/cfshadow"
perms => system("0440","root","root"),
copy_from =>
mycopy("${g.masterfiles}/passwords/shadow_workstation", "${g.phost}");
# Edit the shadow file!
any::
"/etc/shadow"
comment => "Updating passwords in /etc/shadow",
edit_line => set_shadow;
}
bundle edit_line set_shadow {
vars:
# This slurps our source file into an array
"myshadow" int => readstringarray("myshadow_array",
"/var/cfengine/local/cfshadow",
"#[^\n]*",":",200,10000);
"shadow_users" slist => getindices("myshadow_array");
field_edits:
# We can selectively edit by hard-coding, like this
#"root:.*"
# edit_field => col(":","2","$(myshadow_array[1])","set");
# This promises that any user in the array (field 0) will make the
# source shadow entry, from field 1 in in the array, match to field
# 2 in /etc/shadow
"$(myshadow_array[$(shadow_users)][0]):.*"
edit_field =>
col(":","2","$(myshadow_array[$(shadow_users)][1])","set");
}
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine