Ignore:
Timestamp:
12/12/09 00:14:45 (2 years ago)
Author:
benedikt
Message:
  • Fixed #266: Default 404 page when disable domain
Location:
branches/domain-disable
Files:
9 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/domain-disable/CHANGELOG

    r2352 r2359  
    1 ispCP ω 1.0.3 Changelog 
     1ispCP ω 1.1.0 Changelog 
    22~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     3 
     42009-12-12 Benedikt Heintel 
     5        - ENGINE: 
     6                * Fixed #266: Default 404 page when disable domain 
    37 
    482009-12-11 Laurent Declercq 
  • branches/domain-disable/engine/ispcp-dmn-mngr

    r2340 r2359  
    11#!/usr/bin/perl 
    22 
    3 # ispCP ω (OMEGA) a Virtual Hosting Control Panel 
     3# ispCP . (OMEGA) a Virtual Hosting Control Panel 
    44# Copyright (C) 2001-2006 by moleSoftware GmbH - http://www.molesoftware.com 
    55# Copyright (C) 2006-2009 by isp Control Panel - http://ispcp.net 
     
    2525# isp Control Panel. All Rights Reserved. 
    2626# 
    27 # The ispCP ω Home Page is: 
     27# The ispCP . Home Page is: 
    2828# 
    2929#    http://isp-control.net 
     
    9494## 
    9595sub dmn_add_named_cfg_data { 
    96  
    97         push_el(\@main::el, 'dmn_add_named_cfg_data()', 'Starting...'); 
    98  
    99         my ($data) = @_; 
    100  
    101         my ($rs, $rdata, $cmd, $working) = (undef, undef, undef, undef); 
    102  
    103         if (!defined($data) || $data eq '') 
    104         { 
    105                 push_el(\@main::el, 'dmn_add_named_cfg_data()', 'FATAL: Undefined Input Data...'); 
    106                 return -1; 
    107         } 
    108  
    109         # Domain name 
    110         my $zone_name = @$data[1]; 
    111  
    112         # Directories paths 
    113         my $cfg_dir = "$main::cfg{'CONF_DIR'}/bind"; 
    114         my $tpl_dir = "$cfg_dir/parts"; 
    115         my $bkp_dir = "$cfg_dir/backup"; 
    116         my $wrk_dir = "$cfg_dir/working"; 
    117  
    118         # 
    119         ## Loading all needed templates from (eg. /etc/ispcp/bind/parts/) - Begin 
    120         # 
    121  
    122         my ($dta_b, $dta_e, $entry_b, $entry_e, $entry) = ('', '', '', '', ''); 
    123  
    124         ( 
    125                 $rs, 
    126                 $dta_b, 
    127                 $dta_e, 
    128                 $entry_b, 
    129                 $entry_e, 
    130                 $entry 
    131         ) = get_tpl( 
    132                 $tpl_dir, 
    133                 'cfg_dta_b.tpl', 
    134                 'cfg_dta_e.tpl', 
    135                 'cfg_entry_b.tpl', 
    136                 'cfg_entry_e.tpl', 
    137                 'cfg_entry.tpl' 
    138         ); 
    139         return $rs if ($rs != 0); 
    140  
    141         # 
    142         ## Loading all needed template from (eg. /etc/ispcp/bind/parts/) - End 
    143         # 
    144  
    145         # 
    146         ## Let's construct needed tags and entries - Begin 
    147         # 
    148  
    149         # Tags 
    150         my %tag_hash = ( 
    151                 '{DMN_NAME}' => $zone_name, 
    152                 '{DB_DIR}'   => $main::cfg{'BIND_DB_DIR'} 
    153         ); 
    154  
    155         # Entries 
    156         my ($entry_b_val, $entry_e_val, $entry_val) = ('', '', ''); 
    157  
    158         ( 
    159                 $rs, 
    160                 $entry_b_val, 
    161                 $entry_e_val, 
    162                 $entry_val 
    163         ) = prep_tpl( 
    164                 \%tag_hash, 
    165                 $entry_b, 
    166                 $entry_e, 
    167                 $entry 
    168         ); 
    169         return $rs if ($rs != 0); 
    170  
    171         # 
    172         ## Let's construct needed tags and entries - End 
    173         # 
    174  
    175         # Loading the working file from (eg. /etc/ispcp/bind/working/) 
    176         ($rs, $working) = get_file("$wrk_dir/named.conf"); 
    177         return $rs if ($rs != 0); 
    178  
    179         # Check the validity of the working file 
    180         ($rs, $rdata) = get_tag($dta_b, $dta_e, $working); 
    181         return $rs if ($rs != 0); 
    182  
    183         # 
    184         ## If the new entry already exists, remove it - Begin 
    185         # 
    186  
    187         # Check if the new entry already exists in the current working file 
    188         ($rs, $rdata) = get_tag($entry_b_val, $entry_e_val, $working); 
    189  
    190         # If the entry exists, remove it ! 
    191         if ($rs == 0) 
    192         { 
    193                 ($rs, $working) = del_tag($entry_b_val, "$entry_e_val\n", $working); 
    194                 return $rs if ($rs != 0); 
    195         } 
    196  
    197         # 
    198         ## If the new entry already exists, remove it - End 
    199         # 
    200  
    201         # Check the validity of the working file 
    202         ($rs, $rdata) = get_tag($entry_b, $entry_e, $working); 
    203         return $rs if ($rs != 0); 
    204  
    205         # 
    206         ## Saving the current production file if it exist - Begin 
    207         # 
    208  
    209         if(-e $main::cfg{'BIND_CONF_FILE'}) 
    210         { 
    211                 my $timestamp = time; 
    212  
    213                 my $cmd = "$main::cfg{'CMD_CP'} -p $main::cfg{'BIND_CONF_FILE'} $bkp_dir/named.conf.$timestamp"; 
    214                 $rs = sys_command($cmd); 
    215                 return $rs if ($rs != 0); 
    216         } 
    217  
    218         # 
    219         ## Saving the current production file if it exist - End 
    220         # 
    221  
    222         # 
    223         ## Building, storage and installation of the new file  - Begin 
    224         # 
    225  
    226         # Let's construct the replacement and do it 
    227         my $entry_repl = "$entry_b_val$entry_val$entry_e_val\n$entry_b$entry_e"; 
    228  
    229         # Building the new file 
    230         ($rs, $working) = repl_tag($entry_b, $entry_e, $working, $entry_repl, "dmn_add_named_cfg_data"); 
    231         return $rs if ($rs != 0); 
    232  
    233         # Store the new file in working directory 
    234         $rs = store_file( 
    235                 "$wrk_dir/named.conf", 
    236                 $working, 
    237                 $main::cfg{'ROOT_USER'}, 
    238                 $main::cfg{'ROOT_GROUP'}, 
    239                 0644 
    240         ); 
    241         return $rs if ($rs != 0); 
    242  
    243         # Install the new file in production directory 
    244         $cmd = "$main::cfg{'CMD_CP'} -pf $wrk_dir/named.conf $main::cfg{'BIND_CONF_FILE'}"; 
    245         $rs = sys_command($cmd); 
    246         return $rs if ($rs != 0); 
    247  
    248         # 
    249         ## Building, storage and installation of the new file  - End 
    250         # 
    251  
    252         push_el(\@main::el, 'dmn_add_named_cfg_data()', 'Ending...'); 
    253  
    254         0; 
    255 } 
    256  
    257 ################################################################################ 
    258 ## 
    259 ## Delete DNS CFG Data 
    260 ## 
    261 sub dmn_del_named_cfg_data { 
    26296        my ($dmn_data) = @_; 
    26397        my ($rs, $rdata) = (undef, undef); 
    26498 
    265         push_el(\@main::el, 'dmn_del_named_cfg_data()', 'Starting...'); 
    266         if (!defined($dmn_data) || $dmn_data eq '') { 
    267                 push_el(\@main::el, 'dmn_del_named_cfg_data()', 'ERROR: Undefined Input Data...'); 
     99        push_el(\@main::el, 'dmn_add_named_cfg_data()', 'Starting...'); 
     100        if (!defined($dmn_data) || $dmn_data eq '') { 
     101                push_el(\@main::el, 'dmn_add_named_cfg_data()', 'ERROR: Undefined Input Data...'); 
    268102                return -1; 
    269103        } 
     
    326160 
    327161        # 
     162        # Let's get System and Working config files; 
     163        # 
     164        my ($sys, $working) = ('', ''); 
     165 
     166        ($rs, $sys) = get_file($sys_cfg); 
     167        return $rs  if ($rs != 0); 
     168 
     169        ($rs, $working) = get_file($working_cfg); 
     170        return $rs  if ($rs != 0); 
     171 
     172        ($rs, $rdata) = get_tag($dta_b, $dta_e, $working); 
     173        return $rs if ($rs != 0); 
     174 
     175        # 
     176        # Does the new domain entry exists ? 
     177        # 
     178        ($rs, $rdata) = get_tag($entry_b_val, $entry_e_val, $working); 
     179        if ($rs == 0) { 
     180                # Yes it exists ! Then we must delete it ! 
     181                ($rs, $working) = del_tag($entry_b_val, "$entry_e_val\n", $working); 
     182                return $rs if ($rs != 0); 
     183        } 
     184        ($rs, $rdata) = get_tag($entry_b, $entry_e, $working); 
     185        return $rs if ($rs != 0); 
     186 
     187        # 
     188        # Let's construct the replacement and do it; 
     189        # 
     190        my $entry_repl = "$entry_b_val$entry_val$entry_e_val\n$entry_b$entry_e"; 
     191        ($rs, $working) = repl_tag($entry_b, $entry_e, $working, $entry_repl, "dmn_add_named_cfg_data"); 
     192        return $rs if ($rs != 0); 
     193 
     194        # 
     195        # Here we'll backup production config file; 
     196        # 
     197        $rs = sys_command("$main::cfg{'CMD_CP'} -p $sys_cfg $backup_cfg"); 
     198        return $rs if ($rs != 0); 
     199 
     200        # 
     201        # Let's save working copy; 
     202        # 
     203        $rs = store_file($working_cfg, $working, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     204        return $rs if ($rs != 0); 
     205 
     206        # 
     207        # Here we'll replace data in production config file with data in working 
     208        # confing file. A little workaround will be done. If working copy data does not exist 
     209        # in production config then we will add it; 
     210        # 
     211        ($rs, $rdata) = get_tag($dta_b, $dta_e, $sys); 
     212        if ($rs == 0) { # YES ! Data is here ! /in production config file/; 
     213                ($rs, $sys) = repl_tag($dta_b, $dta_e, $sys, $working, "dmn_add_named_cfg_data"); 
     214                return $rs if ($rs != 0); 
     215                } elsif ($rs == -5) { 
     216                $sys .= $working; 
     217        } else { 
     218                return $rs; 
     219        } 
     220        $rs = store_file($sys_cfg, $sys, $main::cfg{'ROOT_USER'}, $main::cfg{'ROOT_GROUP'}, 0644); 
     221        return $rs if ($rs != 0); 
     222 
     223        push_el(\@main::el, 'dmn_add_named_cfg_data()', 'Ending...'); 
     224        return 0; 
     225} 
     226 
     227################################################################################ 
     228## 
     229## Delete DNS CFG Data 
     230## 
     231sub dmn_del_named_cfg_data { 
     232        my ($dmn_data) = @_; 
     233        my ($rs, $rdata) = (undef, undef); 
     234 
     235        push_el(\@main::el, 'dmn_del_named_cfg_data()', 'Starting...'); 
     236        if (!defined($dmn_data) || $dmn_data eq '') { 
     237                push_el(\@main::el, 'dmn_del_named_cfg_data()', 'ERROR: Undefined Input Data...'); 
     238                return -1; 
     239        } 
     240 
     241        # 
     242        # Initial data we need; 
     243        # 
     244        my $dmn_name     = @$dmn_data[1]; 
     245        my $conf_dir     = $main::cfg{'CONF_DIR'}; 
     246        my $sys_cfg      = $main::cfg{'BIND_CONF_FILE'}; 
     247        my $named_db_dir = $main::cfg{'BIND_DB_DIR'}; 
     248        my $tpl_dir      = "$conf_dir/bind/parts"; 
     249        my $backup_dir   = "$conf_dir/bind/backup"; 
     250        my $working_dir  = "$conf_dir/bind/working"; 
     251        my $timestamp    = time; 
     252        my $backup_cfg   = "$backup_dir/named.conf.$timestamp"; 
     253        my $working_cfg  = "$working_dir/named.conf"; 
     254 
     255        # 
     256        #  BEGIN/END tags, and templates needed for this config; 
     257        # 
     258        my ($dta_b, $dta_e, $entry_b, $entry_e, $entry) = ('', '', '', '', ''); 
     259        ( 
     260                $rs, 
     261                $dta_b, 
     262                $dta_e, 
     263                $entry_b, 
     264                $entry_e, 
     265                $entry 
     266        ) = get_tpl( 
     267                $tpl_dir, 
     268                'cfg_dta_b.tpl', 
     269                'cfg_dta_e.tpl', 
     270                'cfg_entry_b.tpl', 
     271                'cfg_entry_e.tpl', 
     272                'cfg_entry.tpl' 
     273        ); 
     274        return $rs if ($rs != 0); 
     275 
     276        # 
     277        # Let's construct needed tags and entries; 
     278        # 
     279        my %tag_hash = ( 
     280                '{DMN_NAME}' => $dmn_name, 
     281                '{DB_DIR}'   => $named_db_dir 
     282        ); 
     283        my ($entry_b_val, $entry_e_val, $entry_val) = ('', '', ''); 
     284        ( 
     285                $rs, 
     286                $entry_b_val, 
     287                $entry_e_val, 
     288                $entry_val 
     289        ) = prep_tpl( 
     290                \%tag_hash, 
     291                $entry_b, 
     292                $entry_e, 
     293                $entry 
     294        ); 
     295        return $rs if ($rs != 0); 
     296 
     297        # 
    328298        # Let's get Sytem and Working config files; 
    329299        # 
     
    441411                'db_dns2_b.tpl', 
    442412                'db_dns2_e.tpl', 
    443                 'db_dns_entry_b.tpl', 
    444                 'db_dns_entry_e.tpl', 
     413                'db_dns_entry_b.tpl', 
     414                'db_dns_entry_e.tpl', 
    445415                'db_dns_entry.tpl', 
    446416                'db_time_b.tpl', 
     
    14711441        my $starter_dir         = $main::cfg{'PHP_STARTER_DIR'}; 
    14721442        my $conf_dir            = $main::cfg{'CONF_DIR'}; 
     1443        my $httpd_uid           = $main::cfg{'APACHE_USER'}; 
    14731444        my $httpd_gid           = $main::cfg{'APACHE_GROUP'}; 
    14741445        my ($sys_uid, $sys_gid) = get_dmn_suexec_user($dmn_id); 
     
    16411612        # Default domain page template; 
    16421613        # 
    1643         # check if htdocs folder not exists 
     1614        # check if htdocs folder does not exist 
    16441615        if (!(-e "$www_dir/$dmn_name/htdocs/")) { 
    16451616                $rs = make_dir( 
     
    16911662                } 
    16921663        } 
    1693  
     1664     
     1665    # Default disable page template; 
     1666        # 
     1667        # check if disable folder does not exist 
     1668        if (!(-e "$www_dir/$dmn_name/disabled")) { 
     1669                $rs = make_dir( 
     1670                        "$www_dir/$dmn_name/disabled", 
     1671                        $httpd_uid, 
     1672                        $httpd_gid, 
     1673                        0755 
     1674                ); 
     1675                return $rs if ($rs != 0); 
     1676 
     1677                my ($index_tpl, $err_cfg_dir) = (undef, undef); 
     1678                my $vhost = $main::cfg{'BASE_SERVER_VHOST'}; 
     1679                $err_cfg_dir = "$main::cfg{'GUI_ROOT_DIR'}/domain_disable_page"; 
     1680                ($rs, $index_tpl) = get_tpl($err_cfg_dir, 'index.html'); 
     1681                return $rs if ($rs != 0); 
     1682 
     1683                my $decoded_dmn_name = idn_to_unicode($dmn_name, 'utf-8'); 
     1684                my %tag_hash = ( 
     1685                        '{DOMAIN_NAME}' => $decoded_dmn_name, 
     1686                        '{BASE_SERVER_VHOST}' => $vhost 
     1687                ); 
     1688                ($rs, $cfg) = prep_tpl(\%tag_hash, $index_tpl); 
     1689                return $rs if ($rs != 0); 
     1690 
     1691                ($rs, $rdata) = store_file( 
     1692                        "$www_dir/$dmn_name/disabled/index.html", 
     1693                        $cfg, 
     1694                        $httpd_uid, 
     1695                        $httpd_gid, 
     1696                        0644 
     1697                ); 
     1698                return $rs if ($rs != 0); 
     1699 
     1700                $rs = sys_command("$main::cfg{'CMD_CP'} -Rp $root_dir/gui/domain_disable_page/images $www_dir/$dmn_name/disabled/"); 
     1701                return $rs if ($rs != 0); 
     1702 
     1703                $rs = setfmode("$www_dir/$dmn_name/disabled/images", $httpd_uid, $httpd_gid, 0755); 
     1704                return $rs if ($rs != 0); 
     1705 
     1706                opendir(DIR, "$www_dir/$dmn_name/htdocs/images/"); 
     1707                my @files = readdir(DIR); 
     1708                closedir(DIR); 
     1709 
     1710                foreach (@files) { 
     1711                        # ignore . and .. : 
     1712            next if ($_ eq "." || $_ eq ".."); 
     1713                        $rs = setfmode("$www_dir/$dmn_name/disabled/images/$_", $httpd_uid, $httpd_gid, 0644); 
     1714                        return $rs if ($rs != 0); 
     1715                } 
     1716        } 
     1717  
    16941718        # 
    16951719        # php.ini for the new domain 
     
    17441768                return $rs if ($rs != 0); 
    17451769        } 
     1770 
    17461771        # 
    17471772        # php-fcgi-starters for every domain 
     
    20202045        if ( -e "$www_dir/$dmn_name" ) { 
    20212046                ($rs, $rdata) = del_dir("$www_dir/$dmn_name"); 
    2022                 } elsif ( -e "$www_dir/$dmn_name.disabled" ) { 
     2047        } elsif ( -e "$www_dir/$dmn_name.disabled" ) { 
    20232048                ($rs, $rdata) = del_dir("$www_dir/$dmn_name.disabled"); 
    20242049        } 
     
    37303755        } 
    37313756 
    3732         my $dmn_name         = @$dmn_data[1]; 
    3733         my $www_dir          = $main::cfg{'APACHE_WWW_DIR'}; 
    3734         my $dmn_dir          = "$www_dir/$dmn_name"; 
    3735         my $dmn_disabled_dir = "$www_dir/$dmn_name.disabled"; 
    3736         my $cmd_rm           = $main::cfg{'CMD_RM'}; 
    3737         my $cmd_mv           = $main::cfg{'CMD_MV'}; 
    3738         my ($cmd, $rs)       = (undef, undef); 
    3739  
    3740         # delete target folder if exists 
    3741         # this can happen because subdomains created empty access logs 
    3742         if (-e $dmn_dir) { 
    3743                 $cmd = "$cmd_rm -r $dmn_dir"; 
    3744                 $rs = sys_command($cmd); 
    3745                 return $rs if ($rs != 0); 
    3746         } 
    3747  
    3748         $cmd = "$cmd_mv $dmn_disabled_dir $dmn_dir"; 
    3749         $rs = sys_command($cmd); 
     3757        my ($rs, $rdata)             = ('', ''); 
     3758        my $dmn_name                 = @$dmn_data[1]; 
     3759        my $www_dir                  = $main::cfg{'APACHE_WWW_DIR'}; 
     3760        my $dmn_dir                  = "$www_dir/$dmn_name/htdocs"; 
     3761        my $dmn_disabled_dir         = "$www_dir/$dmn_name/htdocs.disabled"; 
     3762        my $dmn_disabled_content_dir = "$www_dir/$dmn_name/disabled"; 
     3763        my $cmd_mv                   = $main::cfg{'CMD_MV'}; 
     3764        my $cmd_di                   = "$cmd_mv $dmn_dir $dmn_disabled_content_dir"; 
     3765        my $cmd_ht                   = "$cmd_mv $dmn_disabled_dir $dmn_dir"; 
     3766 
     3767        $rs = sys_command($cmd_di); 
     3768        return $rs if ($rs != 0); 
     3769 
     3770        $rs = sys_command($cmd_ht); 
    37503771        return $rs if ($rs != 0); 
    37513772 
     
    37663787        } 
    37673788 
    3768         my ($rs, $rdata)     = ('', ''); 
    3769         my $dmn_name         = @$dmn_data[1]; 
    3770         my $www_dir          = $main::cfg{'APACHE_WWW_DIR'}; 
    3771         my $dmn_dir          = "$www_dir/$dmn_name"; 
    3772         my $dmn_disabled_dir = "$www_dir/$dmn_name.disabled"; 
    3773         my $cmd_mv           = $main::cfg{'CMD_MV'}; 
    3774         my $cmd              = "$cmd_mv $dmn_dir $dmn_disabled_dir"; 
    3775  
    3776         $rs = sys_command($cmd); 
     3789        my ($rs, $rdata)             = ('', ''); 
     3790        my $dmn_name                 = @$dmn_data[1]; 
     3791        my $www_dir                  = $main::cfg{'APACHE_WWW_DIR'}; 
     3792        my $dmn_dir                  = "$www_dir/$dmn_name/htdocs"; 
     3793        my $dmn_disabled_dir         = "$www_dir/$dmn_name/htdocs.disabled"; 
     3794        my $dmn_disabled_content_dir = "$www_dir/$dmn_name/disabled"; 
     3795        my $cmd_mv                   = $main::cfg{'CMD_MV'}; 
     3796        my $cmd_ht                   = "$cmd_mv $dmn_dir $dmn_disabled_dir"; 
     3797        my $cmd_di                   = "$cmd_mv $dmn_disabled_content_dir $dmn_dir"; 
     3798 
     3799        $rs = sys_command($cmd_ht); 
     3800        return $rs if ($rs != 0); 
     3801 
     3802        $rs = sys_command($cmd_di); 
    37773803        return $rs if ($rs != 0); 
    37783804 
     
    39193945} 
    39203946exit 0; 
     3947 
  • branches/domain-disable/gui/Makefile

    r2131 r2359  
    5050 
    5151        cp -dR ./domain_default_page $(SYSTEM_GUI_ROOT) 
     52        cp -dR ./domain_disable_page $(SYSTEM_GUI_ROOT) 
    5253        cp -dR ./errordocs $(SYSTEM_GUI_ROOT) 
    5354        cp -dR ./themes $(SYSTEM_GUI_ROOT) 
Note: See TracChangeset for help on using the changeset viewer.