install/includes/stages/database_postgresql.php
changeset 857 f3a5a276208c
parent 801 eb8b23f11744
child 1022 06debbf8dd75
equal deleted inserted replaced
856:0b7ff06aad13 857:f3a5a276208c
    19 
    19 
    20 if ( isset($_POST['_cont']) )
    20 if ( isset($_POST['_cont']) )
    21 {
    21 {
    22   $allow_go = true;
    22   $allow_go = true;
    23   // Do we have everything? If so, continue with installation.
    23   // Do we have everything? If so, continue with installation.
    24   foreach ( array('db_host', 'db_name', 'db_user', 'db_pass') as $field )
    24   foreach ( array('db_host', 'db_name', 'db_user', 'db_pass', 'db_port') as $field )
    25   {
    25   {
    26     if ( empty($_POST[$field]) )
    26     if ( empty($_POST[$field]) )
    27     {
    27     {
    28       $allow_go = false;
    28       $allow_go = false;
    29     }
    29     }
    71         'mode' => 'error',
    71         'mode' => 'error',
    72         'error' => 'Exception in JSON decoder'
    72         'error' => 'Exception in JSON decoder'
    73       )));
    73       )));
    74   }
    74   }
    75   
    75   
       
    76   if ( !is_int($info['db_port']) )
       
    77   {
       
    78     $return['host_good'] = false;
       
    79     echo enano_json_encode($return);
       
    80     exit;
       
    81   }
       
    82   
       
    83   $port = $info['db_port'] ? $info['db_port'] : 5432;
       
    84   
    76   // Try to connect as the normal user
    85   // Try to connect as the normal user
    77   // generate connection string
    86   // generate connection string
    78   $conn_string = "dbname = '" . addslashes($info['db_name']) . "' port = '5432' host = '" . addslashes($info['db_host']) . "' " . 
    87   $conn_string = "dbname = '" . addslashes($info['db_name']) . "' port = '$port' host = '" . addslashes($info['db_host']) . "' " . 
    79                  "user= '" . addslashes($info['db_user']) . "' password = '" . addslashes($info['db_pass']) . "'";
    88                  "user= '" . addslashes($info['db_user']) . "' password = '" . addslashes($info['db_pass']) . "'";
    80   $test = @pg_connect($conn_string);
    89   $test = @pg_connect($conn_string);
    81   if ( !$test )
    90   if ( !$test )
    82   {
    91   {
    83     // Connection as normal user failed. PgSQL doesn't give us an error string so
    92     // Connection as normal user failed. PgSQL doesn't give us an error string so
    84     // just try to connect as root. If even that fails, exit with an error
    93     // just try to connect as root. If even that fails, exit with an error
    85     $return['creating_user'] = true;
    94     $return['creating_user'] = true;
    86     if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
    95     if ( !empty($info['db_root_user']) && !empty($info['db_root_pass']) )
    87     {
    96     {
    88       $conn_string_root = "dbname = '" . addslashes($info['db_name']) . "' port = '5432' host = '" . addslashes($info['db_host']) . "' " . 
    97       $conn_string_root = "dbname = '" . addslashes($info['db_name']) . "' port = '$port' host = '" . addslashes($info['db_host']) . "' " . 
    89                           "user= '" . addslashes($info['db_root_user']) . "' password = '" . addslashes($info['db_root_pass']) . "'";
    98                           "user= '" . addslashes($info['db_root_user']) . "' password = '" . addslashes($info['db_root_pass']) . "'";
    90       // Attempt connection as root
    99       // Attempt connection as root
    91       $test_root = @pg_connect($conn_string_root);
   100       $test_root = @pg_connect($conn_string_root);
    92       if ( !$test_root )
   101       if ( !$test_root )
    93       {
   102       {
   179     }
   188     }
   180     var frm = document.forms.database_info;
   189     var frm = document.forms.database_info;
   181     // List of fields
   190     // List of fields
   182     var fields = {
   191     var fields = {
   183       db_host: frm.db_host,
   192       db_host: frm.db_host,
       
   193       db_port: frm.db_port,
   184       db_name: frm.db_name,
   194       db_name: frm.db_name,
   185       db_user: frm.db_user,
   195       db_user: frm.db_user,
   186       db_pass: frm.db_pass,
   196       db_pass: frm.db_pass,
   187       table_prefix: frm.table_prefix,
   197       table_prefix: frm.table_prefix,
   188       db_root_user: frm.db_root_user,
   198       db_root_user: frm.db_root_user,
   195       var matches = fields.db_host.value.match(/^([a-z0-9_-]+)((\.([a-z0-9_-]+))*)?$/);
   205       var matches = fields.db_host.value.match(/^([a-z0-9_-]+)((\.([a-z0-9_-]+))*)?$/);
   196       document.getElementById('s_db_host').src = ( matches ) ? img_neu : img_bad;
   206       document.getElementById('s_db_host').src = ( matches ) ? img_neu : img_bad;
   197       if ( !matches )
   207       if ( !matches )
   198         passed = false;
   208         passed = false;
   199     }
   209     }
       
   210     if ( field == fields.db_port || !field )
       
   211     {
       
   212       var matches = fields.db_port.value.match(/^[0-9]+$/);
       
   213       document.getElementById('s_db_port').src = ( matches ) ? img_neu : img_bad;
       
   214       if ( !matches )
       
   215         passed = false;
       
   216     }
   200     if ( field == fields.db_name || !field )
   217     if ( field == fields.db_name || !field )
   201     {
   218     {
   202       var matches = fields.db_name.value.match(/^[A-z0-9_-]+$/);
   219       var matches = fields.db_name.value.match(/^[A-z0-9_-]+$/);
   203       document.getElementById('s_db_name').src = ( matches ) ? img_neu : img_bad;
   220       document.getElementById('s_db_name').src = ( matches ) ? img_neu : img_bad;
   204       if ( !matches )
   221       if ( !matches )
   241     install_set_ajax_loading();
   258     install_set_ajax_loading();
   242     
   259     
   243     var frm = document.forms.database_info;
   260     var frm = document.forms.database_info;
   244     var connection_info = 'info=' + ajaxEscape(toJSONString({
   261     var connection_info = 'info=' + ajaxEscape(toJSONString({
   245         db_host: frm.db_host.value,
   262         db_host: frm.db_host.value,
       
   263         db_port: parseInt(frm.db_port.value),
   246         db_name: frm.db_name.value,
   264         db_name: frm.db_name.value,
   247         db_user: frm.db_user.value,
   265         db_user: frm.db_user.value,
   248         db_pass: frm.db_pass.value,
   266         db_pass: frm.db_pass.value,
   249         db_root_user: frm.db_root_user.value,
   267         db_root_user: frm.db_root_user.value,
   250         db_root_pass: frm.db_root_pass.value
   268         db_root_pass: frm.db_root_pass.value
   307               document.getElementById('e_db_host').innerHTML = $lang.get('dbpgsql_msg_err_connect', { db_host: frm.db_host.value, pg_error: response.last_error });
   325               document.getElementById('e_db_host').innerHTML = $lang.get('dbpgsql_msg_err_connect', { db_host: frm.db_host.value, pg_error: response.last_error });
   308               document.getElementById('s_db_host').src = img_bad;
   326               document.getElementById('s_db_host').src = img_bad;
   309             }
   327             }
   310             if ( !response.version.good )
   328             if ( !response.version.good )
   311             {
   329             {
   312               document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_err_version', { pg_version: response.version.version });
   330               if ( response.version.version == 'indeterminate' )
       
   331                 document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_warn_pg_version');
       
   332               else
       
   333                 document.getElementById('e_pgsql_version').innerHTML = $lang.get('dbpgsql_msg_err_version', { pg_version: response.version.version });
   313               document.getElementById('s_pgsql_version').src = img_bad;
   334               document.getElementById('s_pgsql_version').src = img_bad;
   314             }
   335             }
   315           }
   336           }
   316         }
   337         }
   317       });
   338       });
   338     <td>
   359     <td>
   339       <input onkeyup="verify(this);" tabindex="1" name="db_host" size="30" type="text" />
   360       <input onkeyup="verify(this);" tabindex="1" name="db_host" size="30" type="text" />
   340     </td>
   361     </td>
   341     <td>
   362     <td>
   342       <img id="s_db_host" alt="Good/bad icon" src="../images/checkbad.png" />
   363       <img id="s_db_host" alt="Good/bad icon" src="../images/checkbad.png" />
       
   364     </td>
       
   365   </tr>
       
   366   <tr>
       
   367     <td>
       
   368       <b><?php echo $lang->get('dbpgsql_field_port_title'); ?></b>
       
   369       <br /><?php echo $lang->get('dbpgsql_field_port_body'); ?>
       
   370       <br /><span style="color: #993300" id="e_db_port"></span>
       
   371     </td>
       
   372     <td>
       
   373       <input onkeyup="verify(this);" tabindex="2" name="db_port" size="5" type="text" value="5432" />
       
   374     </td>
       
   375     <td>
       
   376       <img id="s_db_port" alt="Good/bad icon" src="../images/checkbad.png" />
   343     </td>
   377     </td>
   344   </tr>
   378   </tr>
   345   <tr>
   379   <tr>
   346     <td>
   380     <td>
   347       <b><?php echo $lang->get('dbpgsql_field_dbname_title'); ?></b><br />
   381       <b><?php echo $lang->get('dbpgsql_field_dbname_title'); ?></b><br />