Sysync
view release on metacpan or search on metacpan
lib/Sysync.pm view on Meta::CPAN
my $r = 0;
next unless $self->is_valid_host($host);
my $files = $self->get_host_files($host);
unless (-d "$stagefilesdir/$host")
{
mkdir "$stagefilesdir/$host";
chmod 0755, "$stagefilesdir/$host";
chown 0, 0, "$stagefilesdir/$host";
$self->log("creating: $stagefilesdir/$host");
$r++;
}
unless (-d "$stagefilesdir/$host/etc")
{
mkdir "$stagefilesdir/$host/etc";
chmod 0755, "$stagefilesdir/$host/etc";
chown 0, 0, "$stagefilesdir/$host/etc";
$self->log("creating: $stagefilesdir/$host/etc");
$r++;
}
unless (-d "$stagefilesdir/$host/etc/ssh")
{
mkdir "$stagefilesdir/$host/etc/ssh";
chmod 0755, "$stagefilesdir/$host/etc/ssh";
chown 0, 0, "$stagefilesdir/$host/etc/ssh";
$self->log("creating: $stagefilesdir/$host/etc/ssh");
$r++;
}
unless (-d "$stagefilesdir/$host/etc/ssh/authorized_keys")
{
mkdir "$stagefilesdir/$host/etc/ssh/authorized_keys";
chmod 0755, "$stagefilesdir/$host/etc/ssh/authorized_keys";
chown 0, 0, "$stagefilesdir/$host/etc/ssh/authorized_keys";
$self->log("creating: $stagefilesdir/$host/etc/ssh/authorized_keys");
$r++;
}
for my $path (sort keys %{ $files || {} })
{
my $item = $files->{$path};
next unless $item->{directory};
lib/Sysync.pm view on Meta::CPAN
}
unless (-d "$stagefilesdir/$host/$item->{directory}")
{
mkdir "$stagefilesdir/$host/$item->{directory}";
$self->log("creating: $stagefilesdir/$host/$item->{directory}");
}
my $mode = sprintf("%04i", $item->{mode});
chmod $mode, "$stagefilesdir/$host/$item->{directory}";
chown $item->{uid}, $item->{gid}, "$stagefilesdir/$host/$item->{directory}";
$r++;
}
for my $path (keys %{ $files || {} })
{
my $item = $files->{$path};
next unless $item->{file};
my @path_parts = split('/', $item->{file});
lib/Sysync.pm view on Meta::CPAN
}
if ($self->write_file_contents("$stagefilesdir/$host/$item->{file}", $item->{data}))
{
$r++;
}
my $mode = sprintf("%04i", $item->{mode});
chmod oct($mode), "$stagefilesdir/$host/$item->{file}";
chown $item->{uid}, $item->{gid}, "$stagefilesdir/$host/$item->{file}";
}
# get list of staging directory contents
my @staged_file_list;
File::Find::find({
wanted => sub { push @staged_file_list, $_ },
no_chdir => 1,
}, "$stagefilesdir/$host");
for my $staged_file (@staged_file_list)
lib/Sysync.pm view on Meta::CPAN
my $gshadow_file = $hosts->{gshadow_file} || '/etc/gshadow';
for my $host (@hosts)
{
next unless $self->is_valid_host($host);
unless (-d "$stagedir/$host")
{
mkdir "$stagedir/$host";
chmod 0755, "$stagedir/$host";
chown 0, 0, "$stagedir/$host";
$self->log("creating: $stagedir/$host");
$r++;
}
unless (-d "$stagedir/$host/etc")
{
mkdir "$stagedir/$host/etc";
chmod 0755, "$stagedir/$host/etc";
chown 0, 0, "$stagedir/$host/etc";
$self->log("creating: $stagedir/$host/etc");
$r++;
}
unless (-d "$stagedir/$host/etc/ssh")
{
mkdir "$stagedir/$host/etc/ssh";
chmod 0755, "$stagedir/$host/etc/ssh";
chown 0, 0, "$stagedir/$host/etc/ssh";
$self->log("creating: $stagedir/$host/etc/ssh");
$r++;
}
unless (-d "$stagedir/$host/etc/ssh/authorized_keys")
{
mkdir "$stagedir/$host/etc/ssh/authorized_keys";
chmod 0755, "$stagedir/$host/etc/ssh/authorized_keys";
chown 0, 0, "$stagedir/$host/etc/ssh/authorized_keys";
$self->log("creating: $stagedir/$host/etc/ssh/authorized_keys");
$r++;
}
unless (-d "$stagedir/$host/var")
{
mkdir "$stagedir/$host/var";
chmod 0755, "$stagedir/$host/var";
chown 0, 0, "$stagedir/$host/var";
$self->log("creating: $stagedir/$host/var");
$r++;
}
unless (-d "$stagedir/$host/var/lib")
{
mkdir "$stagedir/$host/var/lib";
chmod 0755, "$stagedir/$host/var/lib";
chown 0, 0, "$stagedir/$host/var/lib";
$self->log("creating: $stagedir/$host/var/lib");
$r++;
}
unless (-d "$stagedir/$host/var/lib/extrausers")
{
mkdir "$stagedir/$host/var/lib/extrausers";
chmod 0755, "$stagedir/$host/var/lib/extrausers";
chown 0, 0, "$stagedir/$host/var/lib/extrausers";
$self->log("creating: $stagedir/$host/var/lib/extrausers");
$r++;
}
# write host files
my $ent_data = $self->get_host_ent($host);
next unless $ent_data;
for my $key (@{ $ent_data->{ssh_keys} || [] })
{
my $username = $key->{username};
my $uid = $key->{uid};
my $text = $key->{keys};
if ($self->write_file_contents("$stagedir/$host/etc/ssh/authorized_keys/$username", $text))
{
chmod 0600, "$stagedir/$host/etc/ssh/authorized_keys/$username";
chown $uid, 0, "$stagedir/$host/etc/ssh/authorized_keys/$username";
$r++;
}
}
my ($shadow_group) =
grep { $_->{groupname} eq 'shadow' }
@{ $ent_data->{data}{groups} || [ ] };
$shadow_group = {} unless defined $shadow_group;
$shadow_group = $shadow_group->{gid} || 0;
if ($self->write_file_contents("$stagedir/$host/$passwd_file", $ent_data->{passwd}))
{
chmod 0644, "$stagedir/$host/$passwd_file";
chown 0, 0, "$stagedir/$host/$passwd_file";
$r++;
}
if ($self->write_file_contents("$stagedir/$host/${group_file}", $ent_data->{group}))
{
chmod 0644, "$stagedir/$host/${group_file}";
chown 0, 0, "$stagedir/$host/${group_file}";
$r++;
}
if ($self->write_file_contents("$stagedir/$host/${shadow_file}", $ent_data->{shadow}))
{
chmod 0640, "$stagedir/$host/${shadow_file}";
chown 0, $shadow_group, "$stagedir/$host/${shadow_file}";
$r++;
}
if ($self->write_file_contents("$stagedir/$host/${gshadow_file}", $ent_data->{gshadow}))
{
chmod 0640, "$stagedir/$host/${gshadow_file}";
chown 0, $shadow_group, "$stagedir/$host/${gshadow_file}";
$r++;
}
}
return $r;
}
=head3 write_file_contents
=cut
( run in 0.474 second using v1.01-cache-2.11-cpan-5511b514fd6 )