WebDyne
view release on metacpan or search on metacpan
lib/WebDyne/Install/Apache.pm view on Meta::CPAN
# Open it as a template
#
$template_or=Text::Template->new(
type => 'FILE',
source => $template_fn,
) || return err("unable to open template $template_fn, $!");
# Fill in with out self ref as a hash
#
my $apache_conf=$template_or->fill_in(
HASH => $config_hr,
DELIMITERS => ['<!--', '-->'],
) || return err("unable to fill in template $template_fn, $Text::Template::ERROR");
# Splice in now, but write out at end of block
#
splice(@apache_conf, $lineno, undef, $apache_conf);
}
# Re-open httpd.conf for write out, unless uninstall and delims not found, which
# means nothing was changed.
#
unless ($Uninstall_fg && ($delim[0] == $delim[1])) {
$apache_conf_fh=IO::File->new($apache_conf_fn, O_TRUNC | O_WRONLY) ||
return err("unable to open file $apache_conf_fn, $!");
print $apache_conf_fh join('', @apache_conf);
$apache_conf_fh->close();
message "Apache config file '$apache_conf_fn' updated.";
}
}
else {
# No need to update Apache config file - using conf.d dir
#
message 'Apache uses conf.d directory - not changing httpd.conf file';
}
# Almost done ..
#
unless ($Uninstall_fg) {
# Chown cache dir unless it is the system temp dir - then don't mess with it
#
if ($cache_dn) {
unless ($cache_dn eq File::Spec->tmpdir()) {
message
"Granting Apache ($APACHE_UNAME.$APACHE_GNAME) ownership of cache directory '$cache_dn'.";
chown($APACHE_UID, $APACHE_GID, $cache_dn) ||
return err("unable to chown $cache_dn to $APACHE_UNAME.$APACHE_GNAME");
# Selinx fixup
#
if ($SELINUX_ENABLED_BIN) {
# Run to see if SELinux enabled
#
if ((system($SELINUX_ENABLED_BIN) >> 8) == 0) {
# SELinux is enabled. chcon first
#
message("SELinux appears enabled - attempting to set cache directory file contexts appropriately.");
if (my $chcon_bin=$SELINUX_CHCON_BIN) {
message("Adding SELinux context '$SELINUX_CONTEXT_HTTPD' to cache directory '$cache_dn' via chcon");
if (my $rc=system($chcon_bin, '-R', '-t', $SELINUX_CONTEXT_HTTPD, $cache_dn) >> 8) {
message("WARNING: SELinux chcon of $cache_dn to $SELINUX_CONTEXT_HTTPD failed with error code $rc\n")
}
# Dynaloader files
#
my @module_so_fn;
while (my ($module_so, $module_so_fn)=each %{$SELINUX_SO_CHECK}) {
if (eval("require $module_so")) {
foreach my $symbol (keys %::) {
if ($symbol=~/^_<(.*)\/\Q$module_so_fn\E$/) {
push @module_so_fn, File::Spec->catfile($1, $module_so_fn);
}
}
}
}
foreach my $module_so_fn (@module_so_fn) {
my $context_ls=qx/ls -lZ $module_so_fn/ ||
message("WARNING: unable to get context of file $module_so_fn");
my @context_ls=split(/\s+/, $context_ls);
my $context=$context_ls[3];
my ($user, $role, $type)=split(/\:/, $context);
if (($type ne $SELINUX_CONTEXT_LIB) && !$opt_hr->{'setcontext'}) {
message;
message("WARNING: SELinux context type of '$module_so_fn' is '$type'");
message("WARNING: file may not be loadable by Apache ! Use '$0 --setcontext' to change or fix manually");
message;
}
elsif (($type ne $SELINUX_CONTEXT_LIB) && $opt_hr->{'setcontext'}) {
message("Adding SELinux context '$SELINUX_CONTEXT_LIB' to module library '$module_so_fn' via chcon");
if (my $rc=system($chcon_bin, '-t', $SELINUX_CONTEXT_LIB, $module_so_fn) >> 8) {
message("WARNING: SELinux chcon of '$module_so_fn' to '$SELINUX_CONTEXT_LIB' failed with error code $rc\n")
}
}
}
( run in 1.759 second using v1.01-cache-2.11-cpan-5511b514fd6 )