ldap/admin/src/scripts/DSCreate.pm.in | 57 ++++++++++++++++++++++++++++------
1 file changed, 47 insertions(+), 10 deletions(-)
New commits:
commit 0219577ab70b324730dc224821876e6563647807
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Thu Jan 24 16:24:13 2013 -0800
Ticket #563 - DSCreate.pm: Error messages cannot be used in the if expression since they could be localized.
Bug description: Error messages from the command line interface
could be localized based upon the users' configuration. But the
script expects English sentence.
Fix description: Set the C locale '$ENV{LANG} = "C"' before running
the command line if the message from the command is examined in
the expression.
Reviewed by Mark (Thank you!!)
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in
index efcec93..68bb584 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -1013,6 +1013,7 @@ sub updateSelinuxPolicy {
my $semanage_err;
my $rc;
my $retry = 60;
+ $ENV{LANG} = "C";
while (($retry > 0) && ($semanage_err = `semanage port -a -t ldap_port_t -p tcp $inf->{slapd}->{ServerPort} 2>&1`) && ($rc = $?)) {
debug(1, "Adding port $inf->{slapd}->{ServerPort} to selinux policy failed - $semanage_err (return code: $rc).\n");
debug(1, "Retrying in 5 seconds\n");
@@ -1393,6 +1394,7 @@ sub removeDSInstance {
my $semanage_err;
my $rc;
my $retry = 60;
+ $ENV{LANG} = "C";
while (($retry > 0) && ($semanage_err = `semanage port -d -t ldap_port_t -p tcp $port 2>&1`) && ($rc = $?)) {
if (($semanage_err =~ /defined in policy, cannot be deleted/) || ($semanage_err =~ /is not defined/)) {
$retry = -1;
@@ -1415,6 +1417,7 @@ sub removeDSInstance {
my $semanage_err;
my $rc;
my $retry = 60;
+ $ENV{LANG} = "C";
while (($retry > 0) && ($semanage_err = `semanage port -d -t ldap_port_t -p tcp $secureport 2>&1`) && ($rc = $?)) {
if (($semanage_err =~ /defined in policy, cannot be deleted/) || ($semanage_err =~ /is not defined/)) {
$retry = -1;
commit 4999849d428c5564546467101483faa63999dc32
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Thu Jan 24 15:55:16 2013 -0800
Ticket #502 - setup-ds.pl script should wait if "semanage.trans.LOCK" presen
Bug description: If multiple DSCreate or removeDSInstance run
simultaneously, semanage port fails because only one semanage
transaction is allowed to start.
Fix description: This patch puts "semanage port" in the while
loop and it retries until it succeeds or reaches the max retry
count (in total 5 minutes).
Reviewed by Mark (Thank you!!)
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in
index 30de40e..efcec93 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -553,7 +553,7 @@ sub installSchema {
push @schemafiles, glob("$inf->{General}->{prefix}@schemadir@/*");
} else {
push @schemafiles, "$inf->{General}->{prefix}@schemadir@/00core.ldif",
- "$inf->{General}->{prefix}@schemadir@/01core389.ldif";
+ "$inf->{General}->{prefix}@schemadir@/01core389.ldif";
}
# additional schema files
@@ -1010,7 +1010,19 @@ sub updateSelinuxPolicy {
}
if ($need_label == 1) {
- system("semanage port -a -t ldap_port_t -p tcp $inf->{slapd}->{ServerPort}");
+ my $semanage_err;
+ my $rc;
+ my $retry = 60;
+ while (($retry > 0) && ($semanage_err = `semanage port -a -t ldap_port_t -p tcp $inf->{slapd}->{ServerPort} 2>&1`) && ($rc = $?)) {
+ debug(1, "Adding port $inf->{slapd}->{ServerPort} to selinux policy failed - $semanage_err (return code: $rc).\n");
+ debug(1, "Retrying in 5 seconds\n");
+ sleep(5);
+ $retry--;
+ }
+ if (0 == $retry) {
+ debug(1, "Adding port $inf->{slapd}->{ServerPort} to selinux policy failed - $semanage_err (return code: $rc).\n");
+ debug(1, "Reached time limit.\n");
+ }
}
}
}
@@ -1378,24 +1390,46 @@ sub removeDSInstance {
if ("@with_selinux@") {
foreach my $port (@{$entry->{"nsslapd-port"}})
{
- my $semanage_err = `semanage port -d -t ldap_port_t -p tcp $port 2>&1`;
- if ($? != 0) {
- if (($semanage_err !~ /defined in policy, cannot be deleted/) && ($semanage_err !~ /is not defined/)) {
- push @errs, [ 'error_removing_port_label', $port, $semanage_err];
+ my $semanage_err;
+ my $rc;
+ my $retry = 60;
+ while (($retry > 0) && ($semanage_err = `semanage port -d -t ldap_port_t -p tcp $port 2>&1`) && ($rc = $?)) {
+ if (($semanage_err =~ /defined in policy, cannot be deleted/) || ($semanage_err =~ /is not defined/)) {
+ $retry = -1;
+ } else {
debug(1, "Warning: Port $port not removed from selinux policy correctly. Error: $semanage_err\n");
+ debug(1, "Retrying in 5 seconds\n");
+ sleep(5);
+ $retry--;
}
}
+ if (0 == $retry) {
+ push @errs, [ 'error_removing_port_label', $port, $semanage_err];
+ debug(1, "Warning: Port $port not removed from selinux policy correctly. Error: $semanage_err\n");
+ debug(1, "Reached time limit.\n");
+ }
}
foreach my $secureport (@{$entry->{"nsslapd-secureport"}})
{
- my $semanage_err = `semanage port -d -t ldap_port_t -p tcp $secureport 2>&1`;
- if ($? != 0) {
- if (($semanage_err !~ /defined in policy, cannot be deleted/) && ($semanage_err !~ /is not defined/)) {
- push @errs, [ 'error_removing_port_label', $secureport, $semanage_err];
+ my $semanage_err;
+ my $rc;
+ my $retry = 60;
+ while (($retry > 0) && ($semanage_err = `semanage port -d -t ldap_port_t -p tcp $secureport 2>&1`) && ($rc = $?)) {
+ if (($semanage_err =~ /defined in policy, cannot be deleted/) || ($semanage_err =~ /is not defined/)) {
+ $retry = -1;
+ } else {
debug(1, "Warning: Port $secureport not removed from selinux policy correctly. Error: $semanage_err\n");
+ debug(1, "Retrying in 5 seconds\n");
+ sleep(5);
+ $retry--;
}
}
+ if (0 == $retry) {
+ push @errs, [ 'error_removing_port_label', $secureport, $semanage_err];
+ debug(1, "Warning: Port $secureport not removed from selinux policy correctly. Error: $semanage_err\n");
+ debug(1, "Reached time limit.\n");
+ }
}
}