/[smeserver]/rpms/smeserver-manager/sme10/smeserver-manager-0.1.0-remove_tests.patch
ViewVC logotype

Contents of /rpms/smeserver-manager/sme10/smeserver-manager-0.1.0-remove_tests.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download)
Sat Nov 21 08:43:50 2020 UTC (3 years, 11 months ago) by michel
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
* Fri Nov 20 2020 Michel Begue <mab974@gmail.com> 0.1.2-2.sme
- Fix smanager-update event name
- Move smanager service to /usr/lib/systemd
- Fix Bugreport file download
- Fix translations missing in 'viewlogfiles'
- Remove Admin auth in httpd configuration
- Add an optional alias for admin sign in.
- Remove systemctl from .spec file

1 diff -aurN smeserver-manager-0.1.0.old/root/usr/share/perl5/vendor_perl/smeserver/Panel/useraccountsNew.pm smeserver-manager-0.1.0/root/usr/share/perl5/vendor_perl/smeserver/Panel/useraccountsNew.pm
2 --- smeserver-manager-0.1.0.old/root/usr/share/perl5/vendor_perl/smeserver/Panel/useraccountsNew.pm 2020-04-14 16:50:23.000000000 +0400
3 +++ smeserver-manager-0.1.0/root/usr/share/perl5/vendor_perl/smeserver/Panel/useraccountsNew.pm 1970-01-01 04:00:00.000000000 +0400
4 @@ -1,1310 +0,0 @@
5 -#!/usr/bin/perl -w
6 -
7 -#----------------------------------------------------------------------
8 -# $Id: smeserver-manager-add-basic-files.patch,v 1.1 2019/12/15 22:14:17 jcrisp Exp $
9 -#----------------------------------------------------------------------
10 -# copyright (C) 1999-2006 Mitel Networks Corporation
11 -#
12 -# This program is free software; you can redistribute it and/or modify
13 -# it under the terms of the GNU General Public License as published by
14 -# the Free Software Foundation; either version 2 of the License, or
15 -# (at your option) any later version.
16 -#
17 -# This program is distributed in the hope that it will be useful,
18 -# but WITHOUT ANY WARRANTY; without even the implied warranty of
19 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 -# GNU General Public License for more details.
21 -#
22 -# You should have received a copy of the GNU General Public License
23 -# along with this program; if not, write to the Free Software
24 -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 -#----------------------------------------------------------------------
26 -package smeserver::Panel::useraccountsNew;
27 -
28 -use strict;
29 -
30 -# Get shot of FormMagick and cgi
31 -
32 -
33 -use esmith::AccountsDB;
34 -use esmith::ConfigDB;
35 -#use esmith::FormMagick;
36 -#use esmith::cgi;
37 -use esmith::util;
38 -use File::Basename;
39 -use Exporter;
40 -use Carp qw(verbose);
41 -
42 -# This will have to go - where do we need it ?
43 -our @ISA = qw( Exporter);
44 -
45 -# Anything with print is a non starter and should be renamed
46 -our @EXPORT = qw(
47 - get_user_accounts
48 - print_user_table
49 - print_acctName_field
50 - print_groupMemberships_field
51 - print_page_description
52 - get_ldap_value
53 - username_clash
54 - pseudonym_clash
55 - handle_user_accounts
56 - modify_admin
57 - emailforward
58 - verifyPasswords
59 - lock_account
60 - remove_account
61 - reset_password
62 - check_password
63 - print_save_or_add_button
64 - get_pptp_value
65 - print_ipsec_client_section
66 - get_prop
67 -
68 - system_password_compare
69 - system_valid_password
70 - system_change_password
71 - system_check_password
72 - system_authenticate_password
73 -);
74 -
75 -our $VERSION = sprintf '%d.%03d', q$Revision: 1.1 $ =~ /: (\d+).(\d+)/;
76 -
77 -our $accountdb = esmith::AccountsDB->open();
78 -our $configdb = esmith::ConfigDB->open();
79 -
80 -=pod
81 -
82 -=head1 NAME
83 -
84 -esmith::FormMagick::Panels::useraccounts - useful panel functions
85 -
86 -=head1 SYNOPSIS
87 -
88 -use esmith::FormMagick::Panels::useraccount;
89 -
90 -my $panel = esmith::FormMagick::Panel::useraccount->new();
91 -$panel->display();
92 -
93 -=head1 DESCRIPTION
94 -
95 -
96 -=head2 new();
97 -
98 -Exactly as for esmith::FormMagick
99 -
100 -=begin testing
101 -
102 -$ENV{ESMITH_ACCOUNT_DB} = "10e-smith-base/accounts.conf";
103 -$ENV{ESMITH_CONFIG_DB} = "10e-smith-base/configuration.conf";
104 -
105 -open DATA, "echo '<form></form>'|";
106 -use_ok('esmith::FormMagick::Panel::useraccounts');
107 -use vars qw($panel);
108 -ok($panel = esmith::FormMagick::Panel::useraccounts->new(),
109 -"Create panel object");
110 -close DATA;
111 -isa_ok($panel, 'esmith::FormMagick::Panel::useraccounts');
112 -$panel->{cgi} = CGI->new();
113 -$panel->parse_xml();
114 -
115 -{ package esmith::FormMagick::Panel::useraccounts;
116 -our $accountdb;
117 -::isa_ok($accountdb, 'esmith::AccountsDB');
118 -}
119 -
120 -=end testing
121 -
122 -=cut
123 -
124 -# Errrr ? No FormMagick now.
125 -sub new {
126 - shift;
127 - my $self = esmith::FormMagick->new();
128 - $self->{calling_package} = (caller)[0];
129 - bless $self;
130 - return $self;
131 -}
132 -
133 -=head1 HTML GENERATION ROUTINES
134 -
135 -Routines for generating chunks of HTML needed by the panel.
136 -
137 -=head2 print_user_table
138 -
139 -Prints out the user table on the front page.
140 -
141 -=for testing
142 -$panel->print_user_table;
143 -like($_STDOUT_, qr/bart/, "Found usernames in user table output");
144 -like($_STDOUT_, qr/ff0000/, "Found red 'reset password' output");
145 -
146 -=cut
147 -
148 -# The whole print_user_table routine can go - we just need get_users here
149 -
150 -sub get_user_accounts {
151 - #my $self = shift;
152 - #my $q = $self->{cgi};
153 - #my $account = $self->localise('ACCOUNT');
154 - #my $acctName = $self->localise('USER_NAME');
155 - #
156 - #my $modify = $self->localise('MODIFY');
157 - #my $resetpw = $self->localise('PASSWORD_RESET');
158 - #my $lock = $self->localise('LOCK_ACCOUNT');
159 - #my $account_locked = $self->localise('ACCOUNT_LOCKED');
160 - #my $remove = $self->localise('REMOVE');
161 -
162 - my @users = $accountdb->get('admin');
163 - push @users, $accountdb->users();
164 -
165 - unless ( scalar @users )
166 - {
167 - return "No user accounts available";
168 - }
169 - return @users;
170 -}
171 -
172 -# Not required
173 -
174 -sub print_user_table {
175 - my $self = shift;
176 - my $q = $self->{cgi};
177 - my $account = $self->localise('ACCOUNT');
178 - my $acctName = $self->localise('USER_NAME');
179 -
180 - my $modify = $self->localise('MODIFY');
181 - my $resetpw = $self->localise('PASSWORD_RESET');
182 - my $lock = $self->localise('LOCK_ACCOUNT');
183 - my $account_locked = $self->localise('ACCOUNT_LOCKED');
184 - my $remove = $self->localise('REMOVE');
185 -
186 - my @users = $accountdb->get('admin');
187 - push @users, $accountdb->users();
188 -
189 - unless ( scalar @users )
190 - {
191 - print $q->Tr($q->td($self->localise('NO_USER_ACCOUNTS')));
192 - return "";
193 - }
194 - print " <tr>\n <td colspan=\"2\">\n ";
195 - print $q->start_table ({-CLASS => "sme-border"}),"\n ";
196 - print $q->Tr(
197 - esmith::cgi::genSmallCell($q, $self->localise($account),"header"),
198 - esmith::cgi::genSmallCell($q, $self->localise($acctName),"header"),
199 - esmith::cgi::genSmallCell($q, $self->localise('VPN_CLIENT_ACCESS'), "header"),
200 - esmith::cgi::genSmallCell($q, $self->localise('FORWARDING_ADDRESS'), "header"),
201 - esmith::cgi::genSmallCell($q, $self->localise('ACTION'),"header",4));
202 -
203 - my $scriptname = basename($0);
204 - my $index=0;
205 -
206 - foreach my $u (@users) {
207 - my $username = $u->key();
208 - my $first = $u->prop('FirstName');
209 - my $last = $u->prop('LastName');
210 - my $lockable = $u->prop('Lockable') || 'yes';
211 - my $removable = $u->prop('Removable') || 'yes';
212 - my $fwd = (($u->prop('EmailForward') || 'local') =~ m/^forward|both$/) ?
213 - $u->prop('ForwardAddress') : '';
214 - my $vpnaccess = $u->prop('VPNClientAccess') || 'no';
215 - $vpnaccess = $vpnaccess eq 'yes' ? $self->localise('YES') :
216 - $self->localise('NO');
217 -
218 - my $params = $self->build_user_cgi_params($username, $u->props());
219 -
220 - my $password_set = $u->prop('PasswordSet');
221 -
222 - my $pagenum = ($username eq "admin") ? $self->get_page_by_name('SystemPasswordDummy')
223 - : $self->get_page_by_name('ResetPasswordDummy');
224 -
225 - # make normal links
226 - my $lock_url = ($password_set eq 'yes') ?
227 - qq(<a href="$scriptname?$params&Next=Next&wherenext=LockAccount">$lock</a>) :
228 - qq($account_locked);
229 -
230 - $lock_url = "" unless ($lockable eq "yes");
231 -
232 - my $where_next = ($username eq "admin") ? "ModifyAdmin" : "CreateModify";
233 - my $action1 = "<a href=\"$scriptname?page=0&page_stack=&acctName=$username&Next=Next&action=modify&wherenext=$where_next\">$modify</a>";
234 -
235 - my $action2 = "<a href=\"$scriptname?page=$pagenum&page_stack=&Next=Next&acctName=$username\">$resetpw</a>";
236 -
237 - unless ($password_set eq 'yes')
238 - {
239 - $action2 = "<span class='error-noborders'>" . $action2 . "</span>";
240 - }
241 -
242 - my $action3 = ($removable eq "yes") ? "<a href=\"$scriptname?$params&Next=Next&wherenext=RemoveAccount\">$remove</a>" : '';
243 -
244 - print $q->Tr(esmith::cgi::genSmallCell($q, $username,"normal")," ",
245 - esmith::cgi::genSmallCell($q, "$first $last","normal")," ",
246 - esmith::cgi::genSmallCell($q, $vpnaccess),
247 - esmith::cgi::genSmallCell($q, $fwd),
248 - esmith::cgi::genSmallCell($q, "$action1","normal")," ",
249 - esmith::cgi::genSmallCell($q, "$action2","normal")," ",
250 - esmith::cgi::genSmallCell($q, "$lock_url","normal")," ",
251 - esmith::cgi::genSmallCell($q, "$action3","normal"));
252 -
253 - $index++;
254 - }
255 -
256 - print qq(</table></td></tr>\n);
257 -
258 - return "";
259 -}
260 -
261 -=head2 print_acctName_field
262 -
263 -This subroutine is used to generate the Account name field on the form in
264 -the case of "create user", or to make it a plain uneditable string in the case
265 -of "modify user".
266 -
267 -=begin testing
268 -
269 -my $self = esmith::FormMagick::Panel::useraccounts->new();
270 -$self->{cgi} = CGI->new("");
271 -print_acctName_field($self);
272 -like($_STDOUT_, qr/text.*acctName/, "print text field if acctName not set");
273 -like($_STDOUT_, qr/create/, "action=create if acctName not set");
274 -$self->{cgi}->param(-name => 'acctName', -value => 'foo');
275 -$self->{cgi}->param(-name => 'action', -value => 'modify');
276 -print_acctName_field($self);
277 -like($_STDOUT_, qr/hidden.*acctName/, "print hidden field if acctName is set");
278 -like($_STDOUT_, qr/modify/, "action=modify if acctName already set");
279 -
280 -=end testing
281 -
282 -=cut
283 -
284 -sub print_acctName_field {
285 - my $self = shift;
286 - my $cgi = $self->{cgi};
287 - my $an = $cgi->param('acctName') || '';
288 - print qq(<tr><td class=\"sme-noborders-label\">) . $self->localise('ACCOUNT_NAME') . qq(</td>\n);
289 - my $action = $cgi->param('action') || '';
290 - if ( $action eq 'modify') {
291 - print qq(
292 - <td>$an
293 - <input type="hidden" name="acctName" value="$an">
294 - <input type="hidden" name="action" value="modify">
295 - </td>
296 - );
297 - # if there's no CGI data, fill in the fields with the account db
298 - # data for this user
299 - my $rec = $accountdb->get($an);
300 - my $fn = $cgi->param('FirstName') ?
301 - $cgi->param('FirstName') :
302 - ($rec ? ($rec->prop('FirstName')) : '');
303 - my $ln = $cgi->param('LastName') ?
304 - $cgi->param('LastName') :
305 - ($rec ? ($rec->prop('LastName')) : '');
306 - my $dept = $cgi->param('Dept') ?
307 - $cgi->param('Dept') :
308 - ($rec ? ($rec->prop('Dept')) : '');
309 - my $company = $cgi->param('Company') ?
310 - $cgi->param('Company') :
311 - ($rec ? ($rec->prop('Company')) : '');
312 - my $street = $cgi->param('Street') ?
313 - $cgi->param('Street') :
314 - ($rec ? ($rec->prop('Street')) : '');
315 - my $city = $cgi->param('City') ?
316 - $cgi->param('City') :
317 - ($rec ? ($rec->prop('City')) : '');
318 - my $phone = $cgi->param('Phone') ?
319 - $cgi->param('Phone') :
320 - ($rec ? ($rec->prop('Phone')) : '');
321 - my $emf = $cgi->param('EmailForward') ?
322 - $cgi->param('EmailForward') :
323 - ($rec ? ($rec->prop('EmailForward')) : 'local');
324 - my $fwd = $cgi->param('ForwardAddress') ?
325 - $cgi->param('ForwardAddress') :
326 - ($rec ? ($rec->prop('ForwardAddress')) : '');
327 - my $pptp = $cgi->param('VPNClientAccess') ?
328 - $cgi->param('VPNClientAccess') :
329 - ($rec ? ($rec->prop('VPNClientAccess')) : 'no');
330 - # now that we're down with the 411, let's set the values
331 - $cgi->param(-name=>'FirstName', -value=>$fn);
332 - $cgi->param(-name=>'LastName', -value=>$ln);
333 - $cgi->param(-name=>'Dept', -value=>$dept);
334 - $cgi->param(-name=>'Company', -value=>$company);
335 - $cgi->param(-name=>'Street', -value=>$street);
336 - $cgi->param(-name=>'City', -value=>$city);
337 - $cgi->param(-name=>'Phone', -value=>$phone);
338 - $cgi->param(-name=>'EmailForward', -value=>$emf);
339 - $cgi->param(-name=>'ForwardAddress', -value=>$fwd);
340 - $cgi->param(-name=>'VPNClientAccess', -value=>$pptp);
341 - } else {
342 - print qq(
343 - <td><input type="text" name="acctName" value="$an">
344 - <input type="hidden" name="action" value="create">
345 - </td>
346 - );
347 - }
348 -
349 - print qq(</tr>\n);
350 - return undef;
351 -
352 -}
353 -
354 -=head2 print_groupMemberships_field()
355 -
356 -Builds a list of groups for the create/modify user screen.
357 -
358 -=begin testing
359 -
360 -my $self = esmith::FormMagick::Panel::useraccounts->new();
361 -$self->{cgi} = CGI->new("");
362 -$self->print_groupMemberships_field();
363 -like($_STDOUT_, qr/simpsons/, "Found simpsons in group list");
364 -like($_STDOUT_, qr/flanders/, "Found flanders in group list");
365 -$self->{cgi}->param(-name => 'acctName', -value => 'rod');
366 -$self->print_groupMemberships_field();
367 -like($_STDOUT_, qr/checked value="flanders"/, "Checked flanders group for user rod");
368 -
369 -=end testing
370 -
371 -=cut
372 -
373 -sub print_groupMemberships_field {
374 - my ($self) = @_;
375 - my $q = $self->{cgi};
376 - my $user = $q->param('acctName');
377 -
378 - if (my @groups = $accountdb->groups()) {
379 -
380 - print "<tr><td class=\"sme-noborders-label\">",
381 - $self->localise('GROUP_MEMBERSHIPS'),
382 - "</td><td>\n";
383 -
384 - print $q->start_table({-class => "sme-border"}),"\n";
385 - print $q->Tr(
386 - esmith::cgi::genSmallCell($q, $self->localise('MEMBER'),"header"),
387 - esmith::cgi::genSmallCell($q, $self->localise('GROUP'),"header"),
388 - esmith::cgi::genSmallCell($q, $self->localise('DESCRIPTION'),"header")
389 - );
390 -
391 - foreach my $g (@groups) {
392 - my $groupname = $g->key();
393 - my $checked;
394 - if ($user and $accountdb->is_user_in_group($user, $groupname)) {
395 - $checked = 'checked';
396 - } else {
397 - $checked = '';
398 - }
399 -
400 - print $q->Tr(
401 - $q->td(
402 - "<input type=\"checkbox\""
403 - . " name=\"groupMemberships\""
404 - . " $checked value=\"$groupname\">"
405 - ),
406 - esmith::cgi::genSmallCell($q, $groupname,"normal"),
407 - esmith::cgi::genSmallCell( $q, $accountdb->get($groupname)->prop("Description"),"normal")
408 - );
409 - }
410 -
411 - print "</table></td></tr>\n";
412 -
413 - }
414 -
415 - return undef;
416 -
417 -}
418 -
419 -=head2 print_page_description($self, "reset|lock|remove")
420 -
421 -Generates the page description for the the somewhat similar Reset
422 -Password, Lock Account and Remove Account pages.
423 -
424 -=begin testing
425 -
426 -my $self = esmith::FormMagick::Panel::useraccounts->new();
427 -$self->{cgi} = CGI->new({ acctName => 'bart' });
428 -print_page_description($self, "reset");
429 -like($_STDOUT_, qr/bart/, "print_page_description prints username");
430 -like($_STDOUT_, qr/Bart Simpson/, "print_page_description prints name");
431 -like($_STDOUT_, qr/RESET_DESC/, "print_page_description prints description");
432 -
433 -=end testing
434 -
435 -=cut
436 -
437 -sub print_page_description {
438 - my ($self, $pagename) = @_;
439 - unless (grep /^$pagename$/, qw(reset lock remove)) {
440 - warn "Can't generate page description for invalid pagename $pagename\n";
441 - return;
442 - }
443 -
444 - $pagename = uc($pagename);
445 -
446 - my $desc = $self->localise("${pagename}_DESC");
447 - my $desc2 = $self->localise("${pagename}_DESC2");
448 -
449 - my $acctName = $self->{cgi}->param('acctName');
450 - my $name = $accountdb->get($acctName)->prop('FirstName') . " "
451 - . $accountdb->get($acctName)->prop('LastName');
452 -
453 - print qq{
454 - <tr><td colspan="2">
455 - <p>$desc "$acctName" ($name)</p>
456 - $desc2
457 - <input type="hidden" name="acctName" value="$acctName">
458 - </td></tr>
459 - };
460 -
461 - return;
462 -}
463 -
464 -=head1 ROUTINES FOR FILLING IN FIELD DEFAULT VALUES
465 -
466 -=head2 get_ldap_value($field)
467 -
468 -This subroutine generates the default field value on the form using the
469 -parameter specified.
470 -
471 -In this case, the default field values come from LDAP/directory
472 -settings.
473 -
474 -If a CGI parameter has been passed that contains an account name, we
475 -assume that a value has already been set, as we're modifying a user, and
476 -use that value instead of a default.
477 -
478 -=for testing
479 -my $self = esmith::FormMagick::Panel::useraccounts->new();
480 -$self->{cgi} = CGI->new("");
481 -is(get_ldap_value($self, "Dept"), "Main", "Pick up default value from LDAP");
482 -$self->{cgi} = CGI->new({ acctName => 'bart' });
483 -is(get_ldap_value($self, "Dept"), undef, "Don't pick up LDAP data if username provided");
484 -
485 -=cut
486 -
487 -sub get_ldap_value {
488 - my ($self, $field) = @_;
489 -
490 - # don't do the lookup if this is a modification of an existing user
491 - if ($self->{cgi}->param('acctName')) {
492 - return $self->{cgi}->param($field);
493 - }
494 -
495 - my %CGIParam2DBfield = (
496 - Dept => 'defaultDepartment',
497 - Company => 'defaultCompany',
498 - Street => 'defaultStreet',
499 - City => 'defaultCity',
500 - Phone => 'defaultPhoneNumber'
501 - );
502 -
503 - return $configdb->get('ldap')->prop($CGIParam2DBfield{$field});
504 -}
505 -
506 -sub get_pptp_value
507 -{
508 - return $configdb->get('pptpd')->prop('AccessDefault') || 'no';
509 -}
510 -
511 -=head1 VALIDATION ROUTINES
512 -
513 -=head2 pseudonym_clash
514 -
515 -Validation routine to check whether a the first/last names clash with
516 -existing pseudonyms.
517 -
518 -Note that it won't be considered a "clash" if there is an existing
519 -pseudonym which belongs to the same user -- it's only a clash if the
520 -generated pseudonyms are the same but the usernames aren't.
521 -
522 -=begin testing
523 -
524 -my $self = esmith::FormMagick::Panel::useraccounts->new();
525 -
526 -$self->{cgi} = CGI->new({
527 - acctName => 'skud',
528 - FirstName => 'Kirrily',
529 - LastName => 'Robert'
530 -});
531 -
532 -is (pseudonym_clash($self, 'Kirrily'), "OK", "New name doesn't clash pseudonyms");
533 -
534 -$self->{cgi} = CGI->new({
535 - acctName => 'bart2',
536 - FirstName => 'Bart',
537 - LastName => 'Simpson'
538 -});
539 -
540 -isnt(pseudonym_clash($self, 'Bart'), "OK", "Existing pseudonym with non-matching username causes clash");
541 -
542 -$self->{cgi} = CGI->new({
543 - acctName => 'bart',
544 - FirstName => 'Bart',
545 - LastName => 'Simpson'
546 -});
547 -
548 -is(pseudonym_clash($self, 'Bart'), "OK", "Existing pseudonym with matching username shouldn't clash");
549 -
550 -=end testing
551 -
552 -=cut
553 -
554 -sub pseudonym_clash {
555 - my ($self, $first) = @_;
556 - $first ||= "";
557 - my $last = $self->{cgi}->param('LastName') || "";
558 - my $acctName = $self->{cgi}->param('acctName') || "";
559 -
560 - my $up = "$first $last";
561 -
562 - $up =~ s/^\s+//;
563 - $up =~ s/\s+$//;
564 - $up =~ s/\s+/ /g;
565 - $up =~ s/\s/_/g;
566 -
567 - my $dp = $up;
568 - $dp =~ s/_/./g;
569 -
570 - $dp = $accountdb->get($dp);
571 - $up = $accountdb->get($up);
572 -
573 - my $da = $dp->prop('Account') if $dp;
574 - my $ua = $up->prop('Account') if $up;
575 - if ($dp and $da and $da ne $acctName)
576 - {
577 - return $self->localise('PSEUDONYM_CLASH',
578 - {
579 - acctName => $acctName,
580 - clashName => $da,
581 - pseudonym => $dp->key
582 - });
583 - }
584 - elsif ($up and $ua and $ua ne $acctName)
585 - {
586 - return $self->localise('PSEUDONYM_CLASH',
587 - {
588 - acctName => $acctName,
589 - clashName => $ua,
590 - pseudonym => $up->key
591 - });
592 - }
593 - else
594 - {
595 - return "OK";
596 - }
597 -}
598 -
599 -=head2 emailforward()
600 -
601 -Validation routine for email forwarding
602 -
603 -=cut
604 -
605 -sub emailforward {
606 - my ($self, $data) = @_;
607 - my $response = $self->email_simple($data);
608 - if ($response eq "OK")
609 - {
610 - return "OK";
611 - }
612 - elsif ($data eq "")
613 - {
614 - # Blank is ok, only if we're not forwarding, which means that the
615 - # EmailForward param must be set to 'local'.
616 - my $email_forward = $self->{cgi}->param('EmailForward') || '';
617 - $email_forward =~ s/^\s+|\s+$//g;
618 - return 'OK' if $email_forward eq 'local';
619 - return $self->localise('CANNOT_CONTAIN_WHITESPACE');
620 - }
621 - else
622 - {
623 - return $self->localise('CANNOT_CONTAIN_WHITESPACE')
624 - if ( $data =~ /\s+/ );
625 - # Permit a local address.
626 - return "OK" if $data =~ /^[a-zA-Z][a-zA-Z0-9\._\-]*$/;
627 - return $self->localise('UNACCEPTABLE_CHARS');
628 - }
629 -}
630 -
631 -=head2 verifyPasswords()
632 -
633 -Returns an error message if the two new passwords input don't match.
634 -
635 -=cut
636 -
637 -sub verifyPasswords {
638 - my $self = shift;
639 - my $pass2 = shift;
640 -
641 - my $pass1 = $self->{cgi}->param('password1');
642 - unless ($pass1 eq $pass2) {
643 - $self->{cgi}->param( -name => 'wherenext', -value => 'Password' );
644 - return "PASSWORD_VERIFY_ERROR";
645 - }
646 - return "OK";
647 -}
648 -
649 -=head1 CREATING AND MODIFYING USERS
650 -
651 -=head2 handle_user_accounts()
652 -
653 -This is the routine called by the "Save" button on the create/modify page.
654 -It checks the "action" param and calls either create_user() or modify_user()
655 -as appropriate.
656 -
657 -=cut
658 -
659 -sub handle_user_accounts {
660 - my ($self) = @_;
661 -
662 - my $cgi = $self->{cgi};
663 -
664 - if ($cgi->param("action") eq "create") {
665 - my $msg = create_user($self);
666 - if ($msg eq 'USER_CREATED')
667 - {
668 - $self->success($msg);
669 - }
670 - else
671 - {
672 - $self->error($msg);
673 - }
674 - }
675 - else {
676 - modify_user($self);
677 - $self->success('USER_MODIFIED');
678 - }
679 -}
680 -
681 -=head2 print_save_or_add_button()
682 -
683 -=cut
684 -
685 -sub print_save_or_add_button {
686 -
687 - my ($self) = @_;
688 -
689 - my $cgi = $self->{cgi};
690 -
691 - if (($cgi->param("action") || '') eq "modify") {
692 - $self->print_button("SAVE");
693 - } else {
694 - $self->print_button("ADD");
695 - }
696 -
697 -}
698 -
699 -=head2 modify_admin($self)
700 -
701 -=cut
702 -
703 -sub modify_admin
704 -{
705 - my ($self) = @_;
706 -
707 - my $acct = $accountdb->get('admin');
708 -
709 - my %newProperties = (
710 - 'FirstName' => $self->{cgi}->param('FirstName'),
711 - 'LastName' => $self->{cgi}->param('LastName'),
712 - 'EmailForward' => $self->{cgi}->param('EmailForward'),
713 - 'ForwardAddress' => $self->{cgi}->param('ForwardAddress'),
714 - 'VPNClientAccess'=> $self->{cgi}->param('VPNClientAccess'),
715 - );
716 -
717 - $acct->merge_props(%newProperties);
718 -
719 - undef $accountdb;
720 -
721 - my $status =
722 - system ("/sbin/e-smith/signal-event", "user-modify-admin", 'admin');
723 -
724 - $accountdb = esmith::AccountsDB->open();
725 -
726 - if ($status == 0)
727 - {
728 - $self->success('USER_MODIFIED', 'First');
729 - }
730 - else
731 - {
732 - $self->error('CANNOT_MODIFY_USER', 'First');
733 - }
734 - return;
735 -}
736 -
737 -=head2 modify_user($self)
738 -
739 -=cut
740 -
741 -sub modify_user {
742 - my ($self) = @_;
743 - my $acctName = $self->{cgi}->param('acctName');
744 -
745 - unless (($acctName) = ($acctName =~ /^(\w[\-\w_\.]*)$/)) {
746 - return $self->error($self->localise('TAINTED_USER',
747 - { acctName => $acctName }));
748 - }
749 - # Untaint the username before use in system()
750 - $acctName = $1;
751 -
752 - my $acct = $accountdb->get($acctName);
753 - my $acctType = $acct->prop('type');
754 -
755 - if ($acctType eq "user")
756 - {
757 - $accountdb->remove_user_auto_pseudonyms($acctName);
758 - my %newProperties = (
759 - 'FirstName' => $self->{cgi}->param('FirstName'),
760 - 'LastName' => $self->{cgi}->param('LastName'),
761 - 'Phone' => $self->{cgi}->param('Phone'),
762 - 'Company' => $self->{cgi}->param('Company'),
763 - 'Dept' => $self->{cgi}->param('Dept'),
764 - 'City' => $self->{cgi}->param('City'),
765 - 'Street' => $self->{cgi}->param('Street'),
766 - 'EmailForward' => $self->{cgi}->param('EmailForward'),
767 - 'ForwardAddress' => $self->{cgi}->param('ForwardAddress'),
768 - 'VPNClientAccess'=> $self->{cgi}->param('VPNClientAccess'),
769 - );
770 -
771 - $acct->merge_props(%newProperties);
772 -
773 - $accountdb->create_user_auto_pseudonyms($acctName);
774 -
775 - my @old_groups = $accountdb->user_group_list($acctName);
776 - my @new_groups = $self->{cgi}->param("groupMemberships");
777 - $accountdb->remove_user_from_groups($acctName, @old_groups);
778 - $accountdb->add_user_to_groups($acctName, @new_groups);
779 -
780 - undef $accountdb;
781 -
782 - unless (system ("/sbin/e-smith/signal-event", "user-modify",
783 - $acctName) == 0) {
784 - $accountdb = esmith::AccountsDB->open();
785 - return $self->error('CANNOT_MODIFY_USER');
786 - }
787 - $accountdb = esmith::AccountsDB->open();
788 - }
789 - $self->success('USER_MODIFIED');
790 -}
791 -
792 -=head2 create_user
793 -
794 -Adds a user to the accounts db.
795 -
796 -=cut
797 -
798 -sub create_user {
799 - my $self = shift;
800 - my $q = $self->{cgi};
801 -
802 - my $acctName = $q->param('acctName');
803 -
804 - my $msg = $self->validate_acctName($acctName);
805 - unless ($msg eq "OK")
806 - {
807 - return $msg;
808 - }
809 -
810 - $msg = $self->validate_acctName_length($acctName);
811 - unless ($msg eq "OK")
812 - {
813 - return $msg;
814 - }
815 -
816 - $msg = $self->validate_acctName_conflict($acctName);
817 - unless ($msg eq "OK")
818 - {
819 - return $msg;
820 - }
821 -
822 - my %userprops;
823 - foreach my $field ( qw( FirstName LastName Phone Company Dept
824 - City Street EmailForward ForwardAddress VPNClientAccess) )
825 - {
826 - $userprops{$field} = $q->param($field);
827 - }
828 - $userprops{'PasswordSet'} = "no";
829 - $userprops{'type'} = 'user';
830 -
831 - my $acct = $accountdb->new_record($acctName)
832 - or warn "Can't create new account for $acctName (does it already exist?)\n";
833 - $acct->reset_props(%userprops);
834 - $accountdb->create_user_auto_pseudonyms($acctName);
835 - my @groups = $self->{cgi}->param("groupMemberships");
836 - $accountdb->add_user_to_groups($acctName, @groups);
837 -
838 - undef $accountdb;
839 -
840 - # Untaint the username before use in system()
841 - $acctName =~ /^(\w[\-\w_\.]*)$/;
842 - $acctName = $1;
843 -
844 - if (system ("/sbin/e-smith/signal-event", "user-create", $acctName))
845 - {
846 - $accountdb = esmith::AccountsDB->open();
847 - return $self->localise("ERR_OCCURRED_CREATING");
848 - }
849 -
850 - $accountdb = esmith::AccountsDB->open();
851 -
852 - $self->set_groups();
853 - return 'USER_CREATED';
854 -}
855 -
856 -=head2 set_groups
857 -
858 -Sets a user's groups in the accounts db. This is called as part of the
859 -create_user() routine.
860 -
861 -=cut
862 -
863 -sub set_groups
864 -{
865 - my $self = shift;
866 - my $q = $self->{cgi};
867 - my $acctName = $q->param('acctName');
868 -
869 - my @groups = $q->param('groupMemberships');
870 - $accountdb->set_user_groups($acctName, @groups);
871 -
872 -}
873 -
874 -=head1 REMOVING ACCOUNTS
875 -
876 -=head2 remove_account()
877 -
878 -=cut
879 -
880 -sub remove_account {
881 - my ($self) = @_;
882 - my $acctName = $self->{cgi}->param('acctName');
883 -
884 - my $acct = $accountdb->get($acctName);
885 - if ($acct->prop('type') eq "user") {
886 - $acct->set_prop('type', "user-deleted");
887 -
888 - undef $accountdb;
889 -
890 - # Untaint the username before use in system()
891 - $acctName =~ /^(\w[\-\w_\.]*)$/;
892 - $acctName = $1;
893 - if (system ("/sbin/e-smith/signal-event", "user-delete", $acctName))
894 - {
895 - $accountdb = esmith::AccountsDB->open();
896 - return $self->error("ERR_OCCURRED_DELETING");
897 - }
898 -
899 - $accountdb = esmith::AccountsDB->open();
900 - $accountdb->get($acctName)->delete;
901 -
902 - } else {
903 - # FIXME - this should be handled by input validation
904 - # XXX error message here
905 - }
906 - $self->{cgi}->param(-name => 'wherenext', -value => 'First');
907 -}
908 -
909 -=head1 RESETTING THE PASSWORD
910 -
911 -=head2 reset_password()
912 -
913 -=cut
914 -
915 -sub reset_password {
916 - my ($self) = @_;
917 - my $acctName = $self->{cgi}->param('acctName');
918 -
919 - unless (($acctName) = ($acctName =~ /^(\w[\-\w_\.]*)$/)) {
920 - return $self->error('TAINTED_USER');
921 - }
922 - $acctName = $1;
923 -
924 - my $acct = $accountdb->get($acctName);
925 -
926 - if ( $acct->prop('type') eq "user")
927 - {
928 - esmith::util::setUserPassword ($acctName,
929 - $self->{cgi}->param('password1'));
930 -
931 - $acct->set_prop("PasswordSet", "yes");
932 - undef $accountdb;
933 -
934 - if (system("/sbin/e-smith/signal-event", "password-modify", $acctName))
935 - {
936 - $accountdb = esmith::AccountsDB->open();
937 - $self->error("ERR_OCCURRED_MODIFYING_PASSWORD");
938 - }
939 - $accountdb = esmith::AccountsDB->open();
940 -
941 - $self->success($self->localise('PASSWORD_CHANGE_SUCCEEDED',
942 - { acctName => $acctName}));
943 - }
944 - else
945 - {
946 - $self->error($self->localise('NO_SUCH_USER',
947 - { acctName => $acctName}));
948 - }
949 -}
950 -
951 -=head1 LOCKING AN ACCOUNT
952 -
953 -=head2 lock_account()
954 -
955 -=cut
956 -
957 -sub lock_account {
958 - my ($self) = @_;
959 - my $acctName = $self->{cgi}->param('acctName');
960 - my $acct = $accountdb->get($acctName);
961 - if ($acct->prop('type') eq "user")
962 - {
963 - undef $accountdb;
964 -
965 - # Untaint the username before use in system()
966 - $acctName =~ /^(\w[\-\w_\.]*)$/;
967 - $acctName = $1;
968 - if (system("/sbin/e-smith/signal-event", "user-lock", $acctName))
969 - {
970 - $accountdb = esmith::AccountsDB->open();
971 - return $self->error("ERR_OCCURRED_LOCKING");
972 - }
973 -
974 - $accountdb = esmith::AccountsDB->open();
975 -
976 - $self->success($self->localise('LOCKED_ACCOUNT',
977 - { acctName => $acctName}));
978 - }
979 - else
980 - {
981 - $self->error($self->localise('NO_SUCH_USER',
982 - { acctName => $acctName}));
983 - }
984 -}
985 -
986 -
987 -=head1 MISCELLANEOUS ROUTINES
988 -
989 -=head2 build_user_cgi_params()
990 -
991 -Builds a CGI query string based on user data, using various sensible
992 -defaults and esmith::FormMagick's props_to_query_string() method.
993 -
994 -=cut
995 -
996 -sub build_user_cgi_params {
997 - my ($self, $acctName, %oldprops) = @_;
998 -
999 - my %props = (
1000 - page => 0,
1001 - page_stack => "",
1002 - ".id" => $self->{cgi}->param('.id') || "",
1003 - acctName => $acctName,
1004 - #%oldprops
1005 - );
1006 -
1007 - return $self->props_to_query_string(\%props);
1008 -}
1009 -
1010 -=pod
1011 -
1012 -=head2 validate_acctName
1013 -
1014 -Checks that the name supplied does not contain any unacceptable chars.
1015 -Returns OK on success or a localised error message otherwise.
1016 -
1017 -=for testing
1018 -is($panel->validate_acctName('foo'), 'OK', 'validate_acctName');
1019 -isnt($panel->validate_acctName('3amigos'), 'OK', ' .. cannot start with number');
1020 -isnt($panel->validate_acctName('betty ford'), 'OK', ' .. cannot contain space');
1021 -
1022 -=cut
1023 -
1024 -sub validate_acctName
1025 -{
1026 - my ($self, $acctName) = @_;
1027 -
1028 - unless ($accountdb->validate_account_name($acctName))
1029 - {
1030 - return $self->localise('ACCT_NAME_HAS_INVALID_CHARS',
1031 - {acctName => $acctName});
1032 - }
1033 - return "OK";
1034 -}
1035 -
1036 -=head2 validate_account_length FM ACCOUNTNAME
1037 -
1038 -returns 'OK' if the account name is shorter than the maximum account name length
1039 -returns 'ACCOUNT_TOO_LONG' otherwise
1040 -
1041 -=begin testing
1042 -
1043 -ok(($panel->validate_acctName_length('foo') eq 'OK'), "a short account name passes");
1044 -ok(($panel->validate_acctName_length('fooooooooooooooooo') eq 'ACCOUNT_TOO_LONG'), "a long account name fails");
1045 -
1046 -=end testing
1047 -
1048 -=cut
1049 -
1050 -sub validate_acctName_length {
1051 - my $self = shift;
1052 - my $acctName = shift;
1053 -
1054 -
1055 - my $maxAcctNameLength = ($configdb->get('maxAcctNameLength')
1056 - ? $configdb->get('maxAcctNameLength')->prop('type')
1057 - : "") || 12;
1058 -
1059 - if ( length $acctName > $maxAcctNameLength ) {
1060 -
1061 - return $self->localise('ACCOUNT_TOO_LONG',
1062 - {maxLength => $maxAcctNameLength});
1063 - }
1064 - else {
1065 - return ('OK');
1066 - }
1067 -}
1068 -
1069 -=head2 validate_acctName_conflict
1070 -
1071 -Returns 'OK' if the account name doesn't yet exist. Returns a localised error
1072 -otherwise.
1073 -
1074 -=cut
1075 -
1076 -sub validate_acctName_conflict
1077 -{
1078 - my $self = shift;
1079 - my $acctName = shift;
1080 -
1081 - my $account = $accountdb->get($acctName);
1082 - my $type;
1083 -
1084 - if (defined $account)
1085 - {
1086 - $type = $account->prop('type');
1087 - }
1088 - elsif (defined getpwnam($acctName) || defined getgrnam($acctName))
1089 - {
1090 - $type = "system";
1091 - }
1092 - else
1093 - {
1094 - return('OK');
1095 - }
1096 - return $self->localise('ACCOUNT_CONFLICT',
1097 - { account => $acctName,
1098 - type => $type,
1099 -});
1100 -}
1101 -
1102 -=head2 check_password
1103 -
1104 -Validates the password using the desired strength
1105 -
1106 -=cut
1107 -
1108 -sub check_password {
1109 - my $self = shift;
1110 - my $pass1 = shift;
1111 -
1112 - my $check_type;
1113 - my $rec = $configdb->get('passwordstrength');
1114 - $check_type = ($rec ? ($rec->prop('Users') || 'none') : 'none');
1115 -
1116 - return $self->validate_password($check_type,$pass1);
1117 -}
1118 -
1119 -
1120 -=head2 get_prop ITEM PROP
1121 -
1122 -A simple accessor for esmith::ConfigDB::Record::prop
1123 -
1124 -=cut
1125 -
1126 -sub get_prop
1127 -{
1128 - my ($fm, $item, $prop, $default) = @_;
1129 -
1130 - return $configdb->get_prop($item, $prop) || $default;
1131 -}
1132 -
1133 -
1134 -=head1 System Password manipulation routines
1135 -
1136 -XXX FIXME - These should be merged with the useraccouts versions
1137 -
1138 -=head2 system_password_compare
1139 -
1140 -=cut
1141 -
1142 -sub system_password_compare
1143 -{
1144 - my $self = shift;
1145 - my $pass2 = shift;
1146 -
1147 - my $pass1 = $self->{cgi}->param('pass');
1148 - unless ($pass1 eq $pass2) {
1149 - $self->{cgi}->param( -name => 'wherenext', -value => 'Password' );
1150 - return "SYSTEM_PASSWORD_VERIFY_ERROR";
1151 - }
1152 - return "OK";
1153 -}
1154 -
1155 -=head2 system_valid_password
1156 -
1157 -Throw an error if the password doesn't consist solely of one or more printable characters.
1158 -
1159 -=cut
1160 -
1161 -sub system_valid_password
1162 -{
1163 - my $self = shift;
1164 - my $pass1 = shift;
1165 - # If the password contains one or more printable character
1166 - if ($pass1 =~ /^([ -~]+)$/) {
1167 - return('OK');
1168 - } else {
1169 - $self->{cgi}->param( -name => 'wherenext', -value => 'Password' );
1170 - return 'SYSTEM_PASSWORD_UNPRINTABLES_IN_PASS';
1171 - }
1172 -}
1173 -
1174 -=head2 system_check_password
1175 -
1176 -Validates the password using the desired strength
1177 -
1178 -=cut
1179 -
1180 -sub system_check_password
1181 -{
1182 - my $self = shift;
1183 - my $pass1 = shift;
1184 -
1185 - use esmith::ConfigDB;
1186 - my $conf = esmith::ConfigDB->open();
1187 - my $check_type;
1188 - my $rec;
1189 - if ($conf)
1190 - {
1191 - $rec = $conf->get('passwordstrength');
1192 - }
1193 - $check_type = ($rec ? ($rec->prop('Admin') || 'strong') : 'strong');
1194 -
1195 - return $self->validate_password($check_type,$pass1);
1196 -}
1197 -
1198 -=head2 authenticate_password
1199 -
1200 -Compares the password with the current system password
1201 -
1202 -=cut
1203 -
1204 -sub system_authenticate_password
1205 -{
1206 - my $self = shift;
1207 - my $pass = shift;
1208 -
1209 - if (esmith::util::authenticateUnixPassword( ($configdb->get_value("AdminIsNotRoot") eq 'enabled') ? 'admin' : 'root', $pass))
1210 - {
1211 - return "OK";
1212 - }
1213 - else
1214 - {
1215 - return "SYSTEM_PASSWORD_AUTH_ERROR";
1216 - }
1217 -}
1218 -
1219 -=head2 system_change_password
1220 -
1221 -If everything has been validated, properly, go ahead and set the new password.
1222 -
1223 -=cut
1224 -
1225 -sub system_change_password
1226 -{
1227 - my ($self) = @_;
1228 - my $pass = $self->{cgi}->param('pass');
1229 -
1230 - ($configdb->get_value("AdminIsNotRoot") eq 'enabled') ? esmith::util::setUnixPassword('admin',$pass) : esmith::util::setUnixSystemPassword($pass);
1231 - esmith::util::setServerSystemPassword($pass);
1232 -
1233 - my $result = system("/sbin/e-smith/signal-event password-modify admin");
1234 -
1235 - if ($result == 0)
1236 - {
1237 - $self->success('SYSTEM_PASSWORD_CHANGED', 'First');
1238 - }
1239 - else
1240 - {
1241 - $self->error("Error occurred while modifying password for admin.", 'First');
1242 - }
1243 -
1244 - return;
1245 -}
1246 -
1247 -sub print_ipsec_client_section
1248 -{
1249 - my $self = shift;
1250 - my $q = $self->cgi;
1251 -
1252 - # Don't show ipsecrw setting unless the status property exists
1253 - return '' unless ($configdb->get('ipsec')
1254 - && $configdb->get('ipsec')->prop('RoadWarriorStatus'));
1255 - # Don't show ipsecrw setting unless /sbin/e-smith/roadwarrior exists
1256 - return '' unless -x '/sbin/e-smith/roadwarrior';
1257 - my $acct = $q->param('acctName');
1258 - my $rec = $accountdb->get($acct) if $acct;
1259 - if ($acct and $rec)
1260 - {
1261 - my $pwset = $rec->prop('PasswordSet') || 'no';
1262 - my $VPNaccess = $rec->prop('VPNClientAccess') || 'no';
1263 - if ($pwset eq 'yes' and $VPNaccess eq 'yes')
1264 - {
1265 - print $q->Tr(
1266 - $q->td({-class=>'sme-noborders-label'},
1267 - $self->localise('LABEL_IPSECRW_DOWNLOAD')),
1268 - $q->td({-class=>'sme-noborders-content'},
1269 - $q->a({-class=>'button-like',
1270 - -href=>"?action=getCert&user=$acct"},
1271 - $self->localise('DOWNLOAD'))));
1272 - }
1273 - }
1274 - return '';
1275 -}
1276 -
1277 -sub get_ipsec_client_cert
1278 -{
1279 - my $self = shift;
1280 - my $q = shift;
1281 - my $user = $q->param('user');
1282 - ($user) = ($user =~ /^(.*)$/);
1283 -
1284 - die "Invalid user: $user\n" unless getpwnam($user);
1285 -
1286 - open (KID, "/sbin/e-smith/roadwarrior get_client_cert $user |")
1287 - or die "Can't fork: $!";
1288 - my $certfile = <KID>;
1289 - close KID;
1290 -
1291 - require File::Basename;
1292 - my $certname = File::Basename::basename($certfile);
1293 -
1294 - print "Expires: 0\n";
1295 - print "Content-type: application/x-pkcs12\n";
1296 - print "Content-disposition: inline; filename=$certname\n";
1297 - print "\n";
1298 -
1299 - open (CERT, "<$certfile");
1300 - while (<CERT>)
1301 - {
1302 - print;
1303 - }
1304 - close CERT;
1305 -
1306 - return '';
1307 -}
1308 -
1309 -sub display_email_forwarding
1310 -{
1311 - return defined $configdb->get('smtpd');
1312 -}
1313 -
1314 -1;
1315 diff -aurN smeserver-manager-0.1.0.old/root/usr/share/perl5/vendor_perl/smeserver/Panel/wblNew.pm smeserver-manager-0.1.0/root/usr/share/perl5/vendor_perl/smeserver/Panel/wblNew.pm
1316 --- smeserver-manager-0.1.0.old/root/usr/share/perl5/vendor_perl/smeserver/Panel/wblNew.pm 2020-04-14 16:50:23.000000000 +0400
1317 +++ smeserver-manager-0.1.0/root/usr/share/perl5/vendor_perl/smeserver/Panel/wblNew.pm 1970-01-01 04:00:00.000000000 +0400
1318 @@ -1,455 +0,0 @@
1319 -#!/usr/bin/perl -w
1320 -
1321 -# package esmith::FormMagick::Panel::wblNew;
1322 -package smeserver::Panel::wblNew;
1323 -
1324 -use strict;
1325 -use warnings;
1326 -#use esmith::FormMagick;
1327 -#use esmith::cgi;
1328 -use esmith::ConfigDB;
1329 -use esmith::util;
1330 -use File::Basename;
1331 -use Exporter;
1332 -use Carp qw(verbose);
1333 -
1334 -our @ISA = qw( Exporter);
1335 -
1336 -our @EXPORT = qw(
1337 -get_dnsbl
1338 -get_rhsbl
1339 -get_uribl
1340 -get_sbllist
1341 -get_rbllist
1342 -get_ubllist
1343 -get_badhelo
1344 -get_badmailfrom
1345 -get_whitelisthosts
1346 -get_whitelisthelo
1347 -get_whitelistsenders
1348 -get_whitelistfrom
1349 -create_modify_black
1350 -create_modify_white
1351 -email_update
1352 -get_blacklistfrom
1353 -create_modify_rbl
1354 -);
1355 -
1356 -our $VERSION = sprintf '%d.%03d', q$Revision: 1.1 $ =~ /: (\d+).(\d+)/;
1357 -
1358 -our $db = esmith::ConfigDB->open() or die "Couldn't open ConfigDB\n";
1359 -our $wdb = esmith::ConfigDB->open('wbl') or die "Couldn't open wbl dbase\n";
1360 -our $sdb = esmith::ConfigDB->open('spamassassin') or die "Couldn't open spamassassin dbase\n";
1361 -
1362 -sub get_dnsbl
1363 -{
1364 - return ($db->get_prop('qpsmtpd', 'DNSBL') || 'disabled');
1365 -}
1366 -
1367 -sub get_rhsbl
1368 -{
1369 - return ($db->get_prop('qpsmtpd', 'RHSBL') || 'disabled');
1370 -}
1371 -
1372 -sub get_uribl
1373 -{
1374 - return ($db->get_prop('qpsmtpd', 'URIBL') || 'disabled');
1375 -}
1376 -
1377 -sub get_sbllist
1378 -{
1379 -my $sbllistform = $db->get_prop('qpsmtpd', 'SBLList') || '';
1380 -$sbllistform =~ s/,/\n/g;
1381 -return $sbllistform;
1382 -}
1383 -
1384 -sub get_rbllist
1385 -{
1386 -my $rbllistform = $db->get_prop('qpsmtpd', 'RBLList') || '';
1387 -$rbllistform =~ s/,/\n/g;
1388 -return $rbllistform;
1389 -}
1390 -
1391 -sub get_ubllist
1392 -{
1393 -my $rbllistform = $db->get_prop('qpsmtpd', 'UBLList') || '';
1394 -$rbllistform =~ s/,/\n/g;
1395 -return $rbllistform;
1396 -}
1397 -
1398 -
1399 -sub get_badhelo
1400 -{
1401 - my %list = $wdb->get('badhelo')->props;
1402 -
1403 - my @badhelo = ();
1404 - my $parameter = "";
1405 - my $value = "";
1406 - while (($parameter,$value) = each(%list)) {
1407 - if ($parameter eq "type") {next;}
1408 -
1409 - if ($value eq "Black") {
1410 - push @badhelo, $parameter;
1411 - }
1412 - }
1413 -
1414 - return "" unless (scalar @badhelo);
1415 -
1416 -# return join "\n", sort(@badhelo);
1417 - return sort(@badhelo);
1418 -}
1419 -
1420 -sub get_badmailfrom
1421 -{
1422 - my %list = $wdb->get('badmailfrom')->props;
1423 -
1424 - my @badmailfrom = ();
1425 - my $parameter = "";
1426 - my $value = "";
1427 - while (($parameter,$value) = each(%list)) {
1428 - if ($parameter eq "type") {next;}
1429 -
1430 - if ($value eq "Black") {
1431 - push @badmailfrom, $parameter;
1432 - }
1433 - }
1434 -
1435 - return "" unless (scalar @badmailfrom);
1436 -
1437 -# return join "\n", sort(@badmailfrom);
1438 - return sort(@badmailfrom);
1439 -}
1440 -
1441 -sub get_whitelisthosts
1442 -{
1443 - my %list = $wdb->get('whitelisthosts')->props;
1444 -
1445 - my @whitelisthosts = ();
1446 - my $parameter = "";
1447 - my $value = "";
1448 - while (($parameter,$value) = each(%list)) {
1449 - if ($parameter eq "type") {next;}
1450 -
1451 - if ($value eq "White") {
1452 - push @whitelisthosts, $parameter;
1453 - }
1454 - }
1455 -
1456 - return "" unless (scalar @whitelisthosts);
1457 -
1458 -# return join "\n", sort(@whitelisthosts);
1459 - return sort(@whitelisthosts);
1460 -
1461 -}
1462 -
1463 -sub get_whitelisthelo
1464 -{
1465 - my %list = $wdb->get('whitelisthelo')->props;
1466 -
1467 - my @whitelisthelo = ();
1468 - my $parameter = "";
1469 - my $value = "";
1470 - while (($parameter,$value) = each(%list)) {
1471 - if ($parameter eq "type") {next;}
1472 -
1473 - if ($value eq "White") {
1474 - push @whitelisthelo, $parameter;
1475 - }
1476 - }
1477 -
1478 - return "" unless (scalar @whitelisthelo);
1479 -
1480 -# return join "\n", sort(@whitelisthelo);
1481 - return sort(@whitelisthelo);
1482 -}
1483 -
1484 -sub get_whitelistsenders
1485 -{
1486 - my %list = $wdb->get('whitelistsenders')->props;
1487 -
1488 - my @whitelistsenders = ();
1489 - my $parameter = "";
1490 - my $value = "";
1491 - while (($parameter,$value) = each(%list)) {
1492 - if ($parameter eq "type") {next;}
1493 -
1494 - if ($value eq "White") {
1495 - push @whitelistsenders, $parameter;
1496 - }
1497 - }
1498 -
1499 - return "" unless (scalar @whitelistsenders);
1500 -
1501 - #return join "\n", sort(@whitelistsenders);
1502 - return sort(@whitelistsenders);
1503 -}
1504 -
1505 -sub get_whitelistfrom
1506 -{
1507 - my %list = $sdb->get('wbl.global')->props;
1508 -
1509 - my @whitelistfrom = ();
1510 - my $parameter = "";
1511 - my $value = "";
1512 - while (($parameter,$value) = each(%list)) {
1513 - if ($parameter eq "type") {next;}
1514 -
1515 - if ($value eq "White") {
1516 - push @whitelistfrom, $parameter;
1517 - }
1518 - }
1519 -
1520 - return "" unless (scalar @whitelistfrom);
1521 -
1522 -# return join "\n", sort(@whitelistfrom);
1523 - return sort(@whitelistfrom);
1524 -}
1525 -
1526 -sub create_modify_black
1527 -{
1528 - my $fm = shift;
1529 - my $q = $fm->{'cgi'};
1530 -
1531 - # qmail badhelo
1532 - my %list = $wdb->get('badhelo')->props;
1533 - my $parameter = "";
1534 - my $value = "";
1535 - while (($parameter,$value) = each(%list)) {
1536 - if ($parameter eq "type") {next;}
1537 -
1538 - if ($value eq "Black") {
1539 - $wdb->get_prop_and_delete('badhelo', "$parameter");
1540 - }
1541 - }
1542 -
1543 - my $BadHelo = $q->param("badhelo");
1544 - $BadHelo =~ s/\r\n/,/g;
1545 - my @BadHelo = sort(split /,/, $BadHelo);
1546 - foreach $BadHelo (@BadHelo)
1547 - {
1548 - $wdb->set_prop('badhelo', "$BadHelo", 'Black');
1549 - }
1550 -
1551 - # qmail badmailfrom
1552 - my %list_badmailfrom = $wdb->get('badmailfrom')->props;
1553 - my $parameter_badmailfrom = "";
1554 - my $value_badmailfrom = "";
1555 - while (($parameter_badmailfrom,$value_badmailfrom) = each(%list_badmailfrom)) {
1556 - if ($parameter_badmailfrom eq "type") {next;}
1557 -
1558 - if ($value_badmailfrom eq "Black") {
1559 - $wdb->get_prop_and_delete('badmailfrom', "$parameter_badmailfrom");
1560 - }
1561 - }
1562 -
1563 - my $BadMailFrom = $q->param("badmailfrom");
1564 - $BadMailFrom =~ s/\r\n/,/g;
1565 - my @BadMailFrom = sort(split /,/, $BadMailFrom);
1566 - foreach $BadMailFrom (@BadMailFrom){
1567 - $wdb->set_prop('badmailfrom', "$BadMailFrom", 'Black');
1568 - }
1569 - # spamassassin blacklist_from
1570 - my %list_wblglobal = $sdb->get('wbl.global')->props;
1571 - my $parameter_wblglobal = "";
1572 - my $value_wblglobal = "";
1573 - while (($parameter_wblglobal,$value_wblglobal) = each(%list_wblglobal)) {
1574 - if ($parameter_wblglobal eq "type") {next;}
1575 -
1576 - if ($value_wblglobal eq "Black") {
1577 - $sdb->get_prop_and_delete('wbl.global', "$parameter_wblglobal");
1578 - }
1579 - }
1580 -
1581 - my $BlacklistFrom = $q->param("blacklistfrom");
1582 - $BlacklistFrom =~ s/\r\n/,/g;
1583 - my @BlacklistFrom = sort(split /,/, $BlacklistFrom);
1584 - foreach $BlacklistFrom (@BlacklistFrom){
1585 - $sdb->set_prop('wbl.global', "$BlacklistFrom", 'Black');
1586 - }
1587 -
1588 - ##Update email settings
1589 - unless ( system ("/sbin/e-smith/signal-event", "smeserver-wbl-update") == 0 ){
1590 - $fm->error('ERROR_UPDATING');
1591 - return undef;
1592 - }
1593 -
1594 - $fm->success('SUCCESS');
1595 -}
1596 -
1597 -sub create_modify_white
1598 -{
1599 - my $fm = shift;
1600 - my $q = $fm->{'cgi'};
1601 -
1602 - # qpsmtpd whitelisthosts
1603 - my %list = $wdb->get('whitelisthosts')->props;
1604 - my $parameter = "";
1605 - my $value = "";
1606 - while (($parameter,$value) = each(%list)) {
1607 - if ($parameter eq "type") {next;}
1608 -
1609 - if ($value eq "White") {
1610 - $wdb->get_prop_and_delete('whitelisthosts', "$parameter");
1611 - }
1612 - }
1613 -
1614 - my $WhitelistHosts = $q->param("whitelisthosts");
1615 - $WhitelistHosts =~ s/\r\n/,/g;
1616 - my @WhitelistHosts = sort(split /,/, $WhitelistHosts);
1617 - foreach $WhitelistHosts (@WhitelistHosts)
1618 - {
1619 - $wdb->set_prop('whitelisthosts', "$WhitelistHosts", 'White');
1620 - }
1621 -
1622 - # qpsmtpd whitelisthelo
1623 - my %list_whitelisthelo = $wdb->get('whitelisthelo')->props;
1624 - my $parameter_whitelisthelo = "";
1625 - my $value_whitelisthelo = "";
1626 - while (($parameter_whitelisthelo,$value_whitelisthelo) = each(%list_whitelisthelo)) {
1627 - if ($parameter_whitelisthelo eq "type") {next;}
1628 -
1629 - if ($value_whitelisthelo eq "White") {
1630 - $wdb->get_prop_and_delete('whitelisthelo', "$parameter_whitelisthelo");
1631 - }
1632 - }
1633 -
1634 - my $WhitelistHelo = $q->param("whitelisthelo");
1635 - $WhitelistHelo =~ s/\r\n/,/g;
1636 - my @WhitelistHelo = sort(split /,/, $WhitelistHelo);
1637 - foreach $WhitelistHelo (@WhitelistHelo)
1638 - {
1639 - $wdb->set_prop('whitelisthelo', "$WhitelistHelo", 'White');
1640 - }
1641 -
1642 - # qpsmtpd whitelistsenders
1643 - my %list_whitelistsenders = $wdb->get('whitelistsenders')->props;
1644 - my $parameter_whitelistsenders = "";
1645 - my $value_whitelistsenders = "";
1646 - while (($parameter_whitelistsenders,$value_whitelistsenders) = each(%list_whitelistsenders)) {
1647 - if ($parameter_whitelistsenders eq "type") {next;}
1648 -
1649 - if ($value_whitelistsenders eq "White") {
1650 - $wdb->get_prop_and_delete('whitelistsenders', "$parameter_whitelistsenders");
1651 - }
1652 - }
1653 -
1654 - my $WhitelistSenders = $q->param("whitelistsenders");
1655 - $WhitelistSenders =~ s/\r\n/,/g;
1656 - my @WhitelistSenders = sort(split /,/, $WhitelistSenders);
1657 - foreach $WhitelistSenders (@WhitelistSenders)
1658 - {
1659 - $wdb->set_prop('whitelistsenders', "$WhitelistSenders", 'White');
1660 - }
1661 -
1662 - # spamassassin whitelist_from
1663 - my %list_wblglobal = $sdb->get('wbl.global')->props;
1664 - my $parameter_wblglobal = "";
1665 - my $value_wblglobal = "";
1666 - while (($parameter_wblglobal,$value_wblglobal) = each(%list_wblglobal)) {
1667 - if ($parameter_wblglobal eq "type") {next;}
1668 -
1669 - if ($value_wblglobal eq "White") {
1670 - $sdb->get_prop_and_delete('wbl.global', "$parameter_wblglobal");
1671 - }
1672 - }
1673 -
1674 - my $WhitelistFrom = $q->param("whitelistfrom");
1675 - $WhitelistFrom =~ s/\r\n/,/g;
1676 - my @WhitelistFrom = sort(split /,/, $WhitelistFrom);
1677 - foreach $WhitelistFrom (@WhitelistFrom){
1678 - $sdb->set_prop('wbl.global', "$WhitelistFrom", 'White');
1679 - }
1680 -
1681 - ##Update email settings
1682 - unless ( system ("/sbin/e-smith/signal-event", "smeserver-wbl-update") == 0 ){
1683 - $fm->error('ERROR_UPDATING');
1684 - return undef;
1685 - }
1686 -
1687 - $fm->success('SUCCESS');
1688 -}
1689 -
1690 -sub email_update
1691 -{
1692 - my $fm = shift;
1693 - my $q = $fm->{'cgi'};
1694 -
1695 - unless ( system ("/sbin/e-smith/signal-event", "smeserver-wbl-update") == 0 )
1696 - {
1697 - $fm->error('ERROR_UPDATING');
1698 - return undef;
1699 - }
1700 -
1701 - $fm->success('SUCCESS');
1702 -
1703 -}
1704 -
1705 -sub get_blacklistfrom
1706 -{
1707 - my %list = $sdb->get('wbl.global')->props;
1708 -
1709 - my @blacklistfrom = ();
1710 - my $parameter = "";
1711 - my $value = "";
1712 - while (($parameter,$value) = each(%list)) {
1713 - if ($parameter eq "type") {next;}
1714 -
1715 - if ($value eq "Black") {
1716 - push @blacklistfrom, $parameter;
1717 - }
1718 - }
1719 -
1720 - return "" unless (scalar @blacklistfrom);
1721 -
1722 - return join "\n", sort(@blacklistfrom);
1723 -}
1724 -sub create_modify_rbl
1725 -{
1726 - my $fm = shift;
1727 - my $q = $fm->{'cgi'};
1728 -
1729 - my $dnsbl = $q->param('dnsbl');
1730 - $db->set_prop('qpsmtpd', 'DNSBL', "$dnsbl");
1731 -
1732 - my $rhsbl = $q->param('rhsbl');
1733 - $db->set_prop('qpsmtpd', 'RHSBL', "$rhsbl");
1734 -
1735 -
1736 - my $sbllistcgi = $q->param('sbllist');
1737 - my @sbllistcgi = split /\s{2,}/, $sbllistcgi;
1738 - my $sbllistdb = '';
1739 - foreach (@sbllistcgi) { $sbllistdb = $sbllistdb . ',' . $_; }
1740 - $sbllistdb =~ s/^,//;
1741 -
1742 - $db->set_prop('qpsmtpd', 'SBLList', "$sbllistdb");
1743 -
1744 -
1745 - my $rbllistcgi = $q->param('rbllist');
1746 - my @rbllistcgi = split /\s{2,}/, $rbllistcgi;
1747 - my $rbllistdb = '';
1748 - foreach (@rbllistcgi) { $rbllistdb = $rbllistdb . ',' . $_; }
1749 - $rbllistdb =~ s/^,//;
1750 -
1751 - $db->set_prop('qpsmtpd', 'RBLList', "$rbllistdb");
1752 -
1753 - ##Update email settings
1754 -
1755 - unless ( system ("/sbin/e-smith/signal-event", "smeserver-wbl-update") == 0 ){
1756 - $fm->error('ERROR_UPDATING');
1757 - return undef;
1758 - }
1759 -
1760 - $fm->success('SUCCESS');
1761 -}
1762 -
1763 -#Subroutine to display buttons
1764 -#sub print_custom_button{
1765 -# my ($fm,$desc,$url) = @_;
1766 -# my $q = $fm->{cgi};
1767 -# $url="wbl?page=0&page_stack=&Next=Next&wherenext=".$url;
1768 -# print " <tr>\n <td colspan='2'>\n";
1769 -# print $q->p($q->a({href => $url, -class => "button-like"},$fm->localise($desc)));
1770 -# print qq(</tr>\n);
1771 -# return undef;
1772 -#}
1773 -#;

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed