Selaa lähdekoodia

pg-db: fix list_databases() to accept user/passwd

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@60465 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 11 vuotta sitten
vanhempi
commit
e651f3c86c
1 muutettua tiedostoa jossa 15 lisäystä ja 8 poistoa
  1. 15 8
      db/drivers/postgres/listdb.c

+ 15 - 8
db/drivers/postgres/listdb.c

@@ -19,6 +19,7 @@ int db__driver_list_databases(dbString * dbpath, int npaths,
 			      dbHandle ** dblist, int *dbcount)
 {
     int i;
+    const char *user, *passwd;
     PGCONN pgconn;
     PGresult *res;
     int rec_num = 0;
@@ -27,11 +28,8 @@ int db__driver_list_databases(dbString * dbpath, int npaths,
     *dblist = NULL;
     *dbcount = 0;
 
-    /* TODO: the solution below is not good as user usually does not have permissions for "template1" */
-    /*    db_d_append_error(_("db_driver_list_databases() is not implemented"));
-          db_d_report_error();
-          return DB_FAILED;
-    */
+    /* TODO: the solution below is not good as user usually does not
+     * have permissions for "template1" */
 
     if (npaths < 1) {
         db_d_append_error(_("No path given"));
@@ -48,9 +46,18 @@ int db__driver_list_databases(dbString * dbpath, int npaths,
 	    pgconn.dbname, pgconn.user, pgconn.password, pgconn.host,
             pgconn.port, pgconn.options, pgconn.tty);
 
-    pg_conn =
-	PQsetdb(pgconn.host, pgconn.port, pgconn.options, pgconn.tty,
-		"template1");
+    db_get_login("pg", NULL, &user, &passwd);
+    G_debug(1, "user = %s, passwd = %s", user, passwd ? "xxx" : "");
+
+    if (user || passwd) {
+        pg_conn = PQsetdbLogin(pgconn.host, pgconn.port, pgconn.options, pgconn.tty,
+                               "template1", user, passwd);
+    }
+    else {
+        pg_conn =
+            PQsetdb(pgconn.host, pgconn.port, pgconn.options, pgconn.tty,
+                    "template1");
+    }
 
     if (PQstatus(pg_conn) == CONNECTION_BAD) {
 	db_d_append_error("%s\n%s",