Przeglądaj źródła

Merge pull request #1104 from hestiacp/fix/1045-database_name-users-changes

Improved DB handling
Raphael Schneeberger 5 lat temu
rodzic
commit
ecfd4fceed

+ 5 - 0
bin/v-add-database

@@ -30,6 +30,11 @@ source $HESTIA/func/main.sh
 source $HESTIA/func/db.sh
 source $HESTIA/conf/hestia.conf
 
+if [ "$type" = "pgsql" ]; then
+   database=$(echo "$user"_"$2" | tr '[:upper:]' '[:lower:]');
+   dbuser=$(echo "$user"_"$3" | tr '[:upper:]' '[:lower:]'); 
+fi
+
 #----------------------------------------------------------#
 #                    Verifications                         #
 #----------------------------------------------------------#

+ 11 - 3
bin/v-change-database-owner

@@ -13,6 +13,7 @@
 database=$1
 user=$2
 
+
 # Includes
 source $HESTIA/func/main.sh
 source $HESTIA/func/db.sh
@@ -51,8 +52,15 @@ if [ -z "$db_data" ]; then
     exit $E_NOTEXIST
 fi
 
-# Check if datbase name is uniq
-new_db=$(echo $database | sed "s/^${owner}_/${user}_/")
+#Fix issue #1084 with "Upper case not allowed with PGSQL"
+if [ "$TYPE" == "pgsql" ]; then
+   usersmall=$(echo "$user" | tr '[:upper:]' '[:lower:]');
+else
+   usersmall=$user
+fi
+
+# Check if database name is uniqe
+new_db=$(echo $database | sed "s/^${owner}_/${usersmall}_/")
 check_db=$(grep "DB='$new_db'" $HESTIA/data/users/$user/db.conf)
 if [ ! -z "$check_db" ]; then
     echo "Error: $new_db database exists"
@@ -84,7 +92,7 @@ case $TYPE in
 esac
 
 # Import configuration
-db_data=$(echo "$db_data" | sed "s/'${owner}_/'${user}_/g")
+db_data=$(echo "$db_data" | sed "s/'${owner}_/'${usersmall}_/g")
 echo "$db_data" >> $HESTIA/data/users/$user/db.conf
 parse_object_kv_list "$db_data"
 

+ 4 - 0
bin/v-change-database-user

@@ -15,6 +15,10 @@ database=$2
 dbuser="$user"_"$3"
 password=$4; HIDE=4
 
+if [ "$type" = "pgsql" ]; then
+   dbuser=$(echo "$user"_"$3" | tr '[:upper:]' '[:lower:]'); 
+fi
+
 # Includes
 source $HESTIA/func/main.sh
 source $HESTIA/func/db.sh

+ 21 - 11
func/main.sh

@@ -724,9 +724,14 @@ is_common_format_valid() {
 
 # Database format validator
 is_database_format_valid() {
-    exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|/|\|\"|'|;|%|\`| ]"
-    if [[ "$1" =~ $exclude ]] || [ 65 -le ${#1} ]; then
-        check_result $E_INVALID "invalid $2 format :: $1"
+    if [ "$3" == "pgsql" ]; then
+        if ! [[ "$1" =~ ^[0-9a-z_]{1,63}$ ]]; then
+            check_result $E_INVALID "invalid $2 format :: $1"
+        fi  
+    else
+        if ! [[ "$1" =~ ^[0-9a-zA-Z_]{1,64}$ ]]; then
+            check_result $E_INVALID "invalid $2 format :: $1"
+        fi  
     fi
 }
 
@@ -739,12 +744,17 @@ is_date_format_valid() {
 
 # Database user validator
 is_dbuser_format_valid() {
-    exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|/|\|\"|'|;|%|\`| ]"
-    if [ 31 -le ${#1} ]; then
-        check_result $E_INVALID "mysql username can be up to 30 characters long"
-    fi
-    if [[ "$1" =~ $exclude ]]; then
-        check_result $E_INVALID "invalid $2 format :: $1"
+    if [ "$3" == "pgsql" ]; then
+        if ! [[ "$1" =~ ^[0-9a-z_]{1,63}$ ]]; then
+            check_result $E_INVALID "invalid $2 format :: $1"
+        fi 
+    else
+        if [ 33 -le ${#1} ]; then
+            check_result $E_INVALID "mysql username can be up to 32 characters long"
+        fi
+        if ! [[ "$1" =~ ^[0-9a-zA-Z_]{1,64}$ ]]; then
+            check_result $E_INVALID "invalid $2 format :: $1"
+        fi           
     fi
 }
 
@@ -931,10 +941,10 @@ is_format_valid() {
                 charset)        is_object_format_valid "$arg" "$arg_name" ;;
                 charsets)       is_common_format_valid "$arg" 'charsets' ;;
                 comment)        is_object_format_valid "$arg" 'comment' ;;
-                database)       is_database_format_valid "$arg" 'database';;
+                database)       is_database_format_valid "$arg" 'database' $type;;
                 day)            is_cron_format_valid "$arg" $arg_name ;;
                 dbpass)         is_password_format_valid "$arg" ;;
-                dbuser)         is_dbuser_format_valid "$arg" 'dbuser';;
+                dbuser)         is_dbuser_format_valid "$arg" 'dbuser' $type;;
                 dkim)           is_boolean_format_valid "$arg" 'dkim' ;;
                 dkim_size)      is_int_format_valid "$arg" ;;
                 domain)         is_domain_format_valid "$arg" ;;

+ 1 - 1
web/add/db/index.php

@@ -38,7 +38,7 @@ if (!empty($_POST['ok'])) {
         if (!filter_var($_POST['v_db_email'], FILTER_VALIDATE_EMAIL)) {
             $_SESSION['error_msg'] = __('Please enter valid email address.');
         }
-    }
+    }   
 
     // Check password length
     if (empty($_SESSION['error_msg'])) {

+ 2 - 2
web/edit/db/index.php

@@ -49,8 +49,8 @@ if (!empty($_POST['save'])) {
     if ((!isset($_POST['token'])) || ($_SESSION['token'] != $_POST['token'])) {
         header('location: /login/');
         exit();
-    }
-
+    } 
+    
     // Change database user
     if (($v_dbuser != $_POST['v_dbuser']) && (empty($_SESSION['error_msg']))) {
         $v_dbuser = preg_replace("/^".$user."_/", "", $_POST['v_dbuser']);

+ 1 - 1
web/templates/admin/add_db.html

@@ -71,7 +71,7 @@
                                     <?php
                                         print __('User');
                                         // if (is_it_mysql_or_mariadb()=='mysql')
-                                        echo "&nbsp;&nbsp;&nbsp;&nbsp;<em><small>(".__('maximum characters length, including prefix', 16).")</small></em>";
+                                        echo "&nbsp;&nbsp;&nbsp;&nbsp;<em><small>(".__('maximum characters length, including prefix', 32).")</small></em>";
                                     ?>
                                 </td>
                             </tr>

+ 6 - 1
web/templates/admin/edit_db.html

@@ -68,6 +68,7 @@
                             <tr>
                                 <td class="vst-text input-label">
                                     <?php print __('User');?>
+                                    <?php echo "&nbsp;&nbsp;&nbsp;&nbsp;<em><small>(".__('maximum characters length, including prefix', 32).")</small></em>"; ?>
                                 </td>
                             </tr>
                             <tr>
@@ -134,8 +135,12 @@
             </table>
         </form>
     </div>
-
+    <?php if ($v_type == 'pgsql'){
+        $user=strtolower($user);
+    }
+    ?>
     <script>
         GLOBAL.DB_USER_PREFIX = <?=json_encode($user.'_')?>;
         GLOBAL.DB_DBNAME_PREFIX = <?=json_encode($user.'_')?>;
     </script>
+