[Fedora-directory-commits] adminserver/admserv/newinst/src RegDSDialogs.pm, NONE, 1.1 register-ds-admin.pl.in, NONE, 1.1 register-ds-admin.res.in, NONE, 1.1 AdminServer.pm.in, 1.7, 1.8 ConfigDSDialogs.pm, 1.5, 1.6 setup-ds-admin.res.in, 1.5, 1.6

Noriko Hosoi (nhosoi) fedora-directory-commits at redhat.com
Fri Jul 27 01:42:48 UTC 2007


Author: nhosoi

Update of /cvs/dirsec/adminserver/admserv/newinst/src
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20804/admserv/newinst/src

Modified Files:
	AdminServer.pm.in ConfigDSDialogs.pm setup-ds-admin.res.in 
Added Files:
	RegDSDialogs.pm register-ds-admin.pl.in 
	register-ds-admin.res.in 
Log Message:
resolves: #249739
Summary: Implement a script registering DS to the Configuration DS (comment #1-4)



--- NEW FILE RegDSDialogs.pm ---
# BEGIN COPYRIGHT BLOCK
# This Program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; version 2 of the License.
# 
# This Program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License along with
# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA.
# 
# In addition, as a special exception, Red Hat, Inc. gives You the additional
# right to link the code of this Program with code not covered under the GNU
# General Public License ("Non-GPL Code") and to distribute linked combinations
# including the two, subject to the limitations in this paragraph. Non-GPL Code
# permitted under this exception must only link to the code of this Program
# through those well defined interfaces identified in the file named EXCEPTION
# found in the source code files (the "Approved Interfaces"). The files of
# Non-GPL Code may instantiate templates or use macros or inline functions from
# the Approved Interfaces without causing the resulting work to be covered by
# the GNU General Public License. Only Red Hat, Inc. may make changes or
# additions to the list of Approved Interfaces. You must obey the GNU General
# Public License in all respects for all of the Program code and other code used
# in conjunction with the Program except the Non-GPL Code covered by this
# exception. If you modify this file, you may extend this exception to your
# version of the file, but you are not obligated to do so. If you do not wish to
# provide this exception without modification, you must delete this exception
# statement from your version and license this file solely under the GPL without
# exception. 
# 
# 
# Copyright (C) 2007 Red Hat, Inc.
# All rights reserved.
# END COPYRIGHT BLOCK
#

package RegDSDialogs;

use strict;

use DialogManager;
use Setup;
use Dialog;
use Util;

my $configdsinfo = new Dialog (
    $TYPICAL,
    'use_existing_configds_txt',
    sub {
        my $self = shift;
        my $servid = $self->{manager}->{inf}->{slapd}->{ServerIdentifier};
        return $servid;
    },
    sub {
        my $self = shift;
        my $ans = shift;
        my $index = shift;
        my $res = $DialogManager::SAME;
		$self->{manager}->setType($TYPICAL);
        if ($index == 0) {
            # validate serverIdentifier?
            foreach my $inst (@{$self->{manager}->{inf}->{slapd}->{Instances}})
            {
                if ( "$inst" eq "slapd-" . $ans )
                {
                    $self->{manager}->{inf}->{slapd}->{ServerIdentifier} = $ans;
                    $res = $DialogManager::NEXT;
                    goto out;
                }
            }
out:
            if ( $DialogManager::SAME == $res )
            {
                $self->{manager}->alert("error_configds_txt", $ans);
            }
            return $res;
        }
        return $res;
    },
    ['dialog_dsserverid_prompt']
);

sub getDialogs {
    return ($configdsinfo);
}

1;


--- NEW FILE register-ds-admin.pl.in ---
#!/usr/bin/env perl
# BEGIN COPYRIGHT BLOCK
# This Program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; version 2 of the License.
#
# This Program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA.
#
# In addition, as a special exception, Red Hat, Inc. gives You the additional
# right to link the code of this Program with code not covered under the GNU
# General Public License ("Non-GPL Code") and to distribute linked combinations
# including the two, subject to the limitations in this paragraph. Non-GPL Code
# permitted under this exception must only link to the code of this Program
# through those well defined interfaces identified in the file named EXCEPTION
# found in the source code files (the "Approved Interfaces"). The files of
# Non-GPL Code may instantiate templates or use macros or inline functions from
# the Approved Interfaces without causing the resulting work to be covered by
# the GNU General Public License. Only Red Hat, Inc. may make changes or
# additions to the list of Approved Interfaces. You must obey the GNU General
# Public License in all respects for all of the Program code and other code used
# in conjunction with the Program except the Non-GPL Code covered by this
# exception. If you modify this file, you may extend this exception to your
# version of the file, but you are not obligated to do so. If you do not wish to
# provide this exception without modification, you must delete this exception
# statement from your version and license this file solely under the GPL without
# exception.
#
#
# Copyright (C) 2007 Red Hat, Inc.
# All rights reserved.
# END COPYRIGHT BLOCK
#

use lib "@perldir@";

use File::Basename;
use Net::Domain qw(hostfqdn);

# Admin Setup modules
use AdminUtil;
use AdminServer;

# Directory Setup modules
use Resource;
use Setup;
use SetupLog;
use DialogManager;
use Inf;
use Util;

sub reg_get_passwd
{
    my $setup = shift;
    my $key = shift;
    my $value = shift;

    print("\n==============================================================================\n");
    $setup->msg(0, $key, $value);
    system("stty -echo");
    my $ans = <STDIN>;
    system("stty echo");
    print "\n";
    chop($ans);
    return $ans;
}

my $res = new Resource("@propertydir@/register-ds-admin.res",
                       "@propertydir@/setup-ds-admin.res",
                       "@propertydir@/setup-ds.res");

my $setup = new Setup($res);

$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);
	}
}
if ( $#instances < 0 )
{
    $setup->msg($FATAL, 'error_no_ds');
    $setup->doExit(1);
}

# 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 $adminuid = "";
my @errs = ();
my $fqdn = hostfqdn();

# set defaults
if ( $#admConfKeys >= 0 )
{
    # 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}->{General}->{ConfigDirectoryLdapURL} = $admConf->{ldapurl};
    $setup->{inf}->{General}->{ConfigDirectoryAdminID} = $admConf->{userdn};
    $setup->{inf}->{General}->{AdminDomain} = $admConf->{AdminDomain};
    $setup->{inf}->{General}->{SuiteSpotUserID} = $admConf->{SuiteSpotUserID};
    $setup->{inf}->{General}->{SuiteSpotGroup} = $admConf->{SuiteSpotGroup};
    ($setup->{inf}->{General}->{FullMachineName} = $admConf->{ldapurl}) =~
                                                   s/.*:\/\/(.*):[0-9]*\/.*/\1/;
    $setup->{inf}->{admin}->{SysUser} = $admConf->{sysuser};
    $adminuid = $admConf->{userdn};

    # read additional config from config DS
    my $pset = AdminUtil::getPset($admConf);
    if ($pset && %{$pset}) {
        $setup->{inf}->{admin}->{Port} = $pset->{"configuration.nsserverport"};
        $setup->{asorigport} = $pset->{"configuration.nsserverport"}; # save orig. port
        $setup->{inf}->{admin}->{ServerIpAddress} = $pset->{"configuration.nsserveraddress"};
    }
    my $admpw = AdminUtil::getAdmpw($admConf);
    if ($admpw && %{$admpw}) {
        $setup->{inf}->{admin}->{ServerAdminID} = $admpw->{ServerAdminID};
        $setup->{inf}->{admin}->{ServerAdminPwd} = $admpw->{ServerAdminPwd};
    }
    $setup->{reconfigas} = 1; # allow AS reconfig

    my $dialogmgr = new DialogManager($setup, $res, $TYPICAL);

    require RegDSDialogs;

    my @dialogs = RegDSDialogs->getDialogs();

    $dialogmgr->addDialog(@dialogs);

    my $rc = $dialogmgr->run();
    if ($rc)
    {
        $setup->doExit(1);
    }

    $new_confdsid = $setup->{inf}->{slapd}->{ServerIdentifier};
    my $newinst = "slapd-$new_confdsid";
    my $inf = createInfFromConfig("$instconfigdir/$newinst", $newinst);
    if ( NULL == $inf )
    {
        $setup->msg($FATAL, 'error_create_inf_from_config',
                                "$instconfigdir/$newinst");
        $setup->doExit(1);
    }

    if ( $orig_confdsid ne $new_confdsid )
    {
        # To switch to the new Config DS, unregister the old one
        print("\n==============================================================================\n");
        $setup->msg('unregister_old_confds', $orig_confdsid);
        # If we don't have it, prompt for the Admin password
        if (!$setup->{inf}->{General}->{ConfigDirectoryAdminPwd} ||
            "" eq $setup->{inf}->{General}->{ConfigDirectoryAdminPwd})
        {
            $ans = reg_get_passwd($setup, 'input_admin_passwd', $adminuid);
            $setup->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
        }
        while (!unregisterDSWithConfigDS($orig_confdsid, \@errs, $setup->{inf}))
        {
            $setup->msg($FATAL, 'error_unregister_ds', $orig_confdsid);
            $ans = reg_get_passwd($setup, 'input_admin_passwd', $adminuid);
            $setup->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
            @errs = ();
        }
        # updating the port number
        my $oldport = 0;
        my $newport = $inf->{slapd}->{ServerPort};
        ($oldport = $setup->{inf}->{General}->{ldapurl}) =~ s/.*:([0-9]*)\/.*/\1/;
        $setup->{inf}->{General}->{ldapurl} =~ s/$oldport/$newport/;
        $setup->{inf}->{General}->{ConfigDirectoryLdapURL} = "ldap://" . $fqdn . ":". $newport . "/o=NetscapeRoot";
    }
    # Set the new inf to $setup->{inf}
    $setup->{inf}->{slapd} = $inf->{slapd};
}
else
{
    # Admin Server is not set up.
    # @instances has more than one instance
    # note: this is orig_confdsid is just a candidate...
    ($orig_confdsid = $instances[0]) =~ s/slapd-(.*)/\1/;
    my $originst = "slapd-$orig_confdsid";
    my $inf = createInfFromConfig("$instconfigdir/$originst", $originst);
    if ( NULL == $inf )
    {
        $setup->msg($FATAL, 'error_create_inf_from_config',
                            "$instconfigdir/$originst");
        $setup->doExit(1);
    }
    $setup->{inf} = $inf;
    $setup->{inf}->{slapd}->{ServerIdentifier} = $orig_confdsid;
    $setup->{inf}->{slapd}->{Instances} = \@instances;

    my $dialogmgr = new DialogManager($setup, $res, $TYPICAL);

    require RegDSDialogs;
    require SetupDialogs;
    require ConfigDSDialogs;
    require ASDialogs;

    my @dialogs = RegDSDialogs->getDialogs();

    $dialogmgr->addDialog(@dialogs);

    my $rc = $dialogmgr->run();
    if ( $rc )
    {
        $setup->doExit(1);
    }
    $new_confdsid = $setup->{inf}->{slapd}->{ServerIdentifier};
    if ( $orig_confdsid ne $new_confdsid )
    {
        my $newinst = "slapd-$new_confdsid";
        $inf = createInfFromConfig("$instconfigdir/$newinst", $newinst);
        if ( NULL == $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}->{General}->{ConfigDirectoryLdapURL} = "ldap://" . $fqdn . ":". $setup->{inf}->{slapd}->{ServerPort} . "/o=NetscapeRoot";

    $dialogmgr->resetDialog();
    @dialogs = SetupDialogs->getRegDialogs();
    push @dialogs, ConfigDSDialogs->getRegDialogs();
    push @dialogs, ASDialogs->getDialogs();

    $dialogmgr->addDialog(@dialogs);

    $rc = $dialogmgr->run();
    if ( $rc )
    {
        $setup->doExit(1);
    }
    $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);

if ( ($#admConfKeys >= 0 && ($orig_confdsid ne $new_confdsid)) ||
      $#admConfKeys < 0 )
{
    @errs = ();
    # First, let's register the Configuration Directory itself
    while (!createConfigDS($setup->{inf}, \@errs))
    {
        foreach my $err (@errs)
        {
            if ( $err eq "suffix_already_exists" )
            {
                goto out;
            }
        }
        $setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup,
                                          'input_rootdn_passwd', $new_confdsid);
        @errs = ();
    }
out:
}

# If we don't have it, prompt for the Admin password
if (!$setup->{inf}->{General}->{ConfigDirectoryAdminPwd} ||
    "" eq $setup->{inf}->{General}->{ConfigDirectoryAdminPwd})
{
    $ans = reg_get_passwd($setup, 'input_admin_passwd', $adminuid);
    $setup->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
}

@errs = ();
while (!registerDSWithConfigDS($new_confdsid, \@errs, $setup->{inf}))
{
    $setup->msg($WARN, 'error_register_configds', $new_confdsid);
    $ans = reg_get_passwd($setup, 'input_admin_passwd', $adminuid);
    $setup->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
    @errs = ();
}

my $hassubinst = 0;
# Then, register the rest of the Directory Servers, if any
my @subinstances = ();    # array without the Config DS
foreach my $subinst (@instances)
{
    if ( "$subinst" ne "slapd-" . $new_confdsid )
    {
        if ( 0 == $hassubinst )
        {
            $hassubinst = 1;
            print("\n==============================================================================\n");
            $setup->msg('register_subds');
        }
        my $subid = $subinst;
        $subid =~ s/slapd-//;
        push(@subinstances, ($subinst));
        my $subinf = createInfFromConfig("$instconfigdir/$subinst", $subinst);
        if ( NULL == $subinf )
        {
            $setup->msg($FATAL, 'error_create_inf_from_config',
                                "$subinstconfigdir/$subinst");
            $setup->doExit(1);
        }
        $setup->{inf}->{slapd} = $subinf->{slapd};
        $setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup,
                                                 'input_rootdn_passwd', $subid);
        while (!createSubDS($setup->{inf}, \@errs))
        {
            $setup->msg($FATAL, @errs);
            $setup->msg($FATAL, 'error_create_configds');
            $setup->{inf}->{slapd}->{RootDNPwd} = reg_get_passwd($setup,
                                                 'input_rootdn_passwd', $subid);
        }
    }
}

if ( $#subinstances >= 0 )
{
    @errs = ();
    if ( !registerManyDSWithConfigDS($setup->{inf}, \@errs, $instconfigdir, @subinstances) )
    {
        $setup->msg($FATAL, @errs);
        $setup->doExit(1);
    }
}

# configure and register the admin server instance
# need these 3 values for ldapStart
$setup->{inf}->{slapd}->{ServerIdentifier} = $new_confdsid;
$setup->{inf}->{slapd}->{UseExistingMC} = "yes";
$setup->{inf}->{slapd}->{SlapdConfigForMC} = "yes";
if ( !$setup->{reconfigas} )
{
    if ( !createAdminServer($setup) )
    {
        $setup->msg($FATAL, 'error_create_adminserver');
        $setup->doExit(1);
    }
}
else
{
    if ( !reconfigAdminServer($setup) )
    {
        $setup->msg($FATAL, 'error_reconfig_adminserver');
        $setup->doExit(1);
    }
}
$setup->msg('end_ds_registration');

$setup->doExit(0);



--- NEW FILE register-ds-admin.res.in ---
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

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_admin_uid = Please input the password for the Administrator User ID: [%s]

input_admin_passwd = Please input the password for the Administrator User %s: 

input_userid = Please input the UNIX user id to run the server: [%s]

input_groupid = Please input the UNIX group id to run the server: [%s]

error_configds_txt = Error: the server ID %s does not exist.  Choose server ID existing on the host.\n

error_opening_instconfdir = Error: could not open config dir %s: %s\n\nDirectory Servers may not be set up yet.\nPlease run setup-ds-admin.pl.\nNote: once you run setup-ds-admin.pl, the server is automatically registered.\n

error_no_ds = Error: could not find a Directory Server instance.\n\nDirectory Server may not be set up yet.\nPlease run setup-ds-admin.pl.\nNote: once you run setup-ds-admin.pl, the server is automatically registered.\n

error_create_inf_from_config = Error: could not retrieve necessary info from %s.  Please check the file.\n

error_register_configds = Error: failed to register the configuration server info to the Configuration Directory Server %s.\n

error_register_subds = Error: failed to register the additional server info to the Configuration Directory Server %s.\n

error_unregister_ds = Error: failed to clean up the configuration info from the old Configuration\nDirectory Server %s.\n

error_connection_failed = Error: failed to open an LDAP connection.\n


Index: AdminServer.pm.in
===================================================================
RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminServer.pm.in,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- AdminServer.pm.in	24 Jul 2007 20:10:16 -0000	1.7
+++ AdminServer.pm.in	27 Jul 2007 01:42:46 -0000	1.8
@@ -189,9 +189,9 @@
 # This is how we extract the sie and isie as the as entries are
 # being added
 sub registercb {
-	my ($context, $entry, $errs) = @_;
+    my ($context, $entry, $errs) = @_;
 
-    my $rc = check_and_add_entry([$context->{conn}], $entry, $errs);
+    my $rc = check_and_add_entry([$context->{conn}, $context->{reconfig}], $entry, $errs);
     my $setup = $context->{setup};
     if ($rc) {
         if ($entry->hasValue('objectclass', 'nsApplication', 1)) {
@@ -218,6 +218,7 @@
     my $setup = shift;
     my $inf = $setup->{inf};
     my $configdir = shift;
+    my $reconfig = shift;
     my @errs;
 
     $setup->msg('registering_adminserver');
@@ -260,7 +261,7 @@
         $setup->msg($FATAL, 'error_updating_localconf', $localconf, $!);
         return 0;
     }
-    my $context = {conn => $conn, localfh => \*LOCALCONF, setup => $setup};
+    my $context = {conn => $conn, localfh => \*LOCALCONF, setup => $setup, reconfig => $reconfig};
     getMappedEntries($mapper, \@ldiffiles, \@errs, \&registercb, $context);
     close(LOCALCONF);
 
@@ -408,7 +409,7 @@
         return 0;
     }
 
-    if (!registerASWithConfigDS($setup, $configdir)) {
+    if (!registerASWithConfigDS($setup, $configdir, $reconfig)) {
         return 0;
     }
 


Index: ConfigDSDialogs.pm
===================================================================
RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/ConfigDSDialogs.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ConfigDSDialogs.pm	24 Jul 2007 20:10:16 -0000	1.5
+++ ConfigDSDialogs.pm	27 Jul 2007 01:42:46 -0000	1.6
@@ -167,6 +167,108 @@
     ['dialog_configdsinfo_ca_prompt']
 );
 
+my $regconfigdsinfo = new Dialog (
+    $EXPRESS,
+    'dialog_configdsinfo_text',
+    sub {
+        my $self = shift;
+        my $index = shift;
+        if ($index == 0) { # the url
+            my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
+            if (!defined($url)) {
+                my $host = $self->{manager}->{inf}->{General}->{FullMachineName} ||
+                    hostfqdn;
+                my $port = $self->{manager}->{inf}->{slapd}->{ServerPort} || 389;
+                if (!portAvailable($port)) {
+                    $port = getAvailablePort();
+                }
+                my $suffix = "o=NetscapeRoot";
+                $url = "ldap://$host:$port/$suffix";
+            }
+            return $url;
+        } elsif ($index == 1) { # the id
+            return $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} ||
+                "admin";
+        } elsif ($index == 2 || $index == 3) { # the password
+            return undef;
+        } elsif ($index == 4) { # admin domain
+            my $admindomain = $self->{manager}->{inf}->{General}->{AdminDomain};
+            if (!defined($admindomain)) {
+                $admindomain = $self->{manager}->{inf}->{General}->{FullMachineName} ||
+                    hostfqdn;
+                $admindomain =~ s/^[^\.]*\.//; # just the domain part
+            }
+            return $admindomain;
+        } else { # the CA cert
+            my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
+            my $cert = $self->{manager}->{inf}->{General}->{CACertificate};
+            if (($url !~ /^ldaps/) or $self->{manager}->{inf}->{General}->{certdb} or
+                ($cert =~ /^-----BEGIN CERTIFICATE-----/)) {
+                # not using LDAPS, or already have a certdb - hide CA prompt
+                $self->{prompts}->[5]->[2] = 1;
+            } else {
+                $self->{prompts}->[5]->[2] = 0; # unhide CA prompt
+            }
+            return $self->{manager}->{inf}->{General}->{CACertificate};
+        }
+    },
+    sub {
+        my $self = shift;
+        my $ans = shift;
+        my $index = shift;
+
+        my $res = $DialogManager::SAME;
+        if ($index == 0) {
+            # validate URL?
+            $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL} = $ans;
+            my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
+            if (($url !~ /^ldaps/) or $self->{manager}->{inf}->{General}->{certdb}) {
+                # not using LDAPS, or already have a certdb - hide CA prompt
+                $self->{prompts}->[5]->[2] = 1;
+            } else {
+                $self->{prompts}->[5]->[2] = 0; # unhide CA prompt
+            }
+            $res = $DialogManager::NEXT;
+        } elsif ($index == 1) { # id
+            $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} = $ans;
+            $res = $DialogManager::NEXT;
+        } elsif ($index == 2) { # pwd
+            my $test = $ans;
+            if ($test) {
+                $test =~ s/\s//g;
+            }
+            if (!$ans or (length($test) != length($ans))) {
+                $self->{manager}->alert("dialog_configdsadmin_invalid");
+            } else {
+                $self->{firstpassword} = $ans; # save for next index
+                $res = $DialogManager::NEXT;
+            }
+        } elsif ($index == 3) { # verify second password
+            if ($ans ne $self->{firstpassword}) {
+                $self->{manager}->alert("dialog_configdsadmin_nomatch");
+            } else {
+                $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
+                $res = $DialogManager::NEXT;
+            }
+        } elsif ($index == 4) { # admin domain
+            $self->{manager}->{inf}->{General}->{AdminDomain} = $ans;
+            $res = $DialogManager::NEXT;
+        } else { # CA cert filename
+            if ($ans && length($ans) &&
+                ($ans !~ /^-----BEGIN CERTIFICATE-----/) && ! -f $ans) {
+                $self->{manager}->alert("dialog_configdsinfo_ca_error", $ans);
+            } else {
+                $self->{manager}->{inf}->{General}->{CACertificate} = $ans;
+                $res = $DialogManager::NEXT;
+            }
+        }
+        return $res;
+    },
+    ['dialog_configdsinfo_url_prompt'], ['dialog_configdsinfo_id_prompt'],
+    ['dialog_configdsinfo_pwd_prompt', 1], ['dialog_configdsinfo_pwd2_prompt', 1],
+    ['dialog_configdsinfo_domain_prompt', 0, 0], ['dialog_configdsinfo_ca_prompt']
+);
+
 my $configdsadmin = new Dialog (
     $EXPRESS,
     'dialog_configdsadmin_text',
@@ -311,4 +413,8 @@
     return ($useconfigds, $configdsinfo, $configdsadmin, $configdsadmindomain);
 }
 
+sub getRegDialogs {
+    return ($regconfigdsinfo, $configdsadmindomain);
+}
+
 1;


Index: setup-ds-admin.res.in
===================================================================
RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/setup-ds-admin.res.in,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- setup-ds-admin.res.in	13 Jul 2007 18:39:15 -0000	1.5
+++ setup-ds-admin.res.in	27 Jul 2007 01:42:46 -0000	1.6
@@ -46,6 +46,7 @@
 dialog_configdsinfo_url_prompt = Configuration directory server URL
 dialog_configdsinfo_id_prompt = Configuration directory server admin ID
 dialog_configdsinfo_pwd_prompt = Configuration directory server admin password
+dialog_configdsinfo_pwd2_prompt = Configuration directory server admin password (confirm)
 dialog_configdsinfo_domain_prompt = Configuration directory server admin domain
 dialog_configdsinfo_ca_prompt = CA certificate filename
 dialog_configdsinfo_ca_error = '%s' is not a valid CA certificate file.  Please choose another one.\n\n
@@ -57,7 +58,7 @@
 dialog_configdsadmin_text = Please enter the administrator ID for the configuration directory\nserver.  This is the ID typically used to log in to the console.  You\nwill also be prompted for the password.\n\n
 dialog_configdsadmin_prompt = Configuration directory server\nadministrator ID
 dialog_configdsadmin_pw1_prompt = Password
-dialog_configdsadmin_pw2_prompt = Password (again)
+dialog_configdsadmin_pw2_prompt = Password (confirm)
 dialog_configdsadmin_error = The input '%s' is not a valid ID.  Please choose another one.\n\n
 dialog_configdsadmin_invalid = The password contains invalid characters.  Please choose another one.\n\n
 dialog_configdsadmin_nomatch = The passwords do not match.  Please try again.\n\n




More information about the 389-commits mailing list