diff options
author | Noriko Hosoi <nhosoi@redhat.com> | 2007-08-07 23:28:03 +0000 |
---|---|---|
committer | Noriko Hosoi <nhosoi@redhat.com> | 2007-08-07 23:28:03 +0000 |
commit | bc7f87709449298c3c76fd73246e794013605067 (patch) | |
tree | a6bbf1dae54b3c5c8fa32f2914f3c3a94ae9aff1 | |
parent | 5519ebd244b73efa0832829a9ce969af333e256c (diff) | |
download | ds-bc7f87709449298c3c76fd73246e794013605067.tar.gz ds-bc7f87709449298c3c76fd73246e794013605067.tar.xz ds-bc7f87709449298c3c76fd73246e794013605067.zip |
Resolves: #251090
Summary: ds_remove cannot remove/rename directories (Comment #2)
Description: when creating inst_dir and config_dir, make sure the parent dirs
(lib/<brand>-ds and etc/<brand>-ds) have the specified gid.
-rw-r--r-- | ldap/admin/src/scripts/DSCreate.pm.in | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in index a122d536..2557f398 100644 --- a/ldap/admin/src/scripts/DSCreate.pm.in +++ b/ldap/admin/src/scripts/DSCreate.pm.in @@ -53,7 +53,7 @@ use Net::Domain qw(hostfqdn); use File::Temp qw(tempfile tempdir); use File::Path; use File::Copy; -use File::Basename qw(basename); +use File::Basename qw(basename dirname); # load perldap use Mozilla::LDAP::Conn; @@ -135,10 +135,14 @@ sub sanityCheckParams { sub getMode { my $inf = shift; my $mode = shift; + my $rest = shift; + if (!$rest) { + $rest = "0"; + } if (defined($inf->{General}->{SuiteSpotGroup})) { - $mode = "0" . $mode . $mode . "0"; + $mode = "0" . $mode . $mode . $rest; } else { - $mode = "0" . $mode . "00"; + $mode = "0" . $mode . $rest . $rest; } return oct($mode); @@ -152,6 +156,7 @@ sub changeOwnerMode { my $inf = shift; my $mode = shift; my $it = shift; + my $gidonly = shift; my $uid = getpwnam $inf->{General}->{SuiteSpotUserID}; my $gid = -1; # default to leave it alone @@ -160,14 +165,18 @@ sub changeOwnerMode { $gid = getgrnam $inf->{General}->{SuiteSpotGroup}; } - $mode = getMode($inf, $mode); + $mode = getMode($inf, $mode, $gidonly); $! = 0; # clear errno chmod $mode, $it; if ($!) { return ('error_chmoding_file', $it, $!); } $! = 0; # clear errno - chown $uid, $gid, $it; + if ( $gidonly ) { + chown -1, $gid, $it; + } else { + chown $uid, $gid, $it; + } if ($!) { return ('error_chowning_file', $it, $inf->{General}->{SuiteSpotUserID}, $!); } @@ -195,6 +204,18 @@ sub makeDSDirs { return @errs; } } + # set the group of the parent dir of config_dir and inst_dir + if (defined($inf->{General}->{SuiteSpotGroup})) { + for (qw(inst_dir config_dir)) { + my $dir = $inf->{slapd}->{$_}; + my $parent = dirname($dir); + # changeOwnerMode(inf, mode, file, gidonly & default mode); + @errs = changeOwnerMode($inf, 7, $parent, 5); + if (@errs) { + return @errs; + } + } + } return @errs; } @@ -511,9 +532,9 @@ sub startServer { last; } sleep(1); - if (!($ii % 10)) { - debug(0, "Attempting to obtain server status . . .\n"); - } + if (!($ii % 10)) { + debug(0, "Attempting to obtain server status . . .\n"); + } ++$ii; } |