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

Revision 479, 73.8 kB (checked in by malte, 2 years ago)

--

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