cloud-mu 3.6.9 → 3.6.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/Berksfile +2 -3
  3. data/Berksfile.lock +11 -14
  4. data/bin/mu-aws-setup +16 -4
  5. data/bin/mu-configure +2 -1
  6. data/cloud-mu.gemspec +2 -2
  7. data/cookbooks/mu-firewall/Berksfile +1 -1
  8. data/cookbooks/mu-firewall/attributes/default.rb +2 -2
  9. data/cookbooks/mu-firewall/metadata.rb +3 -3
  10. data/cookbooks/mu-firewall/recipes/default.rb +11 -2
  11. data/cookbooks/mu-master/Berksfile +1 -1
  12. data/cookbooks/mu-master/attributes/default.rb +14 -1
  13. data/cookbooks/mu-master/files/default/389ds-perl/ASDialogs.pm +173 -0
  14. data/cookbooks/mu-master/files/default/389ds-perl/AdminMigration.pm +569 -0
  15. data/cookbooks/mu-master/files/default/389ds-perl/AdminServer.pm +952 -0
  16. data/cookbooks/mu-master/files/default/389ds-perl/AdminUtil.pm +983 -0
  17. data/cookbooks/mu-master/files/default/389ds-perl/ConfigDSDialogs.pm +449 -0
  18. data/cookbooks/mu-master/files/default/389ds-perl/DSCreate.pm +1551 -0
  19. data/cookbooks/mu-master/files/default/389ds-perl/DSDialogs.pm +233 -0
  20. data/cookbooks/mu-master/files/default/389ds-perl/DSMigration.pm +1175 -0
  21. data/cookbooks/mu-master/files/default/389ds-perl/DSUpdate.pm +534 -0
  22. data/cookbooks/mu-master/files/default/389ds-perl/DSUpdateDialogs.pm +152 -0
  23. data/cookbooks/mu-master/files/default/389ds-perl/DSUtil.pm +1710 -0
  24. data/cookbooks/mu-master/files/default/389ds-perl/Dialog.pm +249 -0
  25. data/cookbooks/mu-master/files/default/389ds-perl/DialogManager.pm +212 -0
  26. data/cookbooks/mu-master/files/default/389ds-perl/FileConn.pm +461 -0
  27. data/cookbooks/mu-master/files/default/389ds-perl/Inf.pm +268 -0
  28. data/cookbooks/mu-master/files/default/389ds-perl/Migration.pm +327 -0
  29. data/cookbooks/mu-master/files/default/389ds-perl/RegDSDialogs.pm +94 -0
  30. data/cookbooks/mu-master/files/default/389ds-perl/Resource.pm +137 -0
  31. data/cookbooks/mu-master/files/default/389ds-perl/Setup.pm +240 -0
  32. data/cookbooks/mu-master/files/default/389ds-perl/SetupDialogs.pm +243 -0
  33. data/cookbooks/mu-master/files/default/389ds-perl/SetupLog.pm +82 -0
  34. data/cookbooks/mu-master/files/default/setCertName.ldif +4 -0
  35. data/cookbooks/mu-master/libraries/mu.rb +2 -2
  36. data/cookbooks/mu-master/metadata.rb +1 -1
  37. data/cookbooks/mu-master/recipes/389ds.rb +71 -32
  38. data/cookbooks/mu-master/recipes/basepackages.rb +5 -0
  39. data/cookbooks/mu-master/recipes/default.rb +16 -5
  40. data/cookbooks/mu-master/recipes/init.rb +59 -4
  41. data/cookbooks/mu-master/recipes/ssl-certs.rb +6 -0
  42. data/cookbooks/mu-master/recipes/sssd.rb +85 -62
  43. data/cookbooks/mu-master/recipes/update_nagios_only.rb +7 -1
  44. data/cookbooks/mu-master/templates/default/389-directory-setup.inf.erb +11 -26
  45. data/cookbooks/mu-master/templates/default/sssd.conf.erb +18 -8
  46. data/cookbooks/mu-tools/files/default/Mu_CA.pem +33 -0
  47. data/cookbooks/mu-tools/metadata.rb +0 -1
  48. data/cookbooks/mu-tools/recipes/set_local_fw.rb +7 -1
  49. data/cookbooks/mu-tools/templates/amazon/sshd_config.erb +5 -1
  50. data/cookbooks/nagios/CHANGELOG.md +679 -0
  51. data/cookbooks/nagios/LICENSE +201 -0
  52. data/cookbooks/nagios/README.md +340 -0
  53. data/cookbooks/nagios/attributes/config.rb +163 -0
  54. data/cookbooks/nagios/attributes/default.rb +204 -0
  55. data/cookbooks/nagios/libraries/base.rb +311 -0
  56. data/cookbooks/nagios/libraries/command.rb +68 -0
  57. data/cookbooks/nagios/libraries/contact.rb +229 -0
  58. data/cookbooks/nagios/libraries/contactgroup.rb +111 -0
  59. data/cookbooks/{firewall/recipes/disable_firewall.rb → nagios/libraries/custom_option.rb} +20 -7
  60. data/cookbooks/nagios/libraries/data_bag_helper.rb +23 -0
  61. data/cookbooks/nagios/libraries/default.rb +90 -0
  62. data/cookbooks/nagios/libraries/helpers.rb +229 -0
  63. data/cookbooks/nagios/libraries/host.rb +410 -0
  64. data/cookbooks/nagios/libraries/hostdependency.rb +178 -0
  65. data/cookbooks/nagios/libraries/hostescalation.rb +170 -0
  66. data/cookbooks/nagios/libraries/hostgroup.rb +117 -0
  67. data/cookbooks/nagios/libraries/nagios.rb +277 -0
  68. data/cookbooks/nagios/libraries/resource.rb +59 -0
  69. data/cookbooks/nagios/libraries/service.rb +449 -0
  70. data/cookbooks/nagios/libraries/servicedependency.rb +213 -0
  71. data/cookbooks/nagios/libraries/serviceescalation.rb +193 -0
  72. data/cookbooks/nagios/libraries/servicegroup.rb +142 -0
  73. data/cookbooks/nagios/libraries/timeperiod.rb +159 -0
  74. data/cookbooks/nagios/libraries/users_helper.rb +54 -0
  75. data/cookbooks/nagios/metadata.json +44 -0
  76. data/cookbooks/nagios/metadata.rb +22 -0
  77. data/cookbooks/nagios/recipes/_load_databag_config.rb +153 -0
  78. data/cookbooks/nagios/recipes/_load_default_config.rb +241 -0
  79. data/cookbooks/nagios/recipes/apache.rb +114 -0
  80. data/cookbooks/nagios/recipes/default.rb +41 -0
  81. data/cookbooks/nagios/recipes/nginx.rb +114 -0
  82. data/cookbooks/nagios/recipes/pagerduty.rb +95 -0
  83. data/cookbooks/nagios/recipes/server.rb +182 -0
  84. data/cookbooks/nagios/recipes/server_package.rb +85 -0
  85. data/cookbooks/nagios/recipes/server_source.rb +137 -0
  86. data/cookbooks/nagios/resources/command.rb +34 -0
  87. data/cookbooks/nagios/resources/conf.rb +52 -0
  88. data/cookbooks/nagios/resources/contact.rb +34 -0
  89. data/cookbooks/nagios/resources/contactgroup.rb +35 -0
  90. data/cookbooks/nagios/resources/host.rb +35 -0
  91. data/cookbooks/nagios/resources/hostdependency.rb +35 -0
  92. data/cookbooks/nagios/resources/hostescalation.rb +36 -0
  93. data/cookbooks/nagios/resources/hostgroup.rb +35 -0
  94. data/cookbooks/nagios/resources/resource.rb +34 -0
  95. data/cookbooks/nagios/resources/service.rb +35 -0
  96. data/cookbooks/nagios/resources/servicedependency.rb +35 -0
  97. data/cookbooks/nagios/resources/serviceescalation.rb +35 -0
  98. data/cookbooks/nagios/resources/servicegroup.rb +35 -0
  99. data/cookbooks/nagios/resources/timeperiod.rb +35 -0
  100. data/cookbooks/nagios/templates/apache2.conf.erb +102 -0
  101. data/cookbooks/nagios/templates/cgi.cfg.erb +266 -0
  102. data/cookbooks/nagios/templates/commands.cfg.erb +13 -0
  103. data/cookbooks/nagios/templates/contacts.cfg.erb +37 -0
  104. data/cookbooks/nagios/templates/hostgroups.cfg.erb +25 -0
  105. data/cookbooks/nagios/templates/hosts.cfg.erb +15 -0
  106. data/cookbooks/nagios/templates/htpasswd.users.erb +6 -0
  107. data/cookbooks/nagios/templates/nagios.cfg.erb +22 -0
  108. data/cookbooks/nagios/templates/nginx.conf.erb +80 -0
  109. data/cookbooks/nagios/templates/pagerduty.cgi.erb +185 -0
  110. data/cookbooks/nagios/templates/resource.cfg.erb +27 -0
  111. data/cookbooks/nagios/templates/servicedependencies.cfg.erb +15 -0
  112. data/cookbooks/nagios/templates/servicegroups.cfg.erb +14 -0
  113. data/cookbooks/nagios/templates/services.cfg.erb +14 -0
  114. data/cookbooks/nagios/templates/spawn-fcgi.erb +10 -0
  115. data/cookbooks/nagios/templates/templates.cfg.erb +31 -0
  116. data/cookbooks/nagios/templates/timeperiods.cfg.erb +13 -0
  117. data/extras/platform_berksfile_base +3 -3
  118. data/extras/python_rpm/build.sh +4 -4
  119. data/extras/python_rpm/muthon.spec +2 -4
  120. data/extras/vault_tools/export_vaults.sh +11 -1
  121. data/install/installer +1 -1
  122. data/modules/mu/kittens.rb +27523 -0
  123. data/modules/mu/master/ldap.rb +48 -31
  124. data/modules/mu/master.rb +69 -0
  125. data/modules/mu/mu.yaml.rb +351 -0
  126. data/modules/mu/providers/aws/firewall_rule.rb +3 -1
  127. data/modules/mu/providers/aws.rb +27 -19
  128. data/modules/mu/providers/google.rb +1 -1
  129. data/modules/mu.rb +5 -4
  130. metadata +99 -48
  131. data/cookbooks/firewall/CHANGELOG.md +0 -488
  132. data/cookbooks/firewall/LICENSE +0 -202
  133. data/cookbooks/firewall/README.md +0 -366
  134. data/cookbooks/firewall/TODO.md +0 -6
  135. data/cookbooks/firewall/attributes/default.rb +0 -5
  136. data/cookbooks/firewall/attributes/firewalld.rb +0 -8
  137. data/cookbooks/firewall/attributes/iptables.rb +0 -17
  138. data/cookbooks/firewall/attributes/ufw.rb +0 -12
  139. data/cookbooks/firewall/attributes/windows.rb +0 -8
  140. data/cookbooks/firewall/libraries/helpers.rb +0 -105
  141. data/cookbooks/firewall/libraries/helpers_firewalld.rb +0 -116
  142. data/cookbooks/firewall/libraries/helpers_firewalld_dbus.rb +0 -72
  143. data/cookbooks/firewall/libraries/helpers_iptables.rb +0 -112
  144. data/cookbooks/firewall/libraries/helpers_nftables.rb +0 -170
  145. data/cookbooks/firewall/libraries/helpers_ufw.rb +0 -142
  146. data/cookbooks/firewall/libraries/helpers_windows.rb +0 -129
  147. data/cookbooks/firewall/libraries/provider_firewall_firewalld.rb +0 -179
  148. data/cookbooks/firewall/libraries/provider_firewall_iptables.rb +0 -171
  149. data/cookbooks/firewall/libraries/provider_firewall_iptables_ubuntu.rb +0 -200
  150. data/cookbooks/firewall/libraries/provider_firewall_iptables_ubuntu1404.rb +0 -200
  151. data/cookbooks/firewall/libraries/provider_firewall_rule.rb +0 -34
  152. data/cookbooks/firewall/libraries/provider_firewall_ufw.rb +0 -138
  153. data/cookbooks/firewall/libraries/provider_firewall_windows.rb +0 -126
  154. data/cookbooks/firewall/libraries/resource_firewall.rb +0 -26
  155. data/cookbooks/firewall/libraries/resource_firewall_rule.rb +0 -52
  156. data/cookbooks/firewall/metadata.json +0 -40
  157. data/cookbooks/firewall/metadata.rb +0 -15
  158. data/cookbooks/firewall/recipes/default.rb +0 -76
  159. data/cookbooks/firewall/recipes/firewalld.rb +0 -87
  160. data/cookbooks/firewall/resources/firewalld.rb +0 -28
  161. data/cookbooks/firewall/resources/firewalld_config.rb +0 -39
  162. data/cookbooks/firewall/resources/firewalld_helpers.rb +0 -106
  163. data/cookbooks/firewall/resources/firewalld_icmptype.rb +0 -88
  164. data/cookbooks/firewall/resources/firewalld_ipset.rb +0 -104
  165. data/cookbooks/firewall/resources/firewalld_policy.rb +0 -115
  166. data/cookbooks/firewall/resources/firewalld_service.rb +0 -98
  167. data/cookbooks/firewall/resources/firewalld_zone.rb +0 -118
  168. data/cookbooks/firewall/resources/nftables.rb +0 -71
  169. data/cookbooks/firewall/resources/nftables_rule.rb +0 -113
  170. data/cookbooks/firewall/templates/default/ufw/default.erb +0 -13
  171. /data/cookbooks/{firewall → nagios}/chefignore +0 -0
  172. /data/cookbooks/{firewall → nagios}/renovate.json +0 -0
@@ -0,0 +1,449 @@
1
+ # BEGIN COPYRIGHT BLOCK
2
+ # This Program is free software; you can redistribute it and/or modify it under
3
+ # the terms of the GNU General Public License as published by the Free Software
4
+ # Foundation; version 2 of the License.
5
+ #
6
+ # This Program is distributed in the hope that it will be useful, but WITHOUT
7
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9
+ #
10
+ # You should have received a copy of the GNU General Public License along with
11
+ # this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
12
+ # Place, Suite 330, Boston, MA 02111-1307 USA.
13
+ #
14
+ # Copyright (C) 2007 Red Hat, Inc.
15
+ # All rights reserved.
16
+ # END COPYRIGHT BLOCK
17
+ #
18
+
19
+ package ConfigDSDialogs;
20
+
21
+ use strict;
22
+
23
+ use Sys::Hostname;
24
+ use DialogManager;
25
+ use Setup;
26
+ use Dialog;
27
+ use DSUtil;
28
+
29
+ use Mozilla::LDAP::API qw(ldap_explode_dn);
30
+
31
+ sub verifyConfigDSInfo {
32
+ my $self = shift;
33
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
34
+ my $certdir;
35
+ my @errs;
36
+ if ($url =~ /^ldaps/) {
37
+ if (!$self->{manager}->{inf}->{General}->{certdb} and
38
+ !$self->{manager}->{inf}->{General}->{CACertificate}) {
39
+ return ('dialog_configdsinfo_nocacert');
40
+ }
41
+ if (!$self->{manager}->{inf}->{General}->{certdb}) {
42
+ (@errs) = AdminUtil::importCACert($self->{manager}->{setup}->{configdir} . "/admin-serv",
43
+ $self->{manager}->{inf}->{General}->{CACertificate});
44
+ if (@errs) {
45
+ return @errs;
46
+ }
47
+ }
48
+ }
49
+ my $conn = AdminUtil::getConfigDSConn($url,
50
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID},
51
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminPwd},
52
+ $self->{manager}->{setup}->{configdir}, \@errs);
53
+ if (@errs or !$conn) {
54
+ $conn->close() if ($conn);
55
+ return @errs if (@errs);
56
+ return ('dialog_configdsinfo_unreachable', $url);
57
+ }
58
+
59
+ (@errs) = AdminUtil::verifyAdminDomain($conn, $url,
60
+ $self->{manager}->{inf}->{General}->{AdminDomain});
61
+
62
+ $conn->close();
63
+
64
+ return @errs;
65
+ }
66
+
67
+ my $configdsinfo = new Dialog (
68
+ $EXPRESS,
69
+ 'dialog_configdsinfo_text',
70
+ sub {
71
+ my $self = shift;
72
+ my $index = shift;
73
+ if ($index == 0) { # the url
74
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
75
+ if (!defined($url)) {
76
+ my $host = $self->{manager}->{inf}->{General}->{FullMachineName} ||
77
+ hostname();
78
+ my $port = $self->{manager}->{inf}->{slapd}->{ServerPort} || 389;
79
+ if (!portAvailable($port)) {
80
+ $port = getAvailablePort();
81
+ }
82
+ my $suffix = "o=NetscapeRoot";
83
+ $url = "ldap://$host:$port/$suffix";
84
+ }
85
+ return $url;
86
+ } elsif ($index == 1) { # the id
87
+ return $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} ||
88
+ "admin";
89
+ } elsif ($index == 2) { # the password
90
+ return undef;
91
+ } elsif ($index == 3) { # admin domain
92
+ my $admindomain = $self->{manager}->{inf}->{General}->{AdminDomain};
93
+ if (!defined($admindomain)) {
94
+ $admindomain = $self->{manager}->{inf}->{General}->{FullMachineName} ||
95
+ hostname();
96
+ $admindomain =~ s/^[^\.]*\.//; # just the domain part
97
+ }
98
+ return $admindomain;
99
+ } else { # the CA cert
100
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
101
+ my $cert = $self->{manager}->{inf}->{General}->{CACertificate};
102
+ if (($url !~ /^ldaps/) or $self->{manager}->{inf}->{General}->{certdb} or
103
+ ($cert =~ /^-----BEGIN CERTIFICATE-----/)) {
104
+ # not using LDAPS, or already have a certdb - hide CA prompt
105
+ $self->{prompts}->[4]->[2] = 1;
106
+ } else {
107
+ $self->{prompts}->[4]->[2] = 0; # unhide CA prompt
108
+ }
109
+ return $self->{manager}->{inf}->{General}->{CACertificate};
110
+ }
111
+ },
112
+ sub {
113
+ my $self = shift;
114
+ my $ans = shift;
115
+ my $index = shift;
116
+ my $res = $DialogManager::SAME;
117
+ if ($index == 0) {
118
+ # validate URL?
119
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL} = $ans;
120
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
121
+ if (($url !~ /^ldaps/) or $self->{manager}->{inf}->{General}->{certdb}) {
122
+ # not using LDAPS, or already have a certdb - hide CA prompt
123
+ $self->{prompts}->[4]->[2] = 1;
124
+ } else {
125
+ $self->{prompts}->[4]->[2] = 0; # unhide CA prompt
126
+ }
127
+ $res = $DialogManager::NEXT;
128
+ } elsif ($index == 1) { # id
129
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} = $ans;
130
+ $res = $DialogManager::NEXT;
131
+ } elsif ($index == 2) { # pwd
132
+ my $test = $ans;
133
+ if ($test) {
134
+ $test =~ s/\s//g;
135
+ }
136
+ if (!$ans or (length($test) != length($ans))) {
137
+ $self->{manager}->alert("dialog_configdsadmin_invalid");
138
+ } else {
139
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
140
+ $res = $DialogManager::NEXT;
141
+ }
142
+ } elsif ($index == 3) { # admin domain
143
+ $self->{manager}->{inf}->{General}->{AdminDomain} = $ans;
144
+ $res = $DialogManager::NEXT;
145
+ } else { # CA cert filename
146
+ if ($ans && length($ans) &&
147
+ ($ans !~ /^-----BEGIN CERTIFICATE-----/) && ! -f $ans) {
148
+ $self->{manager}->alert("dialog_configdsinfo_ca_error", $ans);
149
+ } else {
150
+ $self->{manager}->{inf}->{General}->{CACertificate} = $ans;
151
+ $res = $DialogManager::NEXT;
152
+ }
153
+ }
154
+
155
+ if (($index == 4) && ($res == $DialogManager::NEXT)) {
156
+ my (@text) = verifyConfigDSInfo($self);
157
+ if (@text) {
158
+ $self->{manager}->alert(@text);
159
+ $self->{manager}->alert('dialog_configdsinfo_tryagain');
160
+ $res = $DialogManager::FIRST;
161
+ }
162
+ }
163
+ return $res;
164
+ },
165
+ ['dialog_configdsinfo_url_prompt'], ['dialog_configdsinfo_id_prompt'],
166
+ ['dialog_configdsinfo_pwd_prompt', 1], ['dialog_configdsinfo_domain_prompt'],
167
+ ['dialog_configdsinfo_ca_prompt']
168
+ );
169
+
170
+ my $regconfigdsinfo = new Dialog (
171
+ $EXPRESS,
172
+ 'dialog_configdsinfo_text',
173
+ sub {
174
+ my $self = shift;
175
+ my $index = shift;
176
+ if ($index == 0) { # the url
177
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
178
+ if (!defined($url)) {
179
+ my $host = $self->{manager}->{inf}->{General}->{FullMachineName} ||
180
+ hostname();
181
+ my $port = $self->{manager}->{inf}->{slapd}->{ServerPort} || 389;
182
+ if (!portAvailable($port)) {
183
+ $port = getAvailablePort();
184
+ }
185
+ my $suffix = "o=NetscapeRoot";
186
+ $url = "ldap://$host:$port/$suffix";
187
+ }
188
+ return $url;
189
+ } elsif ($index == 1) { # the id
190
+ return $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} ||
191
+ "admin";
192
+ } elsif ($index == 2 || $index == 3) { # the password
193
+ return undef;
194
+ } elsif ($index == 4) { # admin domain
195
+ my $admindomain = $self->{manager}->{inf}->{General}->{AdminDomain};
196
+ if (!defined($admindomain)) {
197
+ $admindomain = $self->{manager}->{inf}->{General}->{FullMachineName} ||
198
+ hostname();
199
+ $admindomain =~ s/^[^\.]*\.//; # just the domain part
200
+ }
201
+ return $admindomain;
202
+ } else { # the CA cert
203
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
204
+ my $cert = $self->{manager}->{inf}->{General}->{CACertificate};
205
+ if (($url !~ /^ldaps/) or $self->{manager}->{inf}->{General}->{certdb} or
206
+ ($cert =~ /^-----BEGIN CERTIFICATE-----/)) {
207
+ # not using LDAPS, or already have a certdb - hide CA prompt
208
+ $self->{prompts}->[5]->[2] = 1;
209
+ } else {
210
+ $self->{prompts}->[5]->[2] = 0; # unhide CA prompt
211
+ }
212
+ return $self->{manager}->{inf}->{General}->{CACertificate};
213
+ }
214
+ },
215
+ sub {
216
+ my $self = shift;
217
+ my $ans = shift;
218
+ my $index = shift;
219
+
220
+ my $res = $DialogManager::SAME;
221
+ if ($index == 0) {
222
+ # validate URL?
223
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL} = $ans;
224
+ my $url = $self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL};
225
+ if (($url !~ /^ldaps/) or $self->{manager}->{inf}->{General}->{certdb}) {
226
+ # not using LDAPS, or already have a certdb - hide CA prompt
227
+ $self->{prompts}->[5]->[2] = 1;
228
+ } else {
229
+ $self->{prompts}->[5]->[2] = 0; # unhide CA prompt
230
+ }
231
+ $res = $DialogManager::NEXT;
232
+ } elsif ($index == 1) { # id
233
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} = $ans;
234
+ $res = $DialogManager::NEXT;
235
+ } elsif ($index == 2) { # pwd
236
+ my $test = $ans;
237
+ if ($test) {
238
+ $test =~ s/\s//g;
239
+ }
240
+ if (!$ans or (length($test) != length($ans))) {
241
+ $self->{manager}->alert("dialog_configdsadmin_invalid");
242
+ } else {
243
+ $self->{firstpassword} = $ans; # save for next index
244
+ $res = $DialogManager::NEXT;
245
+ }
246
+ } elsif ($index == 3) { # verify second password
247
+ if ($ans ne $self->{firstpassword}) {
248
+ $self->{manager}->alert("dialog_configdsadmin_nomatch");
249
+ } else {
250
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
251
+ $res = $DialogManager::NEXT;
252
+ }
253
+ } elsif ($index == 4) { # admin domain
254
+ $self->{manager}->{inf}->{General}->{AdminDomain} = $ans;
255
+ $res = $DialogManager::NEXT;
256
+ } else { # CA cert filename
257
+ if ($ans && length($ans) &&
258
+ ($ans !~ /^-----BEGIN CERTIFICATE-----/) && ! -f $ans) {
259
+ $self->{manager}->alert("dialog_configdsinfo_ca_error", $ans);
260
+ } else {
261
+ $self->{manager}->{inf}->{General}->{CACertificate} = $ans;
262
+ $res = $DialogManager::NEXT;
263
+ }
264
+ }
265
+ return $res;
266
+ },
267
+ ['dialog_configdsinfo_url_prompt'], ['dialog_configdsinfo_id_prompt'],
268
+ ['dialog_configdsinfo_pwd_prompt', 1], ['dialog_configdsinfo_pwd2_prompt', 1],
269
+ ['dialog_configdsinfo_domain_prompt', 0, 0], ['dialog_configdsinfo_ca_prompt']
270
+ );
271
+
272
+ my $configdsadmin = new Dialog (
273
+ $EXPRESS,
274
+ 'dialog_configdsadmin_text',
275
+ sub {
276
+ my $self = shift;
277
+ my $index = shift;
278
+ my $id;
279
+ if ($index == 0) { # return undef for password defaults
280
+ $id = $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID};
281
+ if (!defined($id)) {
282
+ $id = "admin";
283
+ } elsif (isValidDN($id)) { # must be a uid for this dialog
284
+ my @rdns = ldap_explode_dn($id, 1);
285
+ $id = $rdns[0];
286
+ }
287
+ }
288
+ return $id;
289
+ },
290
+ sub {
291
+ my $self = shift;
292
+ my $ans = shift;
293
+ my $index = shift;
294
+ my $res = $DialogManager::SAME;
295
+ if ($index == 0) { # verify DN
296
+ if (($ans =~ /[\x00-\x20\x22\x2b\x2c\x3d\x5c\x7f\x80-\xff]/) && !isValidDN($ans)) {
297
+ $self->{manager}->alert("dialog_configdsadmin_error", $ans);
298
+ } else {
299
+ $res = $DialogManager::NEXT;
300
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminID} = $ans;
301
+ }
302
+ } elsif ($index == 1) { # verify initial password
303
+ if ($ans =~ /[\x80-\xff]/) {
304
+ $self->{manager}->alert("dialog_configdsadmin_invalid");
305
+ } else {
306
+ my $test = $ans;
307
+ if ($test) {
308
+ $test =~ s/\s//g;
309
+ }
310
+ if (!$ans or (length($test) != length($ans))) {
311
+ $self->{manager}->alert("dialog_configdsadmin_invalid");
312
+ } else {
313
+ $res = $DialogManager::NEXT;
314
+ $self->{firstpassword} = $ans; # save for next index
315
+ }
316
+ }
317
+ } elsif ($index == 2) { # verify second password
318
+ if ($ans =~ /[\x80-\xff]/) {
319
+ $self->{manager}->alert("dialog_configdsadmin_invalid");
320
+ } else {
321
+ if ($ans ne $self->{firstpassword}) {
322
+ $self->{manager}->alert("dialog_configdsadmin_nomatch");
323
+ } else {
324
+ $self->{manager}->{inf}->{General}->{ConfigDirectoryAdminPwd} = $ans;
325
+ $res = $DialogManager::NEXT;
326
+ }
327
+ }
328
+ }
329
+ return $res;
330
+ },
331
+ ['dialog_configdsadmin_prompt'], ['dialog_configdsadmin_pw1_prompt', 1], ['dialog_configdsadmin_pw2_prompt', 1]
332
+ );
333
+
334
+ my $configdsadmindomain = new Dialog (
335
+ $TYPICAL,
336
+ 'dialog_configdsadmindomain_text',
337
+ sub {
338
+ my $self = shift;
339
+ my $admindomain = $self->{manager}->{inf}->{General}->{AdminDomain};
340
+ if (!defined($admindomain)) {
341
+ $admindomain = $self->{manager}->{inf}->{General}->{FullMachineName} ||
342
+ hostname();
343
+ $admindomain =~ s/^[^\.]*\.//; # just the domain part
344
+ }
345
+ return $admindomain;
346
+ },
347
+ sub {
348
+ my $self = shift;
349
+ my $ans = shift;
350
+ my $res = $DialogManager::SAME;
351
+ if ($ans =~ /[\x00-\x20\x22\x2b\x2c\x3d\x5c\x7f\x80-\xff]/) {
352
+ $self->{manager}->alert("dialog_configdsadmindomain_error", $ans);
353
+ } elsif (isValidDN($ans)) {
354
+ $self->{manager}->alert("dialog_configdsadmindomain_notadn", $ans);
355
+ } else {
356
+ $res = $DialogManager::NEXT;
357
+ $self->{manager}->{inf}->{General}->{AdminDomain} = $ans;
358
+ }
359
+ return $res;
360
+ },
361
+ ['dialog_configdsadmindomain_prompt']
362
+ );
363
+
364
+ my $useconfigds = new DialogYesNo (
365
+ $EXPRESS,
366
+ 'dialog_useconfigds_text',
367
+ sub {
368
+ my $self = shift;
369
+ my $yes = $self->{"manager"}->getText("yes");
370
+ my $nno = $self->{"manager"}->getText("no");
371
+ my $ret = 0;
372
+ if ((defined($self->{manager}->{inf}->{slapd}->{SlapdConfigForMC}) and
373
+ ($yes =~ /^$self->{manager}->{inf}->{slapd}->{SlapdConfigForMC}/i)) or
374
+ (defined($self->{manager}->{inf}->{slapd}->{UseExistingMC}) and
375
+ !$self->{manager}->{inf}->{slapd}->{UseExistingMC})) {
376
+ # we have to set up the directory server as the config ds
377
+ $self->{manager}->{inf}->{slapd}->{SlapdConfigForMC} = "yes";
378
+ $self->{manager}->{inf}->{slapd}->{UseExistingMC} = 0;
379
+ $ret = 0; # explicitly create the config ds
380
+ } elsif (defined($self->{manager}->{inf}->{General}->{ConfigDirectoryLdapURL})) {
381
+ $ret = 1; # use an existing config ds and register the servers with that one
382
+ } elsif (!defined($self->{manager}->{inf}->{slapd}->{SlapdConfigForMC}) and
383
+ !defined($self->{manager}->{inf}->{slapd}->{UseExistingMC})) {
384
+ $ret = 0; # implicitly create the config ds
385
+ } else {
386
+ $ret = 1; # use an existing config ds and register the servers with that one
387
+ if (exists($self->{manager}->{inf}->{slapd}->{SlapdConfigForMC})) {
388
+ delete $self->{manager}->{inf}->{slapd}->{SlapdConfigForMC};
389
+ }
390
+ $self->{manager}->{inf}->{slapd}->{UseExistingMC} = 1;
391
+ }
392
+ return $ret;
393
+ },
394
+ sub {
395
+ my $self = shift;
396
+ my $ans = shift;
397
+ my $res = $self->handleResponse($ans);
398
+ if ($res == $DialogManager::NEXT) {
399
+ if ($self->isYes()) {
400
+ if (exists($self->{manager}->{inf}->{slapd}->{SlapdConfigForMC})) {
401
+ delete $self->{manager}->{inf}->{slapd}->{SlapdConfigForMC};
402
+ }
403
+ $self->{manager}->{inf}->{slapd}->{UseExistingMC} = 1;
404
+ $configdsinfo->enable(); # use it
405
+ $configdsadmin->disable();
406
+ $configdsadmindomain->disable();
407
+ } else {
408
+ $self->{manager}->{inf}->{slapd}->{SlapdConfigForMC} = "yes";
409
+ $self->{manager}->{inf}->{slapd}->{UseExistingMC} = 0;
410
+ $configdsinfo->disable(); # ignore it
411
+ $configdsadmin->enable();
412
+ $configdsadmindomain->enable();
413
+ }
414
+ }
415
+ return $res;
416
+ },
417
+ ['dialog_useconfigds_prompt'],
418
+ );
419
+
420
+ my $updatedialog = new DialogYesNo (
421
+ $EXPRESS,
422
+ 'dialog_update_text',
423
+ 1,
424
+ sub {
425
+ my $self = shift;
426
+ my $ans = shift;
427
+ my $res = $self->handleResponse($ans);
428
+ if ($res == $DialogManager::NEXT) {
429
+ $res = $DialogManager::ERR if (!$self->isYes());
430
+ }
431
+ return $res;
432
+ },
433
+ ['dialog_update_prompt'],
434
+ );
435
+
436
+
437
+ sub getDialogs {
438
+ return ($useconfigds, $configdsinfo, $configdsadmin, $configdsadmindomain);
439
+ }
440
+
441
+ sub getRegDialogs {
442
+ return ($regconfigdsinfo, $configdsadmindomain);
443
+ }
444
+
445
+ sub getUpdateDialogs {
446
+ return ($updatedialog, $configdsinfo);
447
+ }
448
+
449
+ 1;