Changeset 743

Show
Ignore:
Timestamp:
08/13/07 05:15:48 (16 months ago)
Author:
raphael
Message:

Fixed #558: bruteforce protection is bogus
Fixed #552: wrong data in domain counters in reseller page
Fixed several errors in domain syntax checks
Fixed #559: error in /etc/courier/userdb home path for subdomains

Location:
trunk
Files:
1 removed
48 modified

Legend:

Unmodified
Added
Removed
  • trunk/CHANGELOG

    r742 r743  
    66|               * gui: disable stats-alias in client menu         | 
    77\_________________________________________________________________/ 
     8 
     92007-08-12 Raphael Geissert 
     10    - GUI: 
     11        * Fixed #558: bruteforce protection is bogus 
     12        * Fixed #552: wrong data in domain counters in reseller page 
     13        * Fixed several errors in domain syntax checks 
     14    - ENGINE: 
     15        * Fixed #559: error in /etc/courier/userdb home path for subdomains 
    816 
    9172007-08-06 Benedikt Heintel 
  • trunk/engine/backup/ispcp-backup-all

    r736 r743  
    290290                                if ($dbuser && $dbpass) { 
    291291                                        my $db_backup_file = "$dmn_backup_dir/$db_name.sql"; 
    292                                         my $db_backupcmd = "$main::cfg{'CMD_MYSQLDUMP'} --add-drop-table -u\'$dbuser\' -p\'$dbpass\' \'$db_name\' >\'$db_backup_file\'"; 
     292                                        my $db_backupcmd = "$main::cfg{'CMD_MYSQLDUMP'} --add-drop-table --allow-keywords --quote-names -u\'$dbuser\' -p\'$dbpass\' \'$db_name\' >\'$db_backup_file\'"; 
    293293                                        my $db_compresscmd = "$main::cfg{'CMD_BZIP'} --force \'$db_backup_file\'"; 
    294294                                        $rs = sys_command($db_backupcmd); 
  • trunk/engine/ispcp-mbox-mngr

    r716 r743  
    25312531        $hash_key = "$mail_acc\@$sub_name"; 
    25322532 
    2533         $hash_value = "uid=$mbox_uid|gid=$mbox_gid|home=$virtual_mail_dir/$dmn_name/$mail_acc|shell=/bin/false|systempw=$rdata|mail=$virtual_mail_dir/$sub_name/$mail_acc"; 
     2533        $hash_value = "uid=$mbox_uid|gid=$mbox_gid|home=$virtual_mail_dir/$sub_name/$mail_acc|shell=/bin/false|systempw=$rdata|mail=$virtual_mail_dir/$sub_name/$mail_acc"; 
    25342534 
    25352535        $rs = set_mta_hash_value($userdb_working_cfg, $hash_key, $hash_value); 
  • trunk/gui/client/add_alias.php

    r711 r743  
    188188 
    189189        $cr_user_id = $domain_id = get_user_domain_id($sql, $_SESSION['user_id']); 
    190         $alias_name     = strtolower(clean_input($_POST['ndomain_name'])); 
    191         $mount_point = strtolower(clean_input($_POST['ndomain_mpoint'])); 
     190        $alias_name     = strtolower($_POST['ndomain_name']); 
     191        $mount_point = strtolower($_POST['ndomain_mpoint']); 
    192192        $forward = strtolower(clean_input($_POST['forward'])); 
    193193 
     
    209209        //$mount_point = "/".$mount_point; 
    210210 
    211         // Fisrt check is the data correct 
     211        // Fisrt check if the data is correct 
    212212        if (!chk_dname($alias_name)) { 
    213213                $err_al = tr("Incorrect domain name syntax"); 
  • trunk/gui/client/add_mail_acc.php

    r731 r743  
    405405    } 
    406406 
    407     if ($_POST['dmn_type'] === 'sub' && $_POST['sub_id'] == 0) { 
     407    if ($_POST['dmn_type'] === 'sub' && !isset($_POST['sub_id'])) { 
    408408        set_page_message(tr('Subdomain list is empty! You can not add mail accounts!')); 
    409409        return; 
    410410    } 
    411411 
    412     if ($_POST['dmn_type'] === 'als' && $_POST['als_id'] == 0) { 
    413         set_page_message(tr('Alias list is empty! You can not add mail accounts!') . $_POST['als_id']); 
     412    if ($_POST['dmn_type'] === 'als' && !isset($_POST['als_id'])) { 
     413        set_page_message(tr('Alias list is empty! You can not add mail accounts!')); 
    414414        return; 
    415415    } 
    416416 
    417     if ($_POST['mail_type'] === 'forward' && $_POST['forward_list'] === '') { 
    418         set_page_message(tr('Forward list is empty!') . $_POST['mail_type'] . $_POST['forward_list']); 
     417    if ($_POST['mail_type'] === 'forward' && empty($_POST['forward_list'])) { 
     418        set_page_message(tr('Forward list is empty!')); 
    419419        return; 
    420420    } 
     
    519519$tpl->assign(array('TR_CLIENT_ADD_MAIL_ACC_PAGE_TITLE' => tr('ISPCP - Client/Add Mail User'), 
    520520        'THEME_COLOR_PATH' => "../themes/$theme_color", 
    521         'THEME_CHARSET' => tr('encoding'),  
     521        'THEME_CHARSET' => tr('encoding'), 
    522522        'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    523523        'ISP_LOGO' => get_logo($_SESSION['user_id']))); 
  • trunk/gui/client/catchall.php

    r736 r743  
    7777 
    7878    if ($mail_status === $cfg['ITEM_ADD_STATUS']) { 
    79         return array(tr('N/A'), '#'); 
     79        return array(tr('N/A'), '#');//Addition in progress 
    8080    } else if ($mail_status === $cfg['ITEM_OK_STATUS']) { 
    8181        return array(tr('Delete CatchAll'), "delete_catchall.php?id=$mail_id"); 
  • trunk/gui/client/cronjobs_add.php

    r731 r743  
    3737                        'TR_CLIENT_CRONJOBS_TITLE' => tr('ISPCP - Client/Cronjob Manager'), 
    3838                        'THEME_COLOR_PATH' => "../themes/$theme_color", 
    39                         'THEME_CHARSET' => tr('encoding'),  
     39                        'THEME_CHARSET' => tr('encoding'), 
    4040                        'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    4141                                                'ISP_LOGO' => get_logo($_SESSION['user_id']) 
     
    8585                                           'TR_HOUR' => tr('Hour(s):'), 
    8686                                           'TR_DAY' => tr('Day(s):'), 
    87                                            'TR_MONTHS' => tr('Months(s):'), 
     87                                           'TR_MONTHS' => tr('Month(s):'), 
    8888                                           'TR_WEEKDAYS' => tr('Weekday(s):'), 
    8989                                           'TR_ADD' => tr('Add'), 
  • trunk/gui/client/cronjobs_edit.php

    r731 r743  
    3737                        'TR_CLIENT_CRONJOBS_TITLE' => tr('ISPCP - Client/Cronjob Manager'), 
    3838                        'THEME_COLOR_PATH' => "../themes/$theme_color", 
    39                         'THEME_CHARSET' => tr('encoding'),  
     39                        'THEME_CHARSET' => tr('encoding'), 
    4040                        'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    4141                                                'ISP_LOGO' => get_logo($_SESSION['user_id']) 
     
    9393                                           'TR_HOUR' => tr('Hour(s):'), 
    9494                                           'TR_DAY' => tr('Day(s):'), 
    95                                            'TR_MONTHS' => tr('Months(s):'), 
     95                                           'TR_MONTHS' => tr('Month(s):'), 
    9696                                           'TR_WEEKDAYS' => tr('Weekday(s):'), 
    9797                                           'TR_UPDATE' => tr('Update'), 
  • trunk/gui/client/puser_assign.php

    r731 r743  
    4545                array( 
    4646                        'THEME_COLOR_PATH' => "../themes/$theme_color", 
    47                         'THEME_CHARSET' => tr('encoding'),  
     47                        'THEME_CHARSET' => tr('encoding'), 
    4848                        'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    4949                                                'ISP_LOGO' => get_logo($_SESSION['user_id']) 
     
    240240                                check_for_lock_file(); 
    241241                                send_request(); 
    242                                 set_page_message(tr('User was assigned to group')." - ".$rs -> fields['ugroup']); 
     242                                set_page_message(tr('User was assigned to the %s group', $rs -> fields['ugroup'])); 
    243243 
    244244        } else { 
     
    309309 
    310310 
    311                         set_page_message(tr('User was deleted from group ')."- ".$rs -> fields['ugroup']); 
     311                        set_page_message(tr('User was deleted from the %s group ', $rs -> fields['ugroup'])); 
    312312 
    313313        } else { 
  • trunk/gui/client/puser_gadd.php

    r731 r743  
    4747                        'TR_CLIENT_WEBTOOLS_PAGE_TITLE' => tr('ISPCP - Client/Webtools'), 
    4848                        'THEME_COLOR_PATH' => "../themes/$theme_color", 
    49                         'THEME_CHARSET' => tr('encoding'),  
     49                        'THEME_CHARSET' => tr('encoding'), 
    5050                        'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    5151                                                'ISP_LOGO' => get_logo($_SESSION['user_id']) 
     
    124124                } else { 
    125125 
    126                         set_page_message(tr('Group already exist !')); 
     126                        set_page_message(tr('Group already exists!')); 
    127127                        return; 
    128128                } 
  • trunk/gui/client/sql_add_user.php

    r730 r743  
    274274  // 
    275275  if (preg_match("/[%|\?]+/", $db_user)) { 
    276      set_page_message(tr('Wildcards as % and ? are not allowed!')); 
     276     set_page_message(tr('Wildcards as %% and ? are not allowed!')); 
    277277         return; 
    278278  } 
     
    376376$tpl -> assign(array('TR_CLIENT_SQL_ADD_USER_PAGE_TITLE' => tr('ISPCP - Client/Add SQL User'), 
    377377                     'THEME_COLOR_PATH' => "../themes/$theme_color", 
    378                      'THEME_CHARSET' => tr('encoding'),  
     378                     'THEME_CHARSET' => tr('encoding'), 
    379379                     'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    380380                     'ISP_LOGO' => get_logo($_SESSION['user_id']))); 
  • trunk/gui/client/update_hp.php

    r731 r743  
    155155    $i = 0; 
    156156    while (!$rs->EOF) { 
    157         $details = $rs->fields['props']; 
    158         list($hp_php, $hp_cgi, $hp_sub, $hp_als, $hp_mail, $hp_ftp, $hp_sql_db, $hp_sql_user, $hp_traff, $hp_disk) = explode(";", $details); 
     157        list($hp_php, $hp_cgi, $hp_sub, $hp_als, $hp_mail, $hp_ftp, $hp_sql_db, $hp_sql_user, $hp_traff, $hp_disk) = explode(";", $rs->fields['props']); 
     158 
    159159        $details = ''; 
     160 
    160161        if ($hp_php === '_yes_') { 
    161162            $details = tr('PHP Support: enabled') . "<br>"; 
     
    167168        if ($hp_cgi === '_yes_') { 
    168169            $cgi = "yes"; 
    169             $details = $details . " " . tr('CGI Support: enabled') . "<br>"; 
     170            $details .= tr('CGI Support: enabled') . "<br>"; 
    170171        } else { 
    171172            $cgi = "no"; 
    172             $details = $details . " " . tr('CGI Support: disabled') . "<br>"; 
     173            $details .= tr('CGI Support: disabled') . "<br>"; 
    173174        } 
    174175        if (is_numeric(gen_num_limit_msg($hp_disk))) { 
    175             $hdd_usage = tr('HDD') . ": " . sizeit(gen_num_limit_msg($hp_disk * 1024 * 1024)) . "<br>"; 
    176         } else { 
    177             $hdd_usage = tr('HDD') . ": " . gen_num_limit_msg($hp_disk) . "<br>"; 
     176            $hdd_usage = tr('Disk limit') . ": " . sizeit(gen_num_limit_msg($hp_disk * 1024 * 1024)) . "<br>"; 
     177        } else { 
     178            $hdd_usage = tr('Disk limit') . ": " . gen_num_limit_msg($hp_disk) . "<br>"; 
    178179        } 
    179180 
    180181        if (is_numeric(gen_num_limit_msg($hp_traff))) { 
    181             $traffic_usage = tr('Traffic') . ": " . sizeit(gen_num_limit_msg($hp_traff * 1024 * 1024)); 
    182         } else { 
    183             $traffic_usage = tr('Traffic') . ": " . gen_num_limit_msg($hp_traff * 1024 * 1024); 
    184         } 
    185  
    186         $details = $details . " " . tr('Aliases') . ": " . gen_num_limit_msg($hp_als) . "<br>" . tr('Subdomains') . ": " . gen_num_limit_msg($hp_sub) . "<br>" . tr('Emails') . ": " . gen_num_limit_msg($hp_mail) . "<br>" . tr('FTPs') . ": " . gen_num_limit_msg($hp_ftp) . "<br>" . tr('SQL Databases') . " " . gen_num_limit_msg($hp_sql_db) . "<br>" . tr('SQL Users') . ": " . gen_num_limit_msg($hp_sql_user) . "<br>" . $hdd_usage . $traffic_usage; 
     182            $traffic_usage = tr('Traffic limit') . ": " . sizeit(gen_num_limit_msg($hp_traff * 1024 * 1024)); 
     183        } else { 
     184            $traffic_usage = tr('Traffic limit') . ": " . gen_num_limit_msg($hp_traff * 1024 * 1024); 
     185        } 
     186 
     187        $details .= tr('Aliases') . ": " . gen_num_limit_msg($hp_als) . "<br>"; 
     188        $details .= tr('Subdomains') . ": " . gen_num_limit_msg($hp_sub) . "<br>"; 
     189        $details .= tr('Emails') . ": " . gen_num_limit_msg($hp_mail) . "<br>"; 
     190        $details .= tr('FTPs') . ": " . gen_num_limit_msg($hp_ftp) . "<br>"; 
     191        $details .= tr('SQL Databases') . ": " . gen_num_limit_msg($hp_sql_db) . "<br>"; 
     192        $details .= tr('SQL Users') . ": " . gen_num_limit_msg($hp_sql_user) . "<br>"; 
     193        $details .= $hdd_usage . $traffic_usage; 
    187194 
    188195        $price = $rs->fields['price']; 
     
    259266} 
    260267 
    261 global $cfg; 
    262268$theme_color = $cfg['USER_INITIAL_THEME']; 
    263269$tpl->assign( 
     
    265271                                'TR_CLIENT_UPDATE_HP' => tr('ISPCP - Update hosting plan'), 
    266272                        'THEME_COLOR_PATH' => "../themes/$theme_color", 
    267                         'THEME_CHARSET' => tr('encoding'),  
     273                        'THEME_CHARSET' => tr('encoding'), 
    268274                        'ISPCP_LICENSE' => $cfg['ISPCP_LICENSE'], 
    269275                        'ISP_LOGO' => get_logo($_SESSION['user_id']) 
  • trunk/gui/include/client-functions.php

    r734 r743  
    576576 
    577577function user_trans_item_status($item_status) { 
    578     global $cfg; 
    579  
    580     if ($item_status === $cfg['ITEM_ADD_STATUS']) { 
    581         return tr('Addition in progress'); 
    582     } else if ($item_status === $cfg['ITEM_OK_STATUS']) { 
    583         return tr('OK'); 
    584     } else if ($item_status === $cfg['ITEM_CHANGE_STATUS']) { 
    585         return tr('Modification in progress'); 
    586     } else if ($item_status === $cfg['ITEM_DELETE_STATUS']) { 
    587         return tr('Deletion in progress'); 
    588     } else { 
    589         return tr('Unknown Error'); 
    590     } 
     578 
     579    //DEPRECATED 
     580    return translate_dmn_status($item_status); 
    591581} 
    592582 
  • trunk/gui/include/i18n.php

    r727 r743  
    1717 *  http://opensource.org | osi@opensource.org 
    1818 **/ 
     19 
     20function curlang($newlang = null) { 
     21 
     22    static $language = null; 
     23 
     24    $_language = $language; 
     25 
     26    if ($language === null && ($newlang === null || $newlang == false)) { 
     27        // autodetect 
     28        $newlang = true; 
     29    } 
     30 
     31    if ($newlang !== null && $newlang != false) { 
     32        if ($newlang === true) { 
     33            $newlang = (isset($_SESSION['user_def_lang'])) ? $_SESSION['user_def_lang'] : $cfg['USER_INITIAL_LANG']; 
     34        } 
     35 
     36        $language = $newlang; 
     37    } 
     38 
     39    return ($_language !== null)? $_language : $language; 
     40 
     41} 
    1942 
    2043/** 
     
    3861    } 
    3962 
    40     $lang = (isset($_SESSION['user_def_lang'])) ? $_SESSION['user_def_lang'] : $cfg['USER_INITIAL_LANG']; 
     63    $lang = curlang(); 
    4164    $encoding = 'UTF-8'; 
    4265 
  • trunk/gui/include/input-checks.php

    r739 r743  
    312312 
    313313        $match = array(); 
    314     if (!preg_match("/^([[^a-z0-9^A-Z^������\-]*)([A-Za-z0-9])$/D", $data, $match)) 
    315                 return FALSE; 
    316  
    317     if (preg_match("/\-\-/", $match[2])) 
    318                 return FALSE; 
     314    if (!preg_match("/^([A-Za-z0-9])([a-z0-9A-Z\-]*)([A-Za-z0-9])$/D", $data, $match)) 
     315                return FALSE; 
     316 
     317    /*if (preg_match("/\-\-/", $match[2])) 
     318                return FALSE;*/ 
    319319 
    320320    return TRUE; 
     
    337337        return false; 
    338338    } 
    339      
     339 
    340340    if (!rsl_full_domain_check($dname)) 
    341341                return FALSE; 
  • trunk/gui/include/login-functions.php

    r707 r743  
    6464} 
    6565 
    66 function unblock($ttl = 30) { 
    67         global $sql; 
    68  
    69         $boundary = time() - $ttl * 60; 
    70         $query = "DELETE FROM login WHERE user_name is NULL AND lastaccess < '" . $boundary . "'"; 
     66function unblock($timeout = null, $type = 'bruteforce') { 
     67        global $sql, $cfg; 
     68 
     69        if ($timeout === null) { 
     70            $timeout = $cfg['BRUTEFORCE_BLOCK_TIME']; 
     71        } 
     72 
     73        $timeout = time() - ($timeout * 60); 
     74 
     75        switch ($type) { 
     76            case 'bruteforce': 
     77                $query = "UPDATE login SET login_count='1' WHERE login_count > " . $cfg['BRUTEFORCE_MAX_LOGIN'] . " AND lastaccess < " . $timeout . " AND user_name is NULL"; 
     78                break; 
     79            case 'captcha': 
     80                $query = "UPDATE login SET captcha_count='1' WHERE captcha_count > " . $cfg['BRUTEFORCE_MAX_CAPTCHA'] . " AND lastaccess < " . $timeout . " AND user_name is NULL"; 
     81                break; 
     82            default: 
     83                die('FIXME: '.__FILE__.':'.__LINE__); 
     84                break; 
     85        } 
    7186 
    7287        exec_query($sql, $query, array()); 
     
    7489} 
    7590 
    76 function is_ipaddr_blocked($ipaddr) { 
    77         global $sql, $cfg; 
    78  
    79         $query = "SELECT * FROM login WHERE ipaddr='" . $ipaddr . "' AND login_count='" .  $cfg['BRUTEFORCE_MAX_LOGIN'] . "' OR captcha_count='" .  $cfg['BRUTEFORCE_MAX_CAPTCHA'] . "'"; 
    80         $res = exec_query($sql, $query, array()); 
    81  
    82         if ($res -> RecordCount() == 1) { 
    83                 return TRUE; 
    84         } 
    85  
    86         return FALSE; 
    87 } 
    88  
    89 function check_ipaddr($ipaddr, $type = "brutefoce") { 
    90         global $sql, $cfg; 
     91function is_ipaddr_blocked($ipaddr = null, $type = 'bruteforce', $autodeny = false) { 
     92        global $sql, $cfg; 
     93 
     94        if ($ipaddr === null) { 
     95            $ipaddr = getipaddr(); 
     96        } 
     97 
     98        switch ($type) { 
     99            case 'bruteforce': 
     100                $query = "SELECT * FROM login WHERE ipaddr='" . $ipaddr . "' AND login_count='" .  $cfg['BRUTEFORCE_MAX_LOGIN'] . "'"; 
     101                break; 
     102            case 'captcha': 
     103                $query = "SELECT * FROM login WHERE ipaddr='" . $ipaddr . "' AND captcha_count='" .  $cfg['BRUTEFORCE_MAX_CAPTCHA'] . "'"; 
     104                break; 
     105            default: 
     106                die('FIXME: '.__FILE__.':'.__LINE__); 
     107                break; 
     108        } 
     109        $res = exec_query($sql, $query, array()); 
     110 
     111        if ($res -> RecordCount() == 0) { 
     112            return false; 
     113        } else if (!$autodeny) { 
     114            return true; 
     115        } 
     116 
     117        deny_access(); 
     118} 
     119 
     120function check_ipaddr($ipaddr = null, $type = "brutefoce") { 
     121        global $sql, $cfg; 
     122 
     123        if (!$cfg['BRUTEFORCE']) 
     124        return false; 
     125 
     126        if ($ipaddr === null) { 
     127            $ipaddr = getipaddr(); 
     128        } 
    91129 
    92130        $sess_id = session_id(); 
     
    95133 
    96134        if ($res->RecordCount() == 0) { 
    97                 $query = "INSERT INTO login     (session_id, ipaddr, lastaccess, login_count, captcha_count) VALUES ('" . $sess_id . "','" . $ipaddr . "',UNIX_TIMESTAMP(),'1', '1')"; 
    98                 exec_query($sql, $query, array()); 
     135                $query = "INSERT INTO login     (session_id, ipaddr, lastaccess, login_count, captcha_count) VALUES ('" . $sess_id . "','" . $ipaddr . "',UNIX_TIMESTAMP(),'?', '?')"; 
     136                exec_query($sql, $query, array((int)($type=='bruteforce'),(int)($type=='captcha'))); 
    99137                return false; 
    100138        } 
    101  
    102         if (!$cfg['BRUTEFORCE']) 
    103                 return false; 
    104139 
    105140        $data = $res->FetchRow(); 
     
    109144        $capchacount = $data['captcha_count']; 
    110145 
    111         if ($logincount > ($cfg['BRUTEFORCE_MAX_LOGIN'])) { 
    112  
    113                 if (($lastaccess + 1800) < time()) { 
    114                         if ($type == "bruteforce") { 
    115                                 $query = "UPDATE login SET lastaccess=UNIX_TIMESTAMP(), login_count='1' WHERE ipaddr='" . $ipaddr . "' AND user_name is NULL"; 
    116                         } 
    117                         else { 
    118                                 $query = "UPDATE login SET lastaccess=UNIX_TIMESTAMP(), captcha_count='1' WHERE ipaddr='" . $ipaddr . "' AND user_name is NULL"; 
    119  
    120                         } 
    121                         exec_query($sql, $query, array()); 
    122                         return false; 
    123                 } 
    124                 block_ipaddr($ipaddr); 
     146        if ($type == 'bruteforce' && $logincount > $cfg['BRUTEFORCE_MAX_LOGIN']) { 
     147            block_ipaddr($ipaddr, 'Login'); 
     148        } 
     149 
     150        if ($type == 'captcha' && $logincount > $cfg['BRUTEFORCE_MAX_CAPTCHA']) { 
     151            block_ipaddr($ipaddr, 'CAPTCHA'); 
    125152        } 
    126153 
    127154        if ($cfg['BRUTEFORCE_BETWEEN']) { 
    128155                $btime = $lastaccess + $cfg['BRUTEFORCE_BETWEEN_TIME']; 
    129         } 
    130         else { 
     156        } else { 
    131157                $btime = 0; 
    132158        } 
    133159 
    134160        if ($btime < time()) { 
     161