root/tags/omega-1.0.0-rc3/engine/ispcp-mbox-mngr

Revision 903, 73.3 kB (checked in by breaki, 1 year ago)

Fixed #825: Added permit_* rules in Postfix's main.cf
Fixed undeclared variables in ispcp-mbox-mngr

Line 
1 #!/usr/bin/perl
2
3 # ispCP ω (OMEGA) a Virtual Hosting Control Panel
4 # Copyright (c) 2001-2006 by moleSoftware GmbH
5 # http://www.molesoftware.com
6 # Copyright (c) 2006-2007 by isp Control Panel
7 # http://isp-control.net
8 #
9 #
10 # License:
11 #    This program is free software; you can redistribute it and/or
12 #    modify it under the terms of the MPL Mozilla Public License
13 #    as published by the Free Software Foundation; either version 1.1
14 #    of the License, or (at your option) any later version.
15 #
16 #    This program is distributed in the hope that it will be useful,
17 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
18 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 #    MPL Mozilla Public License for more details.
20 #
21 #    You may have received a copy of the MPL Mozilla Public License
22 #    along with this program.
23 #
24 #    An on-line copy of the MPL Mozilla Public License can be found
25 #    http://www.mozilla.org/MPL/MPL-1.1.html
26 #
27 #
28 # The ISPCP ω Home Page is at:
29 #
30 #    http://isp-control.net
31 #
32
33
34 use FindBin;
35 use lib "$FindBin::Bin/";
36 require 'ispcp_common_code.pl';
37
38 use strict;
39
40 use warnings;
41
42 $main::mail_task_id = undef;
43
44 sub get_mta_hash_value {
45
46     my ($hfile, $key) = @_;
47
48     push_el(\@main::el, 'get_mta_hash_value()', 'Starting...');
49
50     if (
51         !defined($hfile) || $hfile eq '' ||
52         !defined($key) || $key eq ''
53        ) {
54
55         push_el(\@main::el, 'get_mta_hash_value()', 'ERROR: Undefined Input Data...');
56
57         return (-1, '');
58
59     }
60
61     my ($rs, $rdata) = (undef, undef);
62
63     ($rs, $rdata) = get_file($hfile);
64
65     return $rs if ($rs != 0);
66
67     $rdata =~ /^$key\t+([^\n]+)\n/gim; $rdata = $1;
68
69     if (!defined($rdata)) { $rdata = ''; }
70
71     push_el(\@main::el, 'get_mta_hash_value()', 'Ending...');
72
73     return (0, $rdata);
74 }
75
76 sub del_mta_hash_value {
77
78     my ($hfile, $key) = @_;
79
80     push_el(\@main::el, 'del_mta_hash_value()', 'Starting...');
81
82     if (
83         !defined($hfile) || $hfile eq '' ||
84         !defined($key) || $key eq ''
85        ) {
86
87         push_el(\@main::el, 'del_mta_hash_value()', 'ERROR: Undefined Input Data...');
88
89         return -1;
90
91     }
92
93     my ($rs, $rdata) = (undef, undef);
94
95     ($rs, $rdata) = get_mta_hash_value($hfile, $key);
96
97     return 0 if ($rdata eq '');
98
99     ($rs, $rdata) = get_file($hfile);
100
101     return $rs if ($rs != 0);
102
103     $rdata =~ s/^$key\t+([^\n]+)\n//gim;
104
105     $rs = store_file($hfile, $rdata, 'root', 'root', 0644);
106
107     return $rs if ($rs != 0);
108
109     push_el(\@main::el, 'del_mta_hash_value()', 'Ending...');
110
111     return 0;
112 }
113
114 sub set_mta_hash_value {
115
116     my ($hfile, $key, $value) = @_;
117
118     push_el(\@main::el, 'set_mta_hash_value()', 'Starting...');
119
120     if (
121         !defined($hfile) || $hfile eq '' ||
122         !defined($key) || $key eq '' ||
123         !defined($value) || $value eq ''
124        ) {
125
126         push_el(\@main::el, 'set_mta_hash_value()', 'ERROR: Undefined Input Data...');
127
128         return -1;
129
130     }
131
132     my ($rs, $rdata, $fdata) = (undef, undef, undef);
133
134     ($rs, $rdata) = get_mta_hash_value($hfile, $key);
135
136     return $rs if ($rs != 0);
137
138     ($rs, $fdata) = get_file($hfile);
139
140     return $rs if ($rs != 0);
141
142     $fdata =~ s/^$key\t+([^\n]+)\n//gim if ($rdata ne '');
143
144     $fdata .= "$key\t$value\n";
145
146     $rs = store_file($hfile, $fdata, 'root', 'root', 0644);
147
148     return $rs if ($rs != 0);
149
150     push_el(\@main::el, 'set_mta_hash_value()', 'Ending...');
151
152     return 0;
153 }
154
155 sub mbox_mngr_start_up {
156
157     my ($rs, $rdata) = (undef, undef);
158
159     push_el(\@main::el, 'mbox_mngr_start_up()', 'Starting...');
160
161     # checking for master process;
162
163     $rs = check_master();
164
165     return $rs if ($rs != 0);
166
167     # Let's clear Execution Logs, if any.
168
169     if (-e $main::ispcp_mbox_mngr_el) {
170
171         $rs = del_file($main::ispcp_mbox_mngr_el);
172
173         return $rs if ($rs != 0);
174
175     }
176
177     # config check;
178
179     $rs = get_conf();
180
181     return $rs if ($rs != 0);
182
183     # sql check;
184
185     #
186     # getting initial data also must be done here;
187     #
188
189     my $sql = "
190         SELECT
191                 mail_id,
192                 mail_acc,
193                 mail_pass,
194                 mail_forward,
195                 domain_id,
196                 mail_type,
197                 sub_id,
198                 status,
199                 mail_auto_respond,
200                 quota,
201                 mail_addr
202         FROM
203                 mail_users
204     ";
205
206     ($rs, $rdata) = doSQL($sql);
207
208     return $rs if ($rs != 0);
209
210     $rs = get_domain_ids();
211
212     return $rs if ($rs != 0);
213
214     $rs = get_subdom_ids();
215
216     return $rs if ($rs != 0);
217
218     $rs = get_alias_ids();
219
220     return $rs if ($rs != 0);
221
222
223     $main::mail_task_id = $ARGV[0];
224
225
226     push_el(\@main::el, 'mbox_mngr_start_up()', 'Ending...');
227
228     return 0;
229
230 }
231
232 sub mbox_mngr_shut_down {
233
234     my $rs = undef;
235
236     push_el(\@main::el, 'mbox_mngr_shut_down()', 'Starting...');
237
238     push_el(\@main::el, 'mbox_mngr_shut_down()', 'Ending...');
239
240     return 0;
241
242 }
243
244 #
245 #
246 #
247
248 sub mbox_add_mta_cfg_autorespond_data {
249
250     my ($mbox_data) = @_;
251
252     push_el(\@main::el, 'mbox_add_mta_cfg_autorespond_data()', 'Starting...');
253
254     if (!defined($mbox_data) || $mbox_data eq '') {
255
256         push_el(\@main::el, 'mbox_add_mta_cfg_autorespond_data()', 'ERROR: Undefined Input Data...');
257
258         return -1;
259
260     }
261
262     my ($rs, $rdata) = (undef, undef);
263
264     my $mail_id = @$mbox_data[0];
265
266     my $mail_acc = @$mbox_data[1];
267
268     my $mail_forward = @$mbox_data[3];
269
270     my $mail_dmn_id = @$mbox_data[4];
271
272     my $mail_type = @$mbox_data[5];
273
274     my $mail_sub_id = @$mbox_data[6];
275
276     my $mail_autorespond = @$mbox_data[8];
277
278
279     my $conf_dir = $main::cfg{'CONF_DIR'};
280
281     my $cmd_postmap = $main::cfg{'CMD_POSTMAP'};
282
283     my $working_dir = "$conf_dir/postfix/working";
284
285     my $backup_dir = "$conf_dir/postfix/backup";
286
287     my $timestamp = time;
288
289     my ($sys, $working) = (undef, undef);
290
291     my $aliases_cfg = "/etc/postfix/ispcp/aliases";
292
293     my $aliases_working_cfg = "$working_dir/aliases";
294
295     my $aliases_backup_cfg = "$backup_dir/aliases.$timestamp";
296
297     my $transport_cfg = "/etc/postfix/ispcp/transport";
298
299     my $transport_working_cfg = "$working_dir/transport";
300
301     my $transport_backup_cfg = "$backup_dir/transport.$timestamp";
302
303
304     ($rs, $sys) = get_file($aliases_cfg);
305
306     return $rs if ($rs != 0);
307
308     $rs = store_file($aliases_backup_cfg, $sys, 'root', 'root', 0644);
309
310     return $rs if ($rs != 0);
311
312     ($rs, $sys) = get_file($transport_cfg);
313
314     return $rs if ($rs != 0);
315
316     $rs = store_file($transport_backup_cfg, $sys, 'root', 'root', 0644);
317
318     return $rs if ($rs != 0);
319
320
321     do {
322
323         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
324
325         my $hash_key = "$mail_acc\@$dmn_name";
326
327         my $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name";
328
329                 $rs = del_mta_hash_value($aliases_working_cfg, $hash_key);
330
331                 return $rs if ($rs != 0);
332
333         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value);
334
335         return $rs if ($rs != 0);
336
337         ($rs, $working) = get_file($aliases_working_cfg);
338
339         return $rs if ($rs != 0);
340
341         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
342
343         return $rs if ($rs != 0);
344
345
346         $hash_key = "ispcp-arpl.$dmn_name";
347
348         $hash_value = "ispcp-arpl:";
349
350         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value);
351
352         return $rs if ($rs != 0);
353
354         ($rs, $working) = get_file($transport_working_cfg);
355
356         return $rs if ($rs != 0);
357
358         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
359
360         return $rs if ($rs != 0);
361
362     } if ($mail_type eq 'normal_mail');
363
364     do {
365
366         my $dmn_name = $main::als_id_name{$mail_sub_id};
367
368         my $hash_key = "$mail_acc\@$dmn_name";
369
370         my $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name";
371
372                 $rs = del_mta_hash_value($aliases_working_cfg, $hash_key);
373
374                 return $rs if ($rs != 0);
375
376         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value);
377
378         return $rs if ($rs != 0);
379
380         ($rs, $working) = get_file($aliases_working_cfg);
381
382         return $rs if ($rs != 0);
383
384         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
385
386         return $rs if ($rs != 0);
387
388
389         $hash_key = "ispcp-arpl.$dmn_name";
390
391         $hash_value = "ispcp-arpl:";
392
393         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value);
394
395         return $rs if ($rs != 0);
396
397         ($rs, $working) = get_file($transport_working_cfg);
398
399         return $rs if ($rs != 0);
400
401         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
402
403         return $rs if ($rs != 0);
404
405     } if ($mail_type eq 'alias_mail');
406
407     do {
408
409         my $sub_pref = $main::sub_id_name{$mail_sub_id};
410
411         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
412
413         my $sub_name = "$sub_pref.$dmn_name";
414
415         my $hash_key = "$mail_acc\@$sub_name";
416
417         my $hash_value = "$mail_acc\@$sub_name,$mail_acc\@ispcp-arpl.$sub_name";
418
419                 $rs = del_mta_hash_value($aliases_working_cfg, $hash_key);
420
421                 return $rs if ($rs != 0);
422
423         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value);
424
425         return $rs if ($rs != 0);
426
427         ($rs, $working) = get_file($aliases_working_cfg);
428
429         return $rs if ($rs != 0);
430
431         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
432
433         return $rs if ($rs != 0);
434
435
436         $hash_key = "ispcp-arpl.$sub_name";
437
438         $hash_value = "ispcp-arpl:";
439
440         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value);
441
442         return $rs if ($rs != 0);
443
444         ($rs, $working) = get_file($transport_working_cfg);
445
446         return $rs if ($rs != 0);
447
448         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
449
450         return $rs if ($rs != 0);
451
452     } if ($mail_type eq 'subdom_mail');
453
454     do {
455
456         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
457
458         my $hash_key = "$mail_acc\@$dmn_name";
459
460         my $hash_value = undef;
461
462         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key);
463
464         return $rs if ($rs != 0);
465
466         if ($rdata eq '') {
467
468             $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name";
469
470         } else {
471
472             $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$dmn_name";
473
474         }
475
476         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value);
477
478         return $rs if ($rs != 0);
479
480
481         ($rs, $working) = get_file($aliases_working_cfg);
482
483         return $rs if ($rs != 0);
484
485         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
486
487         return $rs if ($rs != 0);
488
489
490         $hash_key = "ispcp-arpl.$dmn_name";
491
492         $hash_value = "ispcp-arpl:";
493
494         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value);
495
496         return $rs if ($rs != 0);
497
498         ($rs, $working) = get_file($transport_working_cfg);
499
500         return $rs if ($rs != 0);
501
502         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
503
504         return $rs if ($rs != 0);
505
506     } if ($mail_type eq 'normal_forward');
507
508     do {
509
510         my $dmn_name = $main::als_id_name{$mail_sub_id};
511
512         my $hash_key = "$mail_acc\@$dmn_name";
513
514         my $hash_value = undef;
515
516         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key);
517
518         return $rs if ($rs != 0);
519
520         if ($rdata eq '') {
521
522             $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name";
523
524         } else {
525
526             $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$dmn_name";
527
528         }
529
530         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value);
531
532         return $rs if ($rs != 0);
533
534
535         ($rs, $working) = get_file($aliases_working_cfg);
536
537         return $rs if ($rs != 0);
538
539         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
540
541         return $rs if ($rs != 0);
542
543
544         $hash_key = "ispcp-arpl.$dmn_name";
545
546         $hash_value = "ispcp-arpl:";
547
548         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value);
549
550         return $rs if ($rs != 0);
551
552         ($rs, $working) = get_file($transport_working_cfg);
553
554         return $rs if ($rs != 0);
555
556         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
557
558         return $rs if ($rs != 0);
559
560     } if ($mail_type eq 'alias_forward');
561
562     do {
563         my $sub_pref = $main::sub_id_name{$mail_sub_id};
564
565         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
566
567         my $sub_name = "$sub_pref.$dmn_name";
568
569         my $hash_key = "$mail_acc\@$sub_name";
570
571         my $hash_value = undef;
572
573         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key);
574
575         return $rs if ($rs != 0);
576
577         if ($rdata eq '') {
578
579             $hash_value = "$mail_acc\@$sub_name,$mail_acc\@ispcp-arpl.$sub_name";
580
581         } else {
582
583             $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$sub_name";
584
585         }
586
587         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value);
588
589         return $rs if ($rs != 0);
590
591
592         ($rs, $working) = get_file($aliases_working_cfg);
593
594         return $rs if ($rs != 0);
595
596         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
597
598         return $rs if ($rs != 0);
599
600
601         $hash_key = "ispcp-arpl.$sub_name";
602
603         $hash_value = "ispcp-arpl:";
604
605         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value);
606
607         return $rs if ($rs != 0);
608
609         ($rs, $working) = get_file($transport_working_cfg);
610
611         return $rs if ($rs != 0);
612
613         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
614
615         return $rs if ($rs != 0);
616
617     } if ($mail_type eq 'subdom_forward');
618
619     $rs = sys_command("$cmd_postmap $transport_cfg");
620
621     return $rs if ($rs != 0);
622
623     push_el(\@main::el, 'mbox_add_mta_cfg_autorespond_data()', 'Ending...');
624
625     return 0;
626
627 }
628
629 sub mbox_check_last_transport_entry {
630
631     my ($mbox_data) = @_;
632
633     push_el(\@main::el, 'mbox_check_last_transport_entry()', 'Starting...');
634
635     if (!defined($mbox_data) || $mbox_data eq '') {
636
637         push_el(\@main::el, 'mbox_check_last_transport_entry()', 'ERROR: Undefined Input Data...');
638
639         return -1;
640
641     }
642
643     my ($rs, $rows, $sql) = (undef, undef, undef);
644
645     my $mail_dmn_id = @$mbox_data[4];
646
647     my $mail_sub_id = @$mbox_data[6];
648
649     my $mail_type = @$mbox_data[5];
650
651     if ($mail_type eq 'alias_mail' || $mail_type eq 'alias_forward') {
652
653         $sql = "select count(mail_id) as cnt from mail_users where (status = 'ok' or status = 'change') and mail_auto_respond != '_no_' and domain_id = $mail_dmn_id and sub_id = $mail_sub_id and mail_type != 'normal_catchall' and mail_type != 'alias_catchall';";
654
655     } else {
656
657         $sql = "select count(mail_id) as cnt from mail_users where (status = 'ok' or status = 'change') and mail_auto_respond != '_no_' and domain_id = $mail_dmn_id and mail_type != 'normal_catchall' and mail_type != 'alias_catchall';";
658
659     }
660
661     ($rs, $rows) = doSQL($sql);
662
663     return $rs if ($rs != 0);
664
665     $rs = @$rows[0];
666
667     push_el(\@main::el, 'mbox_check_last_transport_entry()', 'Ending...');
668
669     return @$rs[0];
670
671 }
672
673 sub mbox_del_last_transport_entry {
674
675     my ($mbox_data) = @_;
676
677     push_el(\@main::el, 'mbox_del_last_transport_entry()', 'Starting...');
678
679     if (!defined($mbox_data) || $mbox_data eq '') {
680
681         push_el(\@main::el, 'mbox_del_last_transport_entry()', 'ERROR: Undefined Input Data...');
682
683         return -1;
684
685     }
686
687     my ($rs, $rdata) = (undef, undef);
688
689
690     my $mail_dmn_id = @$mbox_data[4];
691
692     my $mail_sub_id = @$mbox_data[6];
693
694     my $mail_type = @$mbox_data[5];
695
696     my $dmn_name = $main::domain_id_name{$mail_dmn_id};
697
698
699     my $conf_dir = $main::cfg{'CONF_DIR'};
700
701     my $working_dir = "$conf_dir/postfix/working";
702
703     my $transport_working_cfg = "$working_dir/transport";
704
705
706     my $hash_key = "ispcp-arpl.$dmn_name";
707
708     if ($mail_type eq 'alias_mail' || $mail_type eq 'alias_forward') {
709
710         my $als_name = $main::als_id_name{$mail_sub_id};
711
712         $hash_key = "ispcp-arpl.$als_name";
713
714     }
715
716
717     $rs = del_mta_hash_value($transport_working_cfg, $hash_key);
718
719     return $rs if ($rs != 0);
720
721
722     if ($mail_type ne 'alias_mail' && $mail_type ne 'alias_forward') {
723
724         my ($sub_key, $sub_value) = (undef, undef);
725
726         foreach $sub_key (keys %main::sub_id_parentid) {
727
728             $sub_value = $main::sub_id_parentid{$sub_key};
729
730             if ($sub_value == $mail_dmn_id) {
731
732                 # We've got one ;). It must be removed;
733
734                 my $sub_pref = $main::sub_id_name{$sub_key};
735
736                 my $sub_name = "$sub_pref.$dmn_name";
737
738                 $hash_key = "ispcp-arpl.$sub_name";
739
740                 $rs = del_mta_hash_value($transport_working_cfg, $hash_key);
741
742                 return $rs if ($rs != 0);
743
744             }
745
746         }
747
748     }
749
750     push_el(\@main::el, 'mbox_del_last_transport_entry()', 'Ending...');
751
752     return 0;
753
754 }
755
756 sub mbox_del_mta_cfg_autorespond_data {
757
758     my ($mbox_data) = @_;
759
760     push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'Starting...');
761
762     if (!defined($mbox_data) || $mbox_data eq '') {
763
764         push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'ERROR: Undefined Input Data...');
765
766         return -1;
767
768     }
769
770     my ($rs, $rdata) = (undef, undef);
771
772     my $mail_id = @$mbox_data[0];
773
774     my $mail_acc = @$mbox_data[1];
775
776     my $mail_forward = @$mbox_data[3];
777
778     my $mail_dmn_id = @$mbox_data[4];
779
780     my $mail_type = @$mbox_data[5];
781
782     my $mail_sub_id = @$mbox_data[6];
783
784     my $mail_autorespond = @$mbox_data[8];
785
786
787     my $conf_dir = $main::cfg{'CONF_DIR'};
788
789     my $cmd_postmap = $main::cfg{'CMD_POSTMAP'};
790
791     my $working_dir = "$conf_dir/postfix/working";
792
793     my $backup_dir = "$conf_dir/postfix/backup";
794
795     my $timestamp = time;
796
797     my ($sys, $working) = (undef, undef);
798
799     my $aliases_cfg = "/etc/postfix/ispcp/aliases";
800
801     my $aliases_working_cfg = "$working_dir/aliases";
802
803     my $aliases_backup_cfg = "$backup_dir/aliases.$timestamp";
804
805     my $transport_cfg = "/etc/postfix/ispcp/transport";
806
807     my $transport_working_cfg = "$working_dir/transport";
808
809     my $transport_backup_cfg = "$backup_dir/transport.$timestamp";
810
811
812     ($rs, $sys) = get_file($aliases_cfg);
813
814     return $rs if ($rs != 0);
815
816     $rs = store_file($aliases_backup_cfg, $sys, 'root', 'root', 0644);
817
818     return $rs if ($rs != 0);
819
820     ($rs, $sys) = get_file($transport_cfg);
821
822     return $rs if ($rs != 0);
823
824     $rs = store_file($transport_backup_cfg, $sys, 'root', 'root', 0644);
825
826     return $rs if ($rs != 0);
827
828
829     do {
830
831         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
832
833         my $hash_key = "$mail_acc\@$dmn_name";
834
835         $rs = del_mta_hash_value($aliases_working_cfg, $hash_key);
836
837         return $rs if ($rs != 0);
838
839
840         ($rs, $working) = get_file($aliases_working_cfg);
841
842         return $rs if ($rs != 0);
843
844         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
845
846         return $rs if ($rs != 0);
847
848
849         $rs = mbox_check_last_transport_entry($mbox_data);
850
851         if ($rs == 0) {
852
853             $rs = mbox_del_last_transport_entry($mbox_data);
854
855             return $rs if ($rs != 0);
856
857         } elsif ($rs == -1) {
858
859             return $rs;
860
861         }
862
863
864         ($rs, $working) = get_file($transport_working_cfg);
865
866         return $rs if ($rs != 0);
867
868         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
869
870         return $rs if ($rs != 0);
871
872     } if ($mail_type eq 'normal_mail');
873
874     do {
875
876         my $dmn_name = $main::als_id_name{$mail_sub_id};
877
878         my $hash_key = "$mail_acc\@$dmn_name";
879
880         $rs = del_mta_hash_value($aliases_working_cfg, $hash_key);
881
882         return $rs if ($rs != 0);
883
884
885         ($rs, $working) = get_file($aliases_working_cfg);
886
887         return $rs if ($rs != 0);
888
889         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
890
891         return $rs if ($rs != 0);
892
893
894         $rs = mbox_check_last_transport_entry($mbox_data);
895
896         if ($rs == 0) {
897
898             $rs = mbox_del_last_transport_entry($mbox_data);
899
900             return $rs if ($rs != 0);
901
902         } elsif ($rs == -1) {
903
904             return $rs;
905
906         }
907
908
909         ($rs, $working) = get_file($transport_working_cfg);
910
911         return $rs if ($rs != 0);
912
913         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
914
915         return $rs if ($rs != 0);
916
917     } if ($mail_type eq 'alias_mail');
918
919     do {
920
921         my $sub_pref = $main::sub_id_name{$mail_sub_id};
922
923         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
924
925         my $sub_name = "$sub_pref.$dmn_name";
926
927         my $hash_key = "$mail_acc\@$sub_name";
928
929
930         $rs = del_mta_hash_value($aliases_working_cfg, $hash_key);
931
932         return $rs if ($rs != 0);
933
934         ($rs, $working) = get_file($aliases_working_cfg);
935
936         return $rs if ($rs != 0);
937
938         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
939
940         return $rs if ($rs != 0);
941
942
943         $rs = mbox_check_last_transport_entry($mbox_data);
944
945         if ($rs == 0) {
946
947             $rs = mbox_del_last_transport_entry($mbox_data);
948
949             return $rs if ($rs != 0);
950
951         } elsif ($rs == -1) {
952
953             return $rs;
954
955         }
956
957
958         ($rs, $working) = get_file($transport_working_cfg);
959
960         return $rs if ($rs != 0);
961
962         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
963
964         return $rs if ($rs != 0);
965
966     } if ($mail_type eq 'subdom_mail');
967
968     do {
969
970         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
971
972         my $hash_key = "$mail_acc\@$dmn_name";
973
974
975         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key);
976
977         return $rs if ($rs != 0);
978
979
980         if ($rdata ne '') {
981
982             $rdata =~ s/\,$mail_acc\@ispcp-arpl\.$dmn_name//gi;
983
984             $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $rdata);
985
986             return $rs if ($rs != 0);
987
988         }
989
990
991         ($rs, $working) = get_file($aliases_working_cfg);
992
993         return $rs if ($rs != 0);
994
995         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
996
997         return $rs if ($rs != 0);
998
999
1000         $rs = mbox_check_last_transport_entry($mbox_data);
1001
1002         if ($rs == 0) {
1003
1004             $rs = mbox_del_last_transport_entry($mbox_data);
1005
1006             return $rs if ($rs != 0);
1007
1008         } elsif ($rs == -1) {
1009
1010             return $rs;
1011
1012         }
1013
1014
1015         ($rs, $working) = get_file($transport_working_cfg);
1016
1017         return $rs if ($rs != 0);
1018
1019         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
1020
1021         return $rs if ($rs != 0);
1022
1023     } if ($mail_type eq 'normal_forward');
1024
1025     do {
1026
1027         my $dmn_name = $main::als_id_name{$mail_sub_id};
1028
1029         my $hash_key = "$mail_acc\@$dmn_name";
1030
1031
1032         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key);
1033
1034         return $rs if ($rs != 0);
1035
1036
1037         if ($rdata ne '') {
1038
1039             $rdata =~ s/\,$mail_acc\@ispcp-arpl\.$dmn_name//gi;
1040
1041             $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $rdata);
1042
1043             return $rs if ($rs != 0);
1044
1045         }
1046
1047
1048         ($rs, $working) = get_file($aliases_working_cfg);
1049
1050         return $rs if ($rs != 0);
1051
1052         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
1053
1054         return $rs if ($rs != 0);
1055
1056
1057         $rs = mbox_check_last_transport_entry($mbox_data);
1058
1059         if ($rs == 0) {
1060
1061             $rs = mbox_del_last_transport_entry($mbox_data);
1062
1063             return $rs if ($rs != 0);
1064
1065         } elsif ($rs == -1) {
1066
1067             return $rs;
1068
1069         }
1070
1071
1072         ($rs, $working) = get_file($transport_working_cfg);
1073
1074         return $rs if ($rs != 0);
1075
1076         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
1077
1078         return $rs if ($rs != 0);
1079
1080     } if ($mail_type eq 'alias_forward');
1081
1082     do {
1083
1084         my $sub_pref = $main::sub_id_name{$mail_sub_id};
1085
1086         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
1087
1088         my $sub_name = "$sub_pref.$dmn_name";
1089
1090         my $hash_key = "$mail_acc\@$sub_name";
1091
1092
1093         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key);
1094
1095         return $rs if ($rs != 0);
1096
1097
1098         if ($rdata ne '') {
1099
1100             $rdata =~ s/\,$mail_acc\@ispcp-arpl\.$sub_name//gi;
1101
1102             $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $rdata);
1103
1104             return $rs if ($rs != 0);
1105
1106         }
1107
1108
1109         ($rs, $working) = get_file($aliases_working_cfg);
1110
1111         return $rs if ($rs != 0);
1112
1113         $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
1114
1115         return $rs if ($rs != 0);
1116
1117
1118         $rs = mbox_check_last_transport_entry($mbox_data);
1119
1120         if ($rs == 0) {
1121
1122             $rs = mbox_del_last_transport_entry($mbox_data);
1123
1124             return $rs if ($rs != 0);
1125
1126         } elsif ($rs == -1) {
1127
1128             return $rs;
1129
1130         }
1131
1132
1133         ($rs, $working) = get_file($transport_working_cfg);
1134
1135         return $rs if ($rs != 0);
1136
1137         $rs = store_file($transport_cfg, $working, 'root', 'root', 0644);
1138
1139         return $rs if ($rs != 0);
1140
1141     } if ($mail_type eq 'subdom_forward');
1142
1143
1144     $rs = sys_command("$cmd_postmap $transport_cfg");
1145
1146     return $rs if ($rs != 0);
1147
1148
1149     push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'Ending...');
1150
1151     return 0;
1152
1153 }
1154
1155 sub mbox_add_mta_cfg_data {
1156
1157     my ($mbox_data) = @_;
1158
1159     push_el(\@main::el, 'mbox_add_mta_cfg_data()', 'Starting...');
1160
1161     if (!defined($mbox_data) || $mbox_data eq '') {
1162
1163         push_el(\@main::el, 'mbox_add_mta_cfg_data()', 'ERROR: Undefined Input Data...');
1164
1165         return -1;
1166
1167     }
1168
1169     my ($rs, $rdata) = (undef, undef);
1170
1171
1172     my $mail_id = @$mbox_data[0];
1173
1174     my $mail_acc = @$mbox_data[1];
1175
1176     my $mail_forward = @$mbox_data[3];
1177
1178     my $mail_dmn_id = @$mbox_data[4];
1179
1180     my $mail_type = @$mbox_data[5];
1181
1182     my $mail_sub_id = @$mbox_data[6];
1183
1184     my $mail_autorespond = @$mbox_data[8];
1185
1186
1187     my $conf_dir = $main::cfg{'CONF_DIR'};
1188
1189     my $cmd_postmap = $main::cfg{'CMD_POSTMAP'};
1190
1191
1192     my $tpl_dir = "$conf_dir/postfix/parts";
1193
1194     my $working_dir = "$conf_dir/postfix/working";
1195
1196     my $backup_dir = "$conf_dir/postfix/backup";
1197
1198     my $timestamp = time;
1199
1200     my ($sys, $working) = (undef, undef);
1201
1202     my $mailboxes_cfg = "/etc/postfix/ispcp/mailboxes";
1203
1204     my $mailboxes_working_cfg = "$working_dir/mailboxes";
1205
1206     my $mailboxes_backup_cfg = "$backup_dir/mailboxes.$timestamp";
1207
1208     my $aliases_cfg = "/etc/postfix/ispcp/aliases";
1209
1210     my $aliases_working_cfg = "$working_dir/aliases";
1211
1212     my $aliases_backup_cfg = "$backup_dir/aliases.$timestamp";
1213
1214
1215     ($rs, $sys) = get_file($mailboxes_cfg);
1216
1217     return $rs if ($rs != 0);
1218
1219     $rs = store_file($mailboxes_backup_cfg, $sys, 'root', 'root', 0644);
1220
1221     return $rs if ($rs != 0);
1222
1223     ($rs, $sys) = get_file($aliases_cfg);
1224
1225     return $rs if ($rs != 0);
1226
1227     $rs = store_file($aliases_backup_cfg, $sys, 'root', 'root', 0644);
1228
1229     return $rs if ($rs != 0);
1230
1231
1232     do {
1233
1234         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
1235
1236         my $hash_key = "$mail_acc\@$dmn_name";
1237
1238         my $hash_value = "$dmn_name/$mail_acc/";
1239
1240         $rs = set_mta_hash_value($mailboxes_working_cfg, $hash_key, $hash_value);
1241
1242         return $rs if ($rs != 0);
1243
1244         ($rs, $working) = get_file($mailboxes_working_cfg);
1245
1246         return $rs if ($rs != 0);
1247
1248         $rs = store_file($mailboxes_cfg, $working, 'root', 'root', 0644);
1249
1250         return $rs if ($rs != 0);
1251
1252         if ($mail_autorespond ne '_no_') {
1253
1254             $rs = mbox_add_mta_cfg_autorespond_data($mbox_data);
1255
1256             return $rs if ($rs != 0);
1257
1258         } else {
1259
1260             $rs = mbox_del_mta_cfg_autorespond_data($mbox_data);
1261
1262             return $rs if ($rs != 0);
1263
1264                 $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_key);
1265
1266             return $rs if ($rs != 0);
1267
1268                 ($rs, $working) = get_file($aliases_working_cfg);
1269
1270                 return $rs if ($rs != 0);
1271
1272             $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
1273
1274                 return $rs if ($rs != 0);
1275
1276         }
1277
1278     } if ($mail_type eq 'normal_mail');
1279
1280     do {
1281
1282         my $dmn_name = $main::als_id_name{$mail_sub_id};
1283
1284         my $hash_key = "$mail_acc\@$dmn_name";
1285
1286         my $hash_value = "$dmn_name/$mail_acc/";
1287
1288         $rs = set_mta_hash_value($mailboxes_working_cfg, $hash_key, $hash_value);
1289
1290         return $rs if ($rs != 0);
1291
1292         ($rs, $working) = get_file($mailboxes_working_cfg);
1293
1294         return $rs if ($rs != 0);
1295
1296         $rs = store_file($mailboxes_cfg, $working, 'root', 'root', 0644);
1297
1298         return $rs if ($rs != 0);
1299
1300         if ($mail_autorespond ne '_no_') {
1301
1302             $rs = mbox_add_mta_cfg_autorespond_data($mbox_data);
1303
1304             return $rs if ($rs != 0);
1305
1306         } else {
1307
1308             $rs = mbox_del_mta_cfg_autorespond_data($mbox_data);
1309
1310             return $rs if ($rs != 0);
1311
1312                 $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_key);
1313
1314             return $rs if ($rs != 0);
1315
1316                 ($rs, $working) = get_file($aliases_working_cfg);
1317
1318                 return $rs if ($rs != 0);
1319
1320             $rs = store_file($aliases_cfg, $working, 'root', 'root', 0644);
1321
1322                 return $rs if ($rs != 0);
1323
1324         }
1325
1326     } if ($mail_type eq 'alias_mail');
1327
1328     do {
1329
1330         my $sub_pref = $main::sub_id_name{$mail_sub_id};
1331
1332         my $dmn_name = $main::domain_id_name{$mail_dmn_id};
1333
1334         my $sub_name = "$sub_pref.$dmn_name";
1335
1336         push_el(\@main::el, 'mbox_add_mta_cfg_data()', "dbg: sub_pref: $sub_pref, dmn_name: $dmn_name, sub_name: $sub_name");