@@ -402,27 +402,33 @@ PGconn *
402
402
pgut_connect (const char * info , YesNo prompt , int elevel )
403
403
{
404
404
char * passwd ;
405
-
406
- CHECK_FOR_INTERRUPTS ();
405
+ StringInfoData add_pass ;
407
406
408
407
if (prompt == YES )
408
+ {
409
409
passwd = prompt_for_password ();
410
+ initStringInfo (& add_pass );
411
+ appendStringInfo (& add_pass , info );
412
+ appendStringInfo (& add_pass , " password=%s " , passwd );
413
+ }
410
414
else
411
415
passwd = NULL ;
412
416
413
417
/* Start the connection. Loop until we have a password if requested by backend. */
414
418
for (;;)
415
419
{
416
420
PGconn * conn ;
421
+ CHECK_FOR_INTERRUPTS ();
417
422
418
- conn = PQconnectdb (info );
423
+ if (!passwd )
424
+ conn = PQconnectdb (info );
425
+ else
426
+ conn = PQconnectdb (add_pass .data );
419
427
420
428
if (PQstatus (conn ) == CONNECTION_OK )
421
429
{
422
430
pgutConn * c ;
423
431
424
- free (passwd );
425
-
426
432
c = pgut_new (pgutConn );
427
433
c -> conn = conn ;
428
434
c -> cancel = NULL ;
@@ -432,6 +438,10 @@ pgut_connect(const char *info, YesNo prompt, int elevel)
432
438
pgut_connections = c ;
433
439
pgut_conn_unlock ();
434
440
441
+ if (passwd )
442
+ termStringInfo (& add_pass );
443
+
444
+ free (passwd );
435
445
return conn ;
436
446
}
437
447
@@ -440,6 +450,9 @@ pgut_connect(const char *info, YesNo prompt, int elevel)
440
450
PQfinish (conn );
441
451
free (passwd );
442
452
passwd = prompt_for_password ();
453
+ initStringInfo (& add_pass );
454
+ appendStringInfo (& add_pass , info );
455
+ appendStringInfo (& add_pass , " password=%s " , passwd );
443
456
continue ;
444
457
}
445
458
ereport (elevel ,
0 commit comments