Changeset 1124

Show
Ignore:
Timestamp:
04/24/2008 11:21:18 AM (2 months ago)
Author:
rats
Message:

Fixed #1148: DNS serial is not updated more than once a day when changing sub domains
Fixed #1196: New mail account/forward and auto responder handling

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/CHANGELOG

    r1123 r1124  
    22~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    33 
     42008-04-24 Benedikt Heintel 
     5        - GUI: 
     6                * Fixed #1196: New mail account/forward and auto responder handling 
     7        - ENGINE: 
     8                * Fixed #1148: DNS serial is not updated more than once a day when changing sub domains 
     9                * Fixed #1196: New mail account/forward and auto responder handling 
     10 
    4112008-04-14 Jochen Manz 
    512        - CONFIGS: 
    6                 * Corrected gentoo postfix main.cnf     
     13                * Corrected gentoo postfix main.cnf 
    714        - SETUP: 
    815                * Fixed #1204: wrong configs-Path in Makefile.ubuntu (Install doesn't work) 
  • trunk/engine/ispcp-mbox-mngr

    r1122 r1124  
    275275    my $mail_autorespond = @$mbox_data[8]; 
    276276 
     277        my $mail_forward_list = undef; 
     278 
     279        # create a mail forward list 
     280 
     281    if ($mail_forward ne '_no_') { 
     282 
     283        $mail_forward_list = ',' . $mail_forward; 
     284 
     285    } 
     286 
    277287 
    278288    my $conf_dir = $main::cfg{'CONF_DIR'}; 
     
    300310    my $transport_backup_cfg = "$backup_dir/transport.$timestamp"; 
    301311 
    302  
    303312    ($rs, $sys) = get_file($aliases_cfg); 
    304313 
     
    317326    return $rs if ($rs != 0); 
    318327 
    319  
    320     do { 
     328    do { 
     329 
     330        my ($hash_key, $hash_value, $dmn_name) = (undef, undef, undef); 
     331 
     332        if ($mail_type =~ /^normal_mail.*/) { 
     333 
     334                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     335 
     336            $hash_key = "$mail_acc\@$dmn_name"; 
     337 
     338                $hash_value = "$mail_acc\@$dmn_name$mail_forward_list,$mail_acc\@ispcp-arpl.$dmn_name"; 
     339 
     340        } elsif ($mail_type =~ /^alias_mail.*/) { 
     341 
     342                $dmn_name = $main::als_id_name{$mail_sub_id}; 
     343 
     344                $hash_key = "$mail_acc\@$dmn_name"; 
     345 
     346                $hash_value = "$mail_acc\@$dmn_name$mail_forward_list,$mail_acc\@ispcp-arpl.$dmn_name"; 
     347 
     348        } elsif ($mail_type  =~ /^subdom_mail.*/) { 
     349 
     350                my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
     351 
     352                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     353 
     354                my $sub_name = "$sub_pref.$dmn_name"; 
     355 
     356                $hash_key = "$mail_acc\@$sub_name"; 
     357 
     358                $hash_value = "$mail_acc\@$sub_name$mail_forward_list,$mail_acc\@ispcp-arpl.$sub_name"; 
     359 
     360                $dmn_name = $sub_name; 
     361        } 
     362 
     363                $rs = del_mta_hash_value($aliases_working_cfg, $hash_key); 
     364 
     365                return $rs if ($rs != 0); 
     366 
     367        $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
     368 
     369        return $rs if ($rs != 0); 
     370 
     371        ($rs, $working) = get_file($aliases_working_cfg); 
     372 
     373        return $rs if ($rs != 0); 
     374 
     375        $rs = store_file($aliases_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     376 
     377        return $rs if ($rs != 0); 
     378 
     379 
     380        $hash_key = "ispcp-arpl.$dmn_name"; 
     381 
     382        $hash_value = "ispcp-arpl:"; 
     383 
     384        $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
     385 
     386        return $rs if ($rs != 0); 
     387 
     388        ($rs, $working) = get_file($transport_working_cfg); 
     389 
     390        return $rs if ($rs != 0); 
     391 
     392        $rs = store_file($transport_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     393 
     394        return $rs if ($rs != 0); 
     395 
     396    } if ($mail_type =~ /^normal_mail.*/ || $mail_type =~ /^alias_mail.*/ || $mail_type  =~ /^subdom_mail.*/); 
     397 
     398    do { 
     399 
     400        my ($hash_key, $hash_value, $dmn_name) = (undef, undef, undef); 
     401 
     402        if ($mail_type =~ /.*normal_forward.*/) { 
     403 
     404                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     405 
     406                $hash_key = "$mail_acc\@$dmn_name"; 
     407 
     408                $hash_value = undef; 
     409 
     410        } elsif ($mail_type =~ /.*alias_forward.*/) { 
     411 
     412                $dmn_name = $main::als_id_name{$mail_sub_id}; 
     413 
     414                $hash_key = "$mail_acc\@$dmn_name"; 
     415 
     416                $hash_value = undef; 
     417 
     418        } 
     419 
     420        ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key); 
     421 
     422        return $rs if ($rs != 0); 
     423 
     424        if ($rdata eq '') { 
     425 
     426            $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name"; 
     427 
     428        } else { 
     429 
     430            $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$dmn_name"; 
     431 
     432        } 
     433 
     434        $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
     435 
     436        return $rs if ($rs != 0); 
     437 
     438 
     439        ($rs, $working) = get_file($aliases_working_cfg); 
     440 
     441        return $rs if ($rs != 0); 
     442 
     443        $rs = store_file($aliases_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     444 
     445        return $rs if ($rs != 0); 
     446 
     447 
     448        $hash_key = "ispcp-arpl.$dmn_name"; 
     449 
     450        $hash_value = "ispcp-arpl:"; 
     451 
     452        $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
     453 
     454        return $rs if ($rs != 0); 
     455 
     456        ($rs, $working) = get_file($transport_working_cfg); 
     457 
     458        return $rs if ($rs != 0); 
     459 
     460        $rs = store_file($transport_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     461 
     462        return $rs if ($rs != 0); 
     463 
     464    } if ($mail_type eq 'normal_forward' || $mail_type eq 'alias_forward'); 
     465 
     466    do { 
     467        my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
    321468 
    322469        my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
    323470 
    324         my $hash_key = "$mail_acc\@$dmn_name"; 
    325  
    326         my $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name"; 
    327  
    328                 $rs = del_mta_hash_value($aliases_working_cfg, $hash_key); 
    329  
    330                 return $rs if ($rs != 0); 
     471        my $sub_name = "$sub_pref.$dmn_name"; 
     472 
     473        my $hash_key = "$mail_acc\@$sub_name"; 
     474 
     475        my $hash_value = undef; 
     476 
     477        ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key); 
     478 
     479        return $rs if ($rs != 0); 
     480 
     481        if ($rdata eq '') { 
     482 
     483            $hash_value = "$mail_acc\@$sub_name,$mail_acc\@ispcp-arpl.$sub_name"; 
     484 
     485        } else { 
     486 
     487            $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$sub_name"; 
     488 
     489        } 
    331490 
    332491        $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
     
    334493        return $rs if ($rs != 0); 
    335494 
     495 
    336496        ($rs, $working) = get_file($aliases_working_cfg); 
    337497 
     
    343503 
    344504 
    345         $hash_key = "ispcp-arpl.$dmn_name"; 
     505        $hash_key = "ispcp-arpl.$sub_name"; 
    346506 
    347507        $hash_value = "ispcp-arpl:"; 
     
    359519        return $rs if ($rs != 0); 
    360520 
    361     } if ($mail_type eq 'normal_mail'); 
    362  
    363     do { 
    364  
    365         my $dmn_name = $main::als_id_name{$mail_sub_id}; 
    366  
    367         my $hash_key = "$mail_acc\@$dmn_name"; 
    368  
    369         my $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name"; 
    370  
    371                 $rs = del_mta_hash_value($aliases_working_cfg, $hash_key); 
    372  
    373                 return $rs if ($rs != 0); 
    374  
    375         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
    376  
    377         return $rs if ($rs != 0); 
     521    } if ($mail_type eq 'subdom_forward'); 
     522 
     523    $rs = sys_command("$cmd_postmap $transport_cfg"); 
     524 
     525    return $rs if ($rs != 0); 
     526 
     527    push_el(\@main::el, 'mbox_add_mta_cfg_autorespond_data()', 'Ending...'); 
     528 
     529    return 0; 
     530 
     531
     532 
     533sub mbox_check_last_transport_entry { 
     534 
     535    my ($mbox_data) = @_; 
     536 
     537    push_el(\@main::el, 'mbox_check_last_transport_entry()', 'Starting...'); 
     538 
     539    if (!defined($mbox_data) || $mbox_data eq '') { 
     540 
     541        push_el(\@main::el, 'mbox_check_last_transport_entry()', 'ERROR: Undefined Input Data...'); 
     542 
     543        return -1; 
     544 
     545    } 
     546 
     547    my ($rs, $rows, $sql) = (undef, undef, undef); 
     548 
     549    my $mail_dmn_id = @$mbox_data[4]; 
     550 
     551    my $mail_sub_id = @$mbox_data[6]; 
     552 
     553    my $mail_type = @$mbox_data[5]; 
     554 
     555    if ($mail_type eq 'alias_mail' || $mail_type eq 'alias_forward') { 
     556 
     557        $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';"; 
     558 
     559    } else { 
     560 
     561        $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';"; 
     562 
     563    } 
     564 
     565    ($rs, $rows) = doSQL($sql); 
     566 
     567    return $rs if ($rs != 0); 
     568 
     569    $rs = @$rows[0]; 
     570 
     571    push_el(\@main::el, 'mbox_check_last_transport_entry()', 'Ending...'); 
     572 
     573    return @$rs[0]; 
     574 
     575
     576 
     577sub mbox_del_last_transport_entry { 
     578 
     579    my ($mbox_data) = @_; 
     580 
     581    push_el(\@main::el, 'mbox_del_last_transport_entry()', 'Starting...'); 
     582 
     583    if (!defined($mbox_data) || $mbox_data eq '') { 
     584 
     585        push_el(\@main::el, 'mbox_del_last_transport_entry()', 'ERROR: Undefined Input Data...'); 
     586 
     587        return -1; 
     588 
     589    } 
     590 
     591    my ($rs, $rdata) = (undef, undef); 
     592 
     593 
     594    my $mail_dmn_id = @$mbox_data[4]; 
     595 
     596    my $mail_sub_id = @$mbox_data[6]; 
     597 
     598    my $mail_type = @$mbox_data[5]; 
     599 
     600    my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     601 
     602 
     603    my $conf_dir = $main::cfg{'CONF_DIR'}; 
     604 
     605    my $working_dir = "$conf_dir/postfix/working"; 
     606 
     607    my $transport_working_cfg = "$working_dir/transport"; 
     608 
     609 
     610    my $hash_key = "ispcp-arpl.$dmn_name"; 
     611 
     612    if ($mail_type eq 'alias_mail' || $mail_type eq 'alias_forward') { 
     613 
     614        my $als_name = $main::als_id_name{$mail_sub_id}; 
     615 
     616        $hash_key = "ispcp-arpl.$als_name"; 
     617 
     618    } 
     619 
     620 
     621    $rs = del_mta_hash_value($transport_working_cfg, $hash_key); 
     622 
     623    return $rs if ($rs != 0); 
     624 
     625 
     626    if ($mail_type ne 'alias_mail' && $mail_type ne 'alias_forward') { 
     627 
     628        my ($sub_key, $sub_value) = (undef, undef); 
     629 
     630        foreach $sub_key (keys %main::sub_id_parentid) { 
     631 
     632            $sub_value = $main::sub_id_parentid{$sub_key}; 
     633 
     634            if ($sub_value == $mail_dmn_id) { 
     635 
     636                # We've got one ;). It must be removed; 
     637 
     638                my $sub_pref = $main::sub_id_name{$sub_key}; 
     639 
     640                my $sub_name = "$sub_pref.$dmn_name"; 
     641 
     642                $hash_key = "ispcp-arpl.$sub_name"; 
     643 
     644                $rs = del_mta_hash_value($transport_working_cfg, $hash_key); 
     645 
     646                return $rs if ($rs != 0); 
     647 
     648            } 
     649 
     650        } 
     651 
     652    } 
     653 
     654    push_el(\@main::el, 'mbox_del_last_transport_entry()', 'Ending...'); 
     655 
     656    return 0; 
     657 
     658
     659 
     660sub mbox_del_mta_cfg_autorespond_data { 
     661 
     662    my ($mbox_data) = @_; 
     663 
     664    push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'Starting...'); 
     665 
     666    if (!defined($mbox_data) || $mbox_data eq '') { 
     667 
     668        push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'ERROR: Undefined Input Data...'); 
     669 
     670        return -1; 
     671 
     672    } 
     673 
     674    my ($rs, $rdata) = (undef, undef); 
     675 
     676    my ($hash_key, $hash_value, $dmn_name) = (undef, undef, undef); 
     677 
     678 
     679    my $mail_id = @$mbox_data[0]; 
     680 
     681    my $mail_acc = @$mbox_data[1]; 
     682 
     683    my $mail_forward = @$mbox_data[3]; 
     684 
     685    my $mail_dmn_id = @$mbox_data[4]; 
     686 
     687    my $mail_type = @$mbox_data[5]; 
     688 
     689    my $mail_sub_id = @$mbox_data[6]; 
     690 
     691    my $mail_autorespond = @$mbox_data[8]; 
     692 
     693 
     694    my $conf_dir = $main::cfg{'CONF_DIR'}; 
     695 
     696    my $cmd_postmap = $main::cfg{'CMD_POSTMAP'}; 
     697 
     698    my $working_dir = "$conf_dir/postfix/working"; 
     699 
     700    my $backup_dir = "$conf_dir/postfix/backup"; 
     701 
     702    my $timestamp = time; 
     703 
     704    my ($sys, $working) = (undef, undef); 
     705 
     706    my $aliases_cfg = $main::cfg{'MTA_VIRTUAL_ALIAS_HASH'}; 
     707 
     708    my $aliases_working_cfg = "$working_dir/aliases"; 
     709 
     710    my $aliases_backup_cfg = "$backup_dir/aliases.$timestamp"; 
     711 
     712    my $transport_cfg = $main::cfg{'MTA_TRANSPORT_HASH'}; 
     713 
     714    my $transport_working_cfg = "$working_dir/transport"; 
     715 
     716    my $transport_backup_cfg = "$backup_dir/transport.$timestamp"; 
     717 
     718 
     719    ($rs, $sys) = get_file($aliases_cfg); 
     720 
     721    return $rs if ($rs != 0); 
     722 
     723    $rs = store_file($aliases_backup_cfg, $sys, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     724 
     725    return $rs if ($rs != 0); 
     726 
     727    ($rs, $sys) = get_file($transport_cfg); 
     728 
     729    return $rs if ($rs != 0); 
     730 
     731    $rs = store_file($transport_backup_cfg, $sys, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     732 
     733    return $rs if ($rs != 0); 
     734 
     735 
     736    do { 
     737 
     738                if ($mail_type =~ /^normal_mail.*/) { 
     739 
     740                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     741 
     742                $hash_key = "$mail_acc\@$dmn_name"; 
     743 
     744                } elsif ($mail_type =~ /^alias_mail.*/) { 
     745 
     746                $dmn_name = $main::als_id_name{$mail_sub_id}; 
     747 
     748                $hash_key = "$mail_acc\@$dmn_name"; 
     749 
     750                } elsif ($mail_type =~ /^subdom_mail.*/) { 
     751 
     752            my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
     753 
     754                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     755 
     756                my $sub_name = "$sub_pref.$dmn_name"; 
     757 
     758                $hash_key = "$mail_acc\@$sub_name"; 
     759 
     760                $dmn_name = $sub_name; 
     761 
     762                } 
     763 
     764        $rs = del_mta_hash_value($aliases_working_cfg, $hash_key); 
     765 
     766        return $rs if ($rs != 0); 
     767 
    378768 
    379769        ($rs, $working) = get_file($aliases_working_cfg); 
     
    386776 
    387777 
    388         $hash_key = "ispcp-arpl.$dmn_name"; 
    389  
    390         $hash_value = "ispcp-arpl:"; 
    391  
    392         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
    393  
    394         return $rs if ($rs != 0); 
     778        $rs = mbox_check_last_transport_entry($mbox_data); 
     779 
     780        if ($rs == 0) { 
     781 
     782            $rs = mbox_del_last_transport_entry($mbox_data); 
     783 
     784            return $rs if ($rs != 0); 
     785 
     786        } elsif ($rs == -1) { 
     787 
     788            return $rs; 
     789 
     790        } 
     791 
    395792 
    396793        ($rs, $working) = get_file($transport_working_cfg); 
     
    402799        return $rs if ($rs != 0); 
    403800 
    404     } if ($mail_type eq 'alias_mail'); 
    405  
    406     do { 
    407  
    408         my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
    409  
    410         my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
    411  
    412         my $sub_name = "$sub_pref.$dmn_name"; 
    413  
    414         my $hash_key = "$mail_acc\@$sub_name"; 
    415  
    416         my $hash_value = "$mail_acc\@$sub_name,$mail_acc\@ispcp-arpl.$sub_name"; 
    417  
    418                 $rs = del_mta_hash_value($aliases_working_cfg, $hash_key); 
    419  
    420                 return $rs if ($rs != 0); 
    421  
    422         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
    423  
    424         return $rs if ($rs != 0); 
     801    } if ($mail_type =~ /^normal_mail.*/ || $mail_type =~ /^alias_mail.*/ || $mail_type =~ /^subdom_mail.*/); 
     802 
     803    do { 
     804 
     805        if ($mail_type =~ /^normal_forward.*/) { 
     806 
     807                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     808 
     809                $hash_key = "$mail_acc\@$dmn_name"; 
     810 
     811        } elsif ($mail_type =~ /^alias_forward.*/) { 
     812 
     813                $dmn_name = $main::als_id_name{$mail_sub_id}; 
     814 
     815                $hash_key = "$mail_acc\@$dmn_name"; 
     816 
     817            } elsif ($mail_type =~ /^subdom_forward.*/) { 
     818 
     819                my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
     820 
     821                $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     822 
     823                my $sub_name = "$sub_pref.$dmn_name"; 
     824 
     825                $hash_key = "$mail_acc\@$sub_name"; 
     826 
     827                $dmn_name = $sub_name; 
     828 
     829            } 
     830 
     831        ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key); 
     832 
     833        return $rs if ($rs != 0); 
     834 
     835 
     836        if ($rdata ne '') { 
     837 
     838            $rdata =~ s/\,$mail_acc\@ispcp-arpl\.$dmn_name//gi; 
     839 
     840            $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $rdata); 
     841 
     842            return $rs if ($rs != 0); 
     843 
     844        } 
     845 
    425846 
    426847        ($rs, $working) = get_file($aliases_working_cfg); 
     
    433854 
    434855 
    435         $hash_key = "ispcp-arpl.$sub_name"; 
    436  
    437         $hash_value = "ispcp-arpl:"; 
    438  
    439         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
    440  
    441         return $rs if ($rs != 0); 
     856        $rs = mbox_check_last_transport_entry($mbox_data); 
     857 
     858        if ($rs == 0) { 
     859 
     860            $rs = mbox_del_last_transport_entry($mbox_data); 
     861 
     862            return $rs if ($rs != 0); 
     863 
     864        } elsif ($rs == -1) { 
     865 
     866            return $rs; 
     867 
     868        } 
     869 
    442870 
    443871        ($rs, $working) = get_file($transport_working_cfg); 
     
    449877        return $rs if ($rs != 0); 
    450878 
    451     } if ($mail_type eq 'subdom_mail'); 
    452  
    453     do { 
    454  
    455         my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
    456  
    457         my $hash_key = "$mail_acc\@$dmn_name"; 
    458  
    459         my $hash_value = undef; 
    460  
    461         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key); 
    462  
    463         return $rs if ($rs != 0); 
    464  
    465         if ($rdata eq '') { 
    466  
    467             $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name"; 
     879    } if ($mail_type =~ /^normal_forward.*/ || $mail_type =~ /^alias_forward.*/ || $mail_type =~ /^subdom_forward.*/); 
     880 
     881    $rs = sys_command("$cmd_postmap $transport_cfg"); 
     882 
     883    return $rs if ($rs != 0); 
     884 
     885 
     886    push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'Ending...'); 
     887 
     888    return 0; 
     889 
     890
     891 
     892sub mbox_add_mta_cfg_data { 
     893 
     894    my ($mbox_data) = @_; 
     895 
     896    push_el(\@main::el, 'mbox_add_mta_cfg_data()', 'Starting...'); 
     897 
     898    if (!defined($mbox_data) || $mbox_data eq '') { 
     899 
     900        push_el(\@main::el, 'mbox_add_mta_cfg_data()', 'ERROR: Undefined Input Data...'); 
     901 
     902        return -1; 
     903 
     904    } 
     905 
     906    my ($rs, $rdata) = (undef, undef); 
     907 
     908        my ($hash_key, $hash_value) = (undef, undef); 
     909 
     910 
     911    my $mail_id = @$mbox_data[0]; 
     912 
     913    my $mail_acc = @$mbox_data[1]; 
     914 
     915    my $mail_forward = @$mbox_data[3]; 
     916 
     917    my $mail_dmn_id = @$mbox_data[4]; 
     918 
     919    my $mail_type = @$mbox_data[5]; 
     920 
     921    my $mail_sub_id = @$mbox_data[6]; 
     922 
     923    my $mail_autorespond = @$mbox_data[8]; 
     924 
     925 
     926    my $conf_dir = $main::cfg{'CONF_DIR'}; 
     927 
     928    my $cmd_postmap = $main::cfg{'CMD_POSTMAP'}; 
     929 
     930 
     931    my $tpl_dir = "$conf_dir/postfix/parts"; 
     932 
     933    my $working_dir = "$conf_dir/postfix/working"; 
     934 
     935    my $backup_dir = "$conf_dir/postfix/backup"; 
     936 
     937    my $timestamp = time; 
     938 
     939    my ($sys, $working) = (undef, undef); 
     940 
     941    my $mailboxes_cfg = $main::cfg{'MTA_VIRTUAL_MAILBOX_HASH'}; 
     942 
     943    my $mailboxes_working_cfg = "$working_dir/mailboxes"; 
     944 
     945    my $mailboxes_backup_cfg = "$backup_dir/mailboxes.$timestamp"; 
     946 
     947    my $aliases_cfg = $main::cfg{'MTA_VIRTUAL_ALIAS_HASH'}; 
     948 
     949    my $aliases_working_cfg = "$working_dir/aliases"; 
     950 
     951    my $aliases_backup_cfg = "$backup_dir/aliases.$timestamp"; 
     952 
     953 
     954    ($rs, $sys) = get_file($mailboxes_cfg); 
     955 
     956    return $rs if ($rs != 0); 
     957 
     958    $rs = store_file($mailboxes_backup_cfg, $sys, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     959 
     960    return $rs if ($rs != 0); 
     961 
     962    ($rs, $sys) = get_file($aliases_cfg); 
     963 
     964    return $rs if ($rs != 0); 
     965 
     966    $rs = store_file($aliases_backup_cfg, $sys, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     967 
     968    return $rs if ($rs != 0); 
     969 
     970 
     971    do { 
     972 
     973        if ($mail_type =~ /^normal_mail.*/) { 
     974 
     975                my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     976 
     977                $hash_key = "$mail_acc\@$dmn_name"; 
     978 
     979                $hash_value = "$dmn_name/$mail_acc/"; 
     980 
     981        } elsif ($mail_type =~ /^alias_mail.*/) { 
     982 
     983                my $dmn_name = $main::als_id_name{$mail_sub_id}; 
     984 
     985                $hash_key = "$mail_acc\@$dmn_name"; 
     986 
     987                $hash_value = "$dmn_name/$mail_acc/"; 
     988 
     989                } elsif ($mail_type =~ /^subdom_mail.*/) { 
     990 
     991                my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
     992 
     993                my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     994 
     995                my $sub_name = "$sub_pref.$dmn_name"; 
     996 
     997                push_el(\@main::el, 'mbox_add_mta_cfg_data()', "dbg: sub_pref: $sub_pref, dmn_name: $dmn_name, sub_name: $sub_name"); 
     998 
     999                $hash_key = "$mail_acc\@$sub_name"; 
     1000 
     1001                $hash_value = "$sub_name/$mail_acc/"; 
     1002 
     1003                } 
     1004 
     1005        $rs = set_mta_hash_value($mailboxes_working_cfg, $hash_key, $hash_value); 
     1006 
     1007        return $rs if ($rs != 0); 
     1008 
     1009        ($rs, $working) = get_file($mailboxes_working_cfg); 
     1010 
     1011        return $rs if ($rs != 0); 
     1012 
     1013        $rs = store_file($mailboxes_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     1014 
     1015        return $rs if ($rs != 0); 
     1016 
     1017        if ($mail_autorespond != 0) { 
     1018 
     1019            $rs = mbox_add_mta_cfg_autorespond_data($mbox_data); 
     1020 
     1021            return $rs if ($rs != 0); 
    4681022 
    4691023        } else { 
    4701024 
    471             $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$dmn_name"; 
     1025            $rs = mbox_del_mta_cfg_autorespond_data($mbox_data); 
     1026 
     1027            return $rs if ($rs != 0); 
     1028 
     1029                if ($mail_type =~ /.*forward.*/) { 
     1030 
     1031                                # append the mail_forward list to the hash_key 
     1032 
     1033                                $hash_value = $hash_key . ',' . $mail_forward; 
     1034 
     1035                } else { 
     1036 
     1037                        # No autoresponder, so the hash_value is equal to the hash_key 
     1038 
     1039                                $hash_value = $hash_key; 
     1040 
     1041                } 
     1042 
     1043                $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
     1044 
     1045                return $rs if ($rs != 0); 
     1046 
     1047 
     1048                ($rs, $working) = get_file($aliases_working_cfg); 
     1049 
     1050                return $rs if ($rs != 0); 
     1051 
     1052 
     1053                $rs = store_file($aliases_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     1054 
     1055                return $rs if ($rs != 0); 
     1056 
     1057                } 
     1058 
     1059    } if ($mail_type =~ /^normal_mail.*/ || $mail_type =~ /^alias_mail.*/ || $mail_type =~ /^subdom_mail.*/); 
     1060 
     1061    do { 
     1062 
     1063                if ($mail_type =~ /.*normal_forward.*/) { 
     1064 
     1065                        my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     1066 
     1067                $hash_key = "$mail_acc\@$dmn_name"; 
     1068 
     1069                $hash_value = "$dmn_name/$mail_acc/"; 
     1070 
     1071                } elsif ($mail_type =~ /.*alias_forward.*/) { 
     1072 
     1073                my $dmn_name = $main::als_id_name{$mail_sub_id}; 
     1074 
     1075            $hash_key = "$mail_acc\@$dmn_name"; 
     1076 
     1077                $hash_value = "$dmn_name/$mail_acc/"; 
     1078 
     1079        } elsif ($mail_type =~ /.*subdom_forward.*/) { 
     1080 
     1081                my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
     1082 
     1083                my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
     1084 
     1085                my $sub_name = "$sub_pref.$dmn_name"; 
     1086 
     1087                $hash_key = "$mail_acc\@$sub_name"; 
     1088 
     1089                $hash_value = "$sub_name/$mail_acc/"; 
    4721090 
    4731091        } 
    474  
    475         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
    476  
    477         return $rs if ($rs != 0); 
    478  
    479  
    480         ($rs, $working) = get_file($aliases_working_cfg); 
    481  
    482         return $rs if ($rs != 0); 
    483  
    484         $rs = store_file($aliases_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
    485  
    486         return $rs if ($rs != 0); 
    487  
    488  
    489         $hash_key = "ispcp-arpl.$dmn_name"; 
    490  
    491         $hash_value = "ispcp-arpl:"; 
    492  
    493         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
    494  
    495         return $rs if ($rs != 0); 
    496  
    497         ($rs, $working) = get_file($transport_working_cfg); 
    498  
    499         return $rs if ($rs != 0); 
    500  
    501         $rs = store_file($transport_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
    502  
    503         return $rs if ($rs != 0); 
    504  
    505     } if ($mail_type eq 'normal_forward'); 
    506  
    507     do { 
    508  
    509         my $dmn_name = $main::als_id_name{$mail_sub_id}; 
    510  
    511         my $hash_key = "$mail_acc\@$dmn_name"; 
    512  
    513         my $hash_value = undef; 
    514  
    515         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key); 
    516  
    517         return $rs if ($rs != 0); 
    518  
    519         if ($rdata eq '') { 
    520  
    521             $hash_value = "$mail_acc\@$dmn_name,$mail_acc\@ispcp-arpl.$dmn_name"; 
    522  
    523         } else { 
    524  
    525             $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$dmn_name"; 
    526  
    527         } 
    528  
    529         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
    530  
    531         return $rs if ($rs != 0); 
    532  
    533  
    534         ($rs, $working) = get_file($aliases_working_cfg); 
    535  
    536         return $rs if ($rs != 0); 
    537  
    538         $rs = store_file($aliases_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
    539  
    540         return $rs if ($rs != 0); 
    541  
    542  
    543         $hash_key = "ispcp-arpl.$dmn_name"; 
    544  
    545         $hash_value = "ispcp-arpl:"; 
    546  
    547         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
    548  
    549         return $rs if ($rs != 0); 
    550  
    551         ($rs, $working) = get_file($transport_working_cfg); 
    552  
    553         return $rs if ($rs != 0); 
    554  
    555         $rs = store_file($transport_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
    556  
    557         return $rs if ($rs != 0); 
    558  
    559     } if ($mail_type eq 'alias_forward'); 
    560  
    561     do { 
    562         my $sub_pref = $main::sub_id_name{$mail_sub_id}; 
    563  
    564         my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
    565  
    566         my $sub_name = "$sub_pref.$dmn_name"; 
    567  
    568         my $hash_key = "$mail_acc\@$sub_name"; 
    569  
    570         my $hash_value = undef; 
    571  
    572         ($rs, $rdata) = get_mta_hash_value($aliases_working_cfg, $hash_key); 
    573  
    574         return $rs if ($rs != 0); 
    575  
    576         if ($rdata eq '') { 
    577  
    578             $hash_value = "$mail_acc\@$sub_name,$mail_acc\@ispcp-arpl.$sub_name"; 
    579  
    580         } else { 
    581  
    582             $hash_value = $rdata.",$mail_acc\@ispcp-arpl.$sub_name"; 
    583  
    584         } 
    585  
    586         $rs = set_mta_hash_value($aliases_working_cfg, $hash_key, $hash_value); 
    587  
    588         return $rs if ($rs != 0); 
    589  
    590  
    591         ($rs, $working) = get_file($aliases_working_cfg); 
    592  
    593         return $rs if ($rs != 0); 
    594  
    595         $rs = store_file($aliases_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
    596  
    597         return $rs if ($rs != 0); 
    598  
    599  
    600         $hash_key = "ispcp-arpl.$sub_name"; 
    601  
    602         $hash_value = "ispcp-arpl:"; 
    603  
    604         $rs = set_mta_hash_value($transport_working_cfg, $hash_key, $hash_value); 
    605  
    606         return $rs if ($rs != 0); 
    607  
    608         ($rs, $working) = get_file($transport_working_cfg); 
    609  
    610         return $rs if ($rs != 0); 
    611  
    612         $rs = store_file($transport_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
    613  
    614         return $rs if ($rs != 0); 
    615  
    616     } if ($mail_type eq 'subdom_forward'); 
    617  
    618     $rs = sys_command("$cmd_postmap $transport_cfg"); 
    619  
    620     return $rs if ($rs != 0); 
    621  
    622     push_el(\@main::el, 'mbox_add_mta_cfg_autorespond_data()', 'Ending...'); 
    623  
    624     return 0; 
    625  
    626 } 
    627  
    628 sub mbox_check_last_transport_entry { 
    629  
    630     my ($mbox_data) = @_; 
    631  
    632     push_el(\@main::el, 'mbox_check_last_transport_entry()', 'Starting...'); 
    633  
    634     if (!defined($mbox_data) || $mbox_data eq '') { 
    635  
    636         push_el(\@main::el, 'mbox_check_last_transport_entry()', 'ERROR: Undefined Input Data...'); 
    637  
    638         return -1; 
    639  
    640     } 
    641  
    642     my ($rs, $rows, $sql) = (undef, undef, undef); 
    643  
    644     my $mail_dmn_id = @$mbox_data[4]; 
    645  
    646     my $mail_sub_id = @$mbox_data[6]; 
    647  
    648     my $mail_type = @$mbox_data[5]; 
    649  
    650     if ($mail_type eq 'alias_mail' || $mail_type eq 'alias_forward') { 
    651  
    652         $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';"; 
    653  
    654     } else { 
    655  
    656         $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';"; 
    657  
    658     } 
    659  
    660     ($rs, $rows) = doSQL($sql); 
    661  
    662     return $rs if ($rs != 0); 
    663  
    664     $rs = @$rows[0]; 
    665  
    666     push_el(\@main::el, 'mbox_check_last_transport_entry()', 'Ending...'); 
    667  
    668     return @$rs[0]; 
    669  
    670 } 
    671  
    672 sub mbox_del_last_transport_entry { 
    673  
    674     my ($mbox_data) = @_; 
    675  
    676     push_el(\@main::el, 'mbox_del_last_transport_entry()', 'Starting...'); 
    677  
    678     if (!defined($mbox_data) || $mbox_data eq '') { 
    679  
    680         push_el(\@main::el, 'mbox_del_last_transport_entry()', 'ERROR: Undefined Input Data...'); 
    681  
    682         return -1; 
    683  
    684     } 
    685  
    686     my ($rs, $rdata) = (undef, undef); 
    687  
    688  
    689     my $mail_dmn_id = @$mbox_data[4]; 
    690  
    691     my $mail_sub_id = @$mbox_data[6]; 
    692  
    693     my $mail_type = @$mbox_data[5]; 
    694  
    695     my $dmn_name = $main::domain_id_name{$mail_dmn_id}; 
    696  
    697  
    698     my $conf_dir = $main::cfg{'CONF_DIR'}; 
    699  
    700     my $working_dir = "$conf_dir/postfix/working"; 
    701  
    702     my $transport_working_cfg = "$working_dir/transport"; 
    703  
    704  
    705     my $hash_key = "ispcp-arpl.$dmn_name"; 
    706  
    707     if ($mail_type eq 'alias_mail' || $mail_type eq 'alias_forward') { 
    708  
    709         my $als_name = $main::als_id_name{$mail_sub_id}; 
    710  
    711         $hash_key = "ispcp-arpl.$als_name"; 
    712  
    713     } 
    714  
    715  
    716     $rs = del_mta_hash_value($transport_working_cfg, $hash_key); 
    717  
    718     return $rs if ($rs != 0); 
    719  
    720  
    721     if ($mail_type ne 'alias_mail' && $mail_type ne 'alias_forward') { 
    722  
    723         my ($sub_key, $sub_value) = (undef, undef); 
    724  
    725         foreach $sub_key (keys %main::sub_id_parentid) { 
    726  
    727             $sub_value = $main::sub_id_parentid{$sub_key}; 
    728  
    729             if ($sub_value == $mail_dmn_id) { 
    730  
    731                 # We've got one ;). It must be removed; 
    732  
    733                 my $sub_pref = $main::sub_id_name{$sub_key}; 
    734  
    735                 my $sub_name = "$sub_pref.$dmn_name"; 
    736  
    737                 $hash_key = "ispcp-arpl.$sub_name"; 
    738  
    739                 $rs = del_mta_hash_value($transport_working_cfg, $hash_key); 
    740  
    741                 return $rs if ($rs != 0); 
    742  
    743             } 
    744  
    745         } 
    746  
    747     } 
    748  
    749     push_el(\@main::el, 'mbox_del_last_transport_entry()', 'Ending...'); 
    750  
    751     return 0; 
    752  
    753 } 
    754  
    755 sub mbox_del_mta_cfg_autorespond_data { 
    756  
    757     my ($mbox_data) = @_; 
    758  
    759     push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'Starting...'); 
    760  
    761     if (!defined($mbox_data) || $mbox_data eq '') { 
    762  
    763         push_el(\@main::el, 'mbox_del_mta_cfg_autorespond_data()', 'ERROR: Undefined Input Data...'); 
    764  
    765         return -1; 
    766  
    767     } 
    768  
    769     my ($rs, $rdata) = (undef, undef); 
    770  
    771     my $mail_id = @$mbox_data[0]; 
    772  
    773     my $mail_acc = @$mbox_data[1]; 
    774  
    775     my $mail_forward = @$mbox_data[3]; 
    776  
    777     my $mail_dmn_id = @$mbox_data[4]; 
    778  
    779     my $mail_type = @$mbox_data[5]; 
    780  
    781     my $mail_sub_id = @$mbox_data[6]; 
    782  
    783     my $mail_autorespond = @$mbox_data[8]; 
    784  
    785  
    786     my $conf_dir = $main::cfg{'CONF_DIR'}; 
    787  
    788     my $cmd_postmap = $main::cfg{'CMD_POSTMAP'}; 
    789  
    790     my $working_dir = "$conf_dir/pos