summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Install
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Install')
-rw-r--r--Bugzilla/Install/Filesystem.pm45
1 files changed, 36 insertions, 9 deletions
diff --git a/Bugzilla/Install/Filesystem.pm b/Bugzilla/Install/Filesystem.pm
index 2a000acae..c95b2eecb 100644
--- a/Bugzilla/Install/Filesystem.pm
+++ b/Bugzilla/Install/Filesystem.pm
@@ -45,6 +45,7 @@ our @EXPORT = qw(
update_filesystem
create_htaccess
fix_all_file_permissions
+ fix_file_permissions
);
# This looks like a constant because it effectively is, but
@@ -562,12 +563,20 @@ sub _update_old_charts {
}
}
+sub fix_file_permissions {
+ my ($file) = @_;
+ return if ON_WINDOWS;
+ my $perms = FILESYSTEM()->{all_files}->{$file}->{perms};
+ # Note that _get_owner_and_group is always silent here.
+ my ($owner_id, $group_id) = _get_owner_and_group();
+ _fix_perms($file, $owner_id, $group_id, $perms);
+}
sub fix_all_file_permissions {
my ($output) = @_;
- my $ws_group = Bugzilla->localconfig->{'webservergroup'};
- my $group_id = _check_web_server_group($ws_group, $output);
+ # _get_owner_and_group also checks that the webservergroup is valid.
+ my ($owner_id, $group_id) = _get_owner_and_group($output);
return if ON_WINDOWS;
@@ -578,9 +587,6 @@ sub fix_all_file_permissions {
print get_text('install_file_perms_fix') . "\n" if $output;
- my $owner_id = POSIX::getuid();
- $group_id = POSIX::getgid() unless defined $group_id;
-
foreach my $dir (sort keys %dirs) {
next unless -d $dir;
_fix_perms($dir, $owner_id, $group_id, $dirs{$dir});
@@ -617,6 +623,16 @@ sub fix_all_file_permissions {
_fix_cvs_dirs($owner_id, '.');
}
+sub _get_owner_and_group {
+ my ($output) = @_;
+ my $group_id = _check_web_server_group($output);
+ return () if ON_WINDOWS;
+
+ my $owner_id = POSIX::getuid();
+ $group_id = POSIX::getgid() unless defined $group_id;
+ return ($owner_id, $group_id);
+}
+
# A helper for fix_all_file_permissions
sub _fix_cvs_dirs {
my ($owner_id, $dir) = @_;
@@ -633,17 +649,22 @@ sub _fix_cvs_dirs {
sub _fix_perms {
my ($name, $owner, $group, $perms) = @_;
#printf ("Changing $name to %o\n", $perms);
- chown $owner, $group, $name
- or warn install_string('chown_failed', { path => $name,
- error => $! }) . "\n";
+
+ # The webserver should never try to chown files.
+ if (Bugzilla->usage_mode == USAGE_MODE_CMDLINE) {
+ chown $owner, $group, $name
+ or warn install_string('chown_failed', { path => $name,
+ error => $! }) . "\n";
+ }
chmod $perms, $name
or warn install_string('chmod_failed', { path => $name,
error => $! }) . "\n";
}
sub _check_web_server_group {
- my ($group, $output) = @_;
+ my ($output) = @_;
+ my $group = Bugzilla->localconfig->{'webservergroup'};
my $filename = bz_locations()->{'localconfig'};
my $group_id;
@@ -727,4 +748,10 @@ Params: C<$output> - C<true> if you want this function to print
Returns: nothing
+=item C<fix_file_permissions>
+
+Given the name of a file, its permissions will be fixed according to
+how they are supposed to be set in Bugzilla's current configuration.
+If it fails to set the permissions, a warning will be printed to STDERR.
+
=back