Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 162024 Details for
Bug 253811
RFE: registration tool (register-ds-admin.pl)
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
cvs diff (adminserver)
as.diffs (text/plain), 19.04 KB, created by
Noriko Hosoi
on 2007-08-22 02:09:37 UTC
(
hide
)
Description:
cvs diff (adminserver)
Filename:
MIME Type:
Creator:
Noriko Hosoi
Created:
2007-08-22 02:09:37 UTC
Size:
19.04 KB
patch
obsolete
>Index: admserv/newinst/src/AdminUtil.pm.in >=================================================================== >RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminUtil.pm.in,v >retrieving revision 1.13 >diff -t -w -U4 -r1.13 AdminUtil.pm.in >--- admserv/newinst/src/AdminUtil.pm.in 7 Aug 2007 23:30:02 -0000 1.13 >+++ admserv/newinst/src/AdminUtil.pm.in 22 Aug 2007 01:16:43 -0000 >@@ -22,13 +22,15 @@ > @EXPORT = qw(getAdmConf getConfigDSConn createConfigDS createSubDS > updateAdmConf updateAdmpw updateLocalConf importCACert > getLocalConfigDS getPset registerDSWithConfigDS > registerManyDSWithConfigDS createSubDSNoConn >+ registerScatteredDSWithConfigDS > unregisterDSWithConfigDS isConfigDS); > @EXPORT_OK = qw(getAdmConf getConfigDSConn createConfigDS createSubDS > updateAdmConf updateAdmpw updateLocalConf importCACert > getLocalConfigDS getPset registerDSWithConfigDS > registerManyDSWithConfigDS createSubDSNoConn >+ registerScatteredDSWithConfigDS > unregisterDSWithConfigDS isConfigDS); > > # load perldap > use Mozilla::LDAP::Conn; >@@ -328,9 +330,9 @@ > $inf->{slapd}->{RootDNPwd}, > $inf->{General}->{certdir}); > if (!$conn) { > @{$errs} = ('error_connection_failed'); >- return 1; >+ return 0; > } > > return internalCreateSubDS($conn, $inf, $errs); > } >@@ -628,8 +630,49 @@ > $conn->close(); > > return 1 > } >+sub registerScatteredDSWithConfigDS { >+ my $inf = shift; >+ my $errs = shift; >+ my $instances_ref = shift; >+ my @configdirs = keys %{$instances_ref}; >+ my $configdir = $configdirs[0]; # use the first configdir for admin-serv >+ >+ if ( ! $instances_ref ) { >+ return 1; # no instances to register - just return ok >+ } >+ >+ # open a connection to the configuration directory server >+ my $conn = getConfigDSConn($inf->{General}->{ConfigDirectoryLdapURL}, >+ $inf->{General}->{ConfigDirectoryAdminID}, >+ $inf->{General}->{ConfigDirectoryAdminPwd}, >+ "$configdir/admin-serv", $errs); >+ >+ if (!$conn or @{$errs}) { >+ return 0; >+ } >+ >+ my $admConf = getAdmConf("$configdir/admin-serv"); >+ >+ for $configdir ( @configdirs ) { >+ foreach my $dsinst ( @{$instances_ref->{$configdir}} ) { >+ my $instinf = createInfFromConfig("$configdir/$dsinst", $dsinst); >+ unlink($instinf->{filename}); >+ $instinf->{General}->{ConfigDirectoryLdapURL} = >+ $inf->{General}->{ConfigDirectoryLdapURL}; >+ $instinf->{General}->{AdminDomain} = $inf->{General}->{AdminDomain}; >+ if (!registerDSWithConfigDS($dsinst, $errs, $instinf, >+ $conn, $admConf, $configdir)) { >+ return 0; >+ } >+ } >+ } >+ >+ $conn->close(); >+ >+ return 1 >+} > > sub registerDSWithConfigDS { > my $servid = shift; > my $errs = shift; >Index: admserv/newinst/src/RegDSDialogs.pm >=================================================================== >RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/RegDSDialogs.pm,v >retrieving revision 1.1 >diff -t -w -U4 -r1.1 RegDSDialogs.pm >--- admserv/newinst/src/RegDSDialogs.pm 27 Jul 2007 01:42:46 -0000 1.1 >+++ admserv/newinst/src/RegDSDialogs.pm 22 Aug 2007 01:16:43 -0000 >@@ -57,20 +57,25 @@ > my $self = shift; > my $ans = shift; > my $index = shift; > my $res = $DialogManager::SAME; >+ my %instances = %{$self->{manager}->{inf}->{slapd}->{Instances}}; > $self->{manager}->setType($TYPICAL); > if ($index == 0) { > # validate serverIdentifier? >- foreach my $inst (@{$self->{manager}->{inf}->{slapd}->{Instances}}) >+ foreach my $confdir ( keys %instances ) >+ { >+ foreach my $inst ( @{$instances{$confdir}} ) > { > if ( "$inst" eq "slapd-" . $ans ) > { > $self->{manager}->{inf}->{slapd}->{ServerIdentifier} = $ans; >+ $self->{manager}->{inf}->{slapd}->{config_dir} = $confdir; > $res = $DialogManager::NEXT; > goto out; > } > } >+ } > out: > if ( $DialogManager::SAME == $res ) > { > $self->{manager}->alert("error_configds_txt", $ans); >Index: admserv/newinst/src/register-ds-admin.pl.in >=================================================================== >RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/register-ds-admin.pl.in,v >retrieving revision 1.3 >diff -t -w -U4 -r1.3 register-ds-admin.pl.in >--- admserv/newinst/src/register-ds-admin.pl.in 7 Aug 2007 23:30:02 -0000 1.3 >+++ admserv/newinst/src/register-ds-admin.pl.in 22 Aug 2007 01:16:43 -0000 >@@ -38,8 +38,10 @@ > # > > use lib qw(@perlpath@); > >+use strict; >+ > use File::Basename; > use Net::Domain qw(hostfqdn); > > # Admin Setup modules >@@ -57,20 +59,46 @@ > sub reg_get_passwd > { > my $setup = shift; > my $key = shift; >- my $value = shift; >+ my $value0 = shift; >+ my $value1 = shift; > > print("\n==============================================================================\n"); >- $setup->msg(0, $key, $value); >+ if ( $value1 ) >+ { >+ $setup->msg(0, $key, $value0, $value1); >+ } >+ elsif ( $value0 ) >+ { >+ $setup->msg(0, $key, $value0); >+ } >+ else >+ { >+ $setup->msg(0, $key); >+ } > system("stty -echo"); > my $ans = <STDIN>; > system("stty echo"); > print "\n"; > chop($ans); > return $ans; > } > >+sub reg_get_response >+{ >+ my $setup = shift; >+ my $key = shift; >+ my $value = shift; >+ >+ print("\n==============================================================================\n"); >+ $setup->msg(0, $key, $value); >+ my $ans = <STDIN>; >+ print "\n"; >+ chop($ans); >+ return $ans; >+} >+ > my $res = new Resource("@propertydir@/register-ds-admin.res", > "@propertydir@/setup-ds-admin.res", > "@propertydir@/setup-ds.res"); > >@@ -78,37 +106,132 @@ > > $setup->msg('begin_ds_registration'); > # get existing instances > my $instconfigdir = $setup->{configdir}; >-my @instances = (); >-for my $dir (glob("$setup->{configdir}/slapd-*")) { >- if (-d $dir) { >- push @instances, basename($dir); >+my %instances = (); >+for my $dir (glob("$setup->{configdir}/slapd-*")) >+{ >+ if (-d $dir) >+ { >+ my $dname = dirname($dir); >+ my $bname = basename($dir); >+ push @{$instances{$dname}}, $bname; > } > } >-if ( $#instances < 0 ) >+ >+# in case Directory Servers are installed at the unexpected location. >+my $done = 0; >+my $ans; >+while ( !$done && ($ans = reg_get_response($setup, 'subds_conf_prompt', "@instconfigdir@")) ) >+{ >+ if ( $ans eq "" || !$ans ) >+ { >+ $done = 1; >+ } >+ elsif ( ! -d $ans ) >+ { >+ ; >+ } >+ elsif ( basename($ans) =~ /^slapd-/ ) >+ { >+ my $dname = dirname($ans); >+ my $bname = basename($ans); >+ if ( exists $instances{$dname} ) >+ { >+ my $addit = 1; >+ foreach my $thisslapd ( @{$instances{$dname}} ) >+ { >+ if ( $thisslapd eq $bname ) >+ { >+ $addit = 0; >+ goto out0; >+ } >+ } >+out0: >+ if ( $addit ) >+ { >+ push @{$instances{$dname}}, $bname; >+ } >+ } >+ else >+ { >+ push @{$instances{$dname}}, $bname; >+ } >+ } >+ else >+ { >+ $ans =~ s/^\s+//; >+ $ans =~ s/[\/\s]+$//; >+ my $rc = opendir(DIR, $ans); >+ if ( $rc ) >+ { >+ my $file = ""; >+ while ( defined($file = readdir(DIR)) ) >+ { >+ next if ( !("$file" =~ /^slapd-/) ); >+ if ( exists $instances{$ans} ) >+ { >+ my $addit = 1; >+ foreach my $thisslapd ( @{$instances{$ans}} ) >+ { >+ if ( $thisslapd eq $file ) >+ { >+ $addit = 0; >+ goto out1; >+ } >+ } >+out1: >+ if ( $addit ) >+ { >+ push @{$instances{$ans}}, $file; >+ } >+ } >+ else >+ { >+ push @{$instances{$ans}}, $file; >+ } >+ } >+ closedir(DIR); >+ } >+ } >+} >+ >+my @instconfigdirs = keys %instances; >+if ( $#instconfigdirs < 0 ) > { > $setup->msg($FATAL, 'error_no_ds'); > $setup->doExit(1); > } > >+print("\n==============================================================================\n"); >+$setup->msg('candidate_list_txt'); >+foreach my $c ( @instconfigdirs ) >+{ >+ foreach my $i ( @{$instances{$c}} ) >+ { >+ print " $c/$i\n"; >+ } >+} >+ > # see if there is already a configds > my $admConf = AdminUtil::getAdmConf("$instconfigdir/admin-serv"); > my @admConfKeys = keys %$admConf; > my $orig_confdsid = ""; > my $new_confdsid = ""; >+my $new_confdir = ""; > my $adminuid = ""; > my @errs = (); > my $fqdn = hostfqdn(); > > # set defaults >-if ( $#admConfKeys >= 0 ) >+if ( $#admConfKeys >= 4 ) # admserv.conf, console.conf, httpd.conf, nss.conf > { > # Admin Server is installed; that is Config DS exists, which may be > # replaced with a new one in the RegDSDialogs > $orig_confdsid = getLocalConfigDS("$instconfigdir/admin-serv"); > $setup->{inf}->{slapd}->{ServerIdentifier} = $orig_confdsid; >- $setup->{inf}->{slapd}->{Instances} = \@instances; >+ $setup->{inf}->{slapd}->{config_dir} = $instconfigdir; >+ $setup->{inf}->{slapd}->{Instances} = \%instances; > $setup->{inf}->{General}->{ConfigDirectoryLdapURL} = $admConf->{ldapurl}; > $setup->{inf}->{General}->{ConfigDirectoryAdminID} = $admConf->{userdn}; > $setup->{inf}->{General}->{AdminDomain} = $admConf->{AdminDomain}; > $setup->{inf}->{General}->{SuiteSpotUserID} = $admConf->{SuiteSpotUserID}; >@@ -146,11 +269,12 @@ > $setup->doExit(1); > } > > $new_confdsid = $setup->{inf}->{slapd}->{ServerIdentifier}; >+ $new_confdir = $setup->{inf}->{slapd}->{config_dir}; > my $newinst = "slapd-$new_confdsid"; > my $inf = createInfFromConfig("$instconfigdir/$newinst", $newinst); >- if ( NULL == $inf ) >+ if ( ! $inf ) > { > $setup->msg($FATAL, 'error_create_inf_from_config', > "$instconfigdir/$newinst"); > $setup->doExit(1); >@@ -183,26 +307,32 @@ > $setup->{inf}->{General}->{ConfigDirectoryLdapURL} = "ldap://" . $fqdn . ":". $newport . "/o=NetscapeRoot"; > } > # Set the new inf to $setup->{inf} > $setup->{inf}->{slapd} = $inf->{slapd}; >+ $setup->{inf}->{slapd}->{config_dir} = $instconfigdir; >+ $setup->{inf}->{slapd}->{Instances} = \%instances; > } > else > { > # Admin Server is not set up. >- # @instances has more than one instance >+ # %instances has more than one instance > # note: this is orig_confdsid is just a candidate... >- ($orig_confdsid = $instances[0]) =~ s/slapd-(.*)/\1/; >+ my $orig_confdir = $instconfigdirs[0]; >+ my @orig_confdsids = @{$instances{$orig_confdir}}; >+ ($orig_confdsid = $orig_confdsids[0]) =~ s/slapd-(.*)/\1/; >+ > my $originst = "slapd-$orig_confdsid"; >- my $inf = createInfFromConfig("$instconfigdir/$originst", $originst); >- if ( NULL == $inf ) >+ my $inf = createInfFromConfig("$orig_confdir/$originst", $originst); >+ if ( ! $inf ) > { > $setup->msg($FATAL, 'error_create_inf_from_config', >- "$instconfigdir/$originst"); >+ "$orig_confdir/$originst"); > $setup->doExit(1); > } > $setup->{inf} = $inf; > $setup->{inf}->{slapd}->{ServerIdentifier} = $orig_confdsid; >- $setup->{inf}->{slapd}->{Instances} = \@instances; >+ $setup->{inf}->{slapd}->{config_dir} = $orig_confdir; >+ $setup->{inf}->{slapd}->{Instances} = \%instances; > > my $dialogmgr = new DialogManager($setup, $res, $TYPICAL); > > require RegDSDialogs; >@@ -219,20 +349,21 @@ > { > $setup->doExit(1); > } > $new_confdsid = $setup->{inf}->{slapd}->{ServerIdentifier}; >+ $new_confdir = $setup->{inf}->{slapd}->{config_dir}; > if ( $orig_confdsid ne $new_confdsid ) > { > my $newinst = "slapd-$new_confdsid"; > $inf = createInfFromConfig("$instconfigdir/$newinst", $newinst); >- if ( NULL == $inf ) >+ if ( ! $inf ) > { > $setup->msg($FATAL, 'error_create_inf_from_config', > "$instconfigdir/$newinst"); > $setup->doExit(1); > } > $setup->{inf}->{slapd} = $inf->{slapd}; >- $setup->{inf}->{slapd}->{Instances} = \@instances; >+ $setup->{inf}->{slapd}->{Instances} = \%instances; > } > $setup->{inf}->{General}->{ConfigDirectoryLdapURL} = "ldap://" . $fqdn . ":". $setup->{inf}->{slapd}->{ServerPort} . "/o=NetscapeRoot"; > > $dialogmgr->resetDialog(); >@@ -249,13 +380,15 @@ > } > $adminuid = $setup->{inf}->{General}->{ConfigDirectoryAdminID}; > } > >+ >+ > # Get the ConfigDS's rootDN password > print("\n==============================================================================\n"); > $setup->msg('register_new_confds', $new_confdsid); >-$setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup, >- 'input_rootdn_passwd', $new_confdsid); >+$setup->{inf}->{slapd}->{RootDNPwd} = >+ reg_get_passwd($setup, 'input_rootdn_passwd', $new_confdsid); > > if ( ($#admConfKeys >= 0 && ($orig_confdsid ne $new_confdsid)) || > $#admConfKeys < 0 ) > { >@@ -269,10 +402,10 @@ > { > goto out; > } > } >- $setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup, >- 'input_rootdn_passwd', $new_confdsid); >+ $setup->{inf}->{slapd}->{RootDNPwd} = >+ reg_get_passwd($setup, 'input_rootdn_passwd', $new_confdsid); > @errs = (); > } > out: > } >@@ -295,12 +428,17 @@ > } > > my $hassubinst = 0; > # Then, register the rest of the Directory Servers, if any >-my @subinstances = (); # array without the Config DS >-foreach my $subinst (@instances) >+my %subinstances = (); # hash without the Config DS >+%instances = %{$setup->{inf}->{slapd}->{Instances}}; >+foreach my $subconfdir (keys %instances) >+{ >+ my @subinsts = @{$instances{$subconfdir}}; >+ foreach my $subinst ( @subinsts ) > { >- if ( "$subinst" ne "slapd-" . $new_confdsid ) >+ if ( ("$subinst" ne "slapd-" . $new_confdsid) || >+ ($subconfdir ne $new_confdir) ) > { > if ( 0 == $hassubinst ) > { > $hassubinst = 1; >@@ -308,32 +446,49 @@ > $setup->msg('register_subds'); > } > my $subid = $subinst; > $subid =~ s/slapd-//; >- push(@subinstances, ($subinst)); >- my $subinf = createInfFromConfig("$instconfigdir/$subinst", $subinst); >- if ( NULL == $subinf ) >+ my $passwd = >+ reg_get_passwd($setup, 'input_rootdn_passwd_sub', $subid, $subid); >+ # if the password is not given, we don't register the server >+ next if ( "" eq $passwd || !$passwd ); >+ my $subinf = createInfFromConfig("$subconfdir/$subinst", $subinst); >+ if ( ! $subinf ) > { > $setup->msg($FATAL, 'error_create_inf_from_config', >- "$subinstconfigdir/$subinst"); >- $setup->doExit(1); >+ "$subconfdir/$subinst"); > } >+ else >+ { > $setup->{inf}->{slapd} = $subinf->{slapd}; >- $setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup, >- 'input_rootdn_passwd', $subid); >- while (createSubDS($setup->{inf}, \@errs)) >+ $setup->{inf}->{slapd}->{RootDNPwd} = $passwd; >+ push @{$subinstances{$subconfdir}}, $subinst; >+ $done = 0; >+ while ( !$done && !createSubDS($setup->{inf}, \@errs) ) > { > $setup->msg($FATAL, @errs); >- $setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup, >- 'input_rootdn_passwd', $subid); >+ $passwd = reg_get_passwd($setup, 'input_rootdn_passwd_sub', >+ $subid, $subid); >+ if ( "" eq $passwd || !$passwd ) >+ { >+ $done = 1; >+ pop @{$subinstances{$subconfdir}}; >+ } >+ else >+ { >+ $setup->{inf}->{slapd}->{RootDNPwd} = $passwd; >+ } >+ } >+ } > } > } > } > >-if ( $#subinstances >= 0 ) >+my @subkeys = keys %subinstances; >+if ( $#subkeys >= 0 ) > { > @errs = (); >- if ( !registerManyDSWithConfigDS($setup->{inf}, \@errs, $instconfigdir, @subinstances) ) >+ if ( !registerScatteredDSWithConfigDS($setup->{inf}, \@errs, \%subinstances) ) > { > $setup->msg($FATAL, @errs); > $setup->doExit(1); > } >Index: admserv/newinst/src/register-ds-admin.res.in >=================================================================== >RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/register-ds-admin.res.in,v >retrieving revision 1.1 >diff -t -w -U4 -r1.1 register-ds-admin.res.in >--- admserv/newinst/src/register-ds-admin.res.in 27 Jul 2007 01:42:46 -0000 1.1 >+++ admserv/newinst/src/register-ds-admin.res.in 22 Aug 2007 01:16:43 -0000 >@@ -1,17 +1,23 @@ > begin_ds_registration = Beginning registration of the Directory Server > > use_existing_configds_txt = Do you want to use this server as Configuration Directory Server?\n\n > >+subds_conf_prompt = The Directory Server locates its configuration file (dse.ldif) at %s/slapd-ID, by default. If you have Directory Server(s) which configuration file is put at the other location, you need to input it to register the server.\n\nIf you have such Directory Server, type the full path that stores the configuration file.\n\nIf you don't, type return.\n[configuration directory path or return]: >+ >+candidate_list_txt = Candidate servers to register:\n >+ > unregister_old_confds = Cleaning up old Config DS: %s\n > > register_new_confds = Registering new Config DS: %s\n > > register_subds = Registering Sub DSes: > > end_ds_registration = Finished registration of the Directory Server > >-input_rootdn_passwd = Please input the Directory Manager password on the server %s: >+input_rootdn_passwd = Input the Directory Server password on the server %s: >+ >+input_rootdn_passwd_sub = If you want to register the server %s, input the Directory Manager password on the server.\n\nIf you don't, type return.\n[Directory Manager password on %s or return]: > > input_admin_uid = Please input the password for the Administrator User ID: [%s] > > input_admin_passwd = Please input the password for the Administrator User %s:
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 253811
: 162024 |
162025
|
172383