This file is indexed.

/usr/lib/x86_64-linux-gnu/dirsrv/perl/DSUpdateDialogs.pm is in 389-ds-base 1.3.7.10-1ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# BEGIN COPYRIGHT BLOCK
# Copyright (C) 2009 Red Hat, Inc.
# All rights reserved.
#
# License: GPL (version 3 or any later version).
# See LICENSE for details. 
# END COPYRIGHT BLOCK
#

package DSUpdateDialogs;

use strict;

use DialogManager;
use Setup;
use Dialog;
use DSUtil;
use FileConn;

my @updateadmindialogs;

my $updatewelcome = new DialogYesNo (
    $EXPRESS,
    ['update_dialog_first', 'brand', 'brand'],
    1,
    sub {
        my $self = shift;
        my $ans = shift;
        my $res = $self->handleResponse($ans);
        if ($res == $DialogManager::NEXT) {
            $res = $DialogManager::ERR if (!$self->isYes());
        }
        return $res;
    },
    ['update_dialog_first_prompt'],
);

my $updatemode = new Dialog (
    $EXPRESS,
    'update_dialog_mode',
    sub {
        my $self = shift;
        return $self->{manager}->{inf}->{General}->{UpdateMode} ||
            'quit';
    },
    sub {
        my $self = shift;
        my $ans = shift;
        my $res = $DialogManager::ERR;

        if ($ans =~ /^off/i) {
            $self->{manager}->{inf}->{General}->{UpdateMode} = 'offline';
            $res = $DialogManager::NEXT;
            for (@updateadmindialogs) {
                $_->disable(); # don't need admins and passwords
            }
        } elsif ($ans =~ /^on/i) {
            $self->{manager}->{inf}->{General}->{UpdateMode} = 'online';
            $res = $DialogManager::NEXT;
            if (!@updateadmindialogs) {
                @updateadmindialogs = makeInstanceDialogs($self->{manager});
                $self->{manager}->addDialog(@updateadmindialogs);
            }
            for (@updateadmindialogs) {
                $_->enable(); # need admins and passwords
            }
        }
        return $res;
    },
    ['update_dialog_mode_prompt']
);

sub makeInstanceDialogs {
    my $manager = shift;
    # for each directory server instance, create a dialog that prompts
    # for the admin user and password for that instance
    # the default admin user for each instance is the rootdn for that
    # instance
    for my $inst ($manager->{setup}->getDirServers()) {
        my $innerinst = $inst;
        if (!$manager->{inf}->{$inst}->{RootDN}) {
            # if we don't already have an admin DN set for this
            # instance, look in the dse.ldif for the nsslapd-rootdn
            my $dseldif = $manager->{setup}->{configdir} . "/" . $inst . "/dse.ldif";
            my $conn = new FileConn($dseldif, 1);
            my $rootdn;
            if ($conn) {
                my $ent = $conn->search("cn=config", "base", '(objectclass=*)');
                if ($ent) {
                    $rootdn = $ent->getValue('nsslapd-rootdn');
                } else {
                    $manager->alert('error_finding_config_entry',
                                    "cn=config", $dseldif, $conn->getErrorString());
                }
                $conn->close();
            } else {
                $manager->alert('error_opening_dseldif', $dseldif, $!);
            }
            if ($rootdn) {
                $manager->{inf}->{$inst}->{RootDN} = $rootdn;
            } else {
                $manager->{inf}->{$inst}->{RootDN} = "cn=Directory Manager";
            }
        }
        my $dlg = new Dialog (
            $EXPRESS,
            ['update_admin_dialog', $innerinst],
            sub {
                my $self = shift;
                my $index = shift;
                my $id;
                if ($index == 0) { # return undef for password defaults
                    $id = $self->{manager}->{inf}->{$innerinst}->{RootDN};
                }
                return $id;
            },
            sub {
                my $self = shift;
                my $ans = shift;
                my $index = shift;

                my $res = $DialogManager::SAME;
                if ($index == 0) {
                    if (!isValidDN($ans)) {
                        $self->{manager}->alert("dialog_dsrootdn_error", $ans);
                    } else {
                        $self->{manager}->{inf}->{$innerinst}->{RootDN} = $ans;
                        $res = $DialogManager::NEXT;
                    }
                } else {
                    if (!$ans or !length($ans)) {
                        $self->{manager}->alert("dialog_dsrootpw_invalid");
                    } else {
                        $self->{manager}->{inf}->{$innerinst}->{RootDNPwd} = $ans;
                        $res = $DialogManager::NEXT;
                    }
                }
                return $res;
            },
            ['update_admin_id_prompt'], ['update_admin_pwd_prompt', 1]
        );
        push @updateadmindialogs, $dlg;
    }

    return @updateadmindialogs;
}

sub getDialogs {
    return ($updatewelcome, $updatemode);
}

1;