]> source.dussan.org Git - nextcloud-server.git/commitdiff
Pg setup enhancement
authorBrice Maron <brice@bmaron.net>
Thu, 28 Jun 2012 19:37:29 +0000 (19:37 +0000)
committerBrice Maron <brice@bmaron.net>
Thu, 28 Jun 2012 19:38:03 +0000 (19:38 +0000)
do not create a db if already existing .. and reset the user password instead of creating if the user already exists

lib/setup.php

index 59c3aefbf13aec36f6dfea364f67569e6c1e4355..5387a0ef493e8ea0003c53e7623a1b2cb9e7261c 100644 (file)
@@ -285,13 +285,23 @@ class OC_Setup {
                //we cant use OC_BD functions here because we need to connect as the administrative user.
                $e_name = pg_escape_string($name);
                $e_user = pg_escape_string($user);
-               $query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\"";
+               $query = "select datname from pg_database where datname = '$e_name'";
                $result = pg_query($connection, $query);
                if(!$result) {
                        $entry='DB Error: "'.pg_last_error($connection).'"<br />';
                        $entry.='Offending command was: '.$query.'<br />';
                        echo($entry);
                }
+               if(! pg_fetch_row($result)) {
+                       //The database does not exists... let's create it
+                       $query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\"";
+                       $result = pg_query($connection, $query);
+                       if(!$result) {
+                               $entry='DB Error: "'.pg_last_error($connection).'"<br />';
+                               $entry.='Offending command was: '.$query.'<br />';
+                               echo($entry);
+                       }
+               }
                $query = "REVOKE ALL PRIVILEGES ON DATABASE \"$e_name\" FROM PUBLIC";
                $result = pg_query($connection, $query);                
        }
@@ -299,13 +309,33 @@ class OC_Setup {
        private static function pg_createDBUser($name,$password,$connection) {
                $e_name = pg_escape_string($name);
                $e_password = pg_escape_string($password);
-               $query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
+               $query = "select * from pg_roles where rolname='$e_name';";
                $result = pg_query($connection, $query);
                if(!$result) {
                        $entry='DB Error: "'.pg_last_error($connection).'"<br />';
                        $entry.='Offending command was: '.$query.'<br />';
                        echo($entry);
                }
+
+               if(! pg_fetch_row($result)) {
+                       //user does not exists let's create it :)
+                       $query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
+                       $result = pg_query($connection, $query);
+                       if(!$result) {
+                               $entry='DB Error: "'.pg_last_error($connection).'"<br />';
+                               $entry.='Offending command was: '.$query.'<br />';
+                               echo($entry);
+                       }
+               }
+               else { // change password of the existing role
+                       $query = "ALTER ROLE \"$e_name\" WITH PASSWORD '$e_password';";
+                       $result = pg_query($connection, $query);
+                       if(!$result) {
+                               $entry='DB Error: "'.pg_last_error($connection).'"<br />';
+                               $entry.='Offending command was: '.$query.'<br />';
+                               echo($entry);
+                       }
+               }
        }
 
        /**