Thread: [HACKERS] dblink module printing unnamed connection (with commit acaf7ccb94)

[HACKERS] dblink module printing unnamed connection (with commit acaf7ccb94)

From
Rushabh Lathia
Date:
Hi All,

DBLINK contrib module started showing :"unnamed" connection name.

Consider the below test:

postgres=# CREATE ROLE alice NOSUPERUSER NOCREATEDB NOCREATEROLE LOGIN PASSWORD 'wonderland';
CREATE ROLE
postgres=# GRANT EXECUTE ON FUNCTION dblink_connect_u(text,text) to alice;
GRANT
postgres=# \c postgres alice
You are now connected to database "postgres" as user "alice".
postgres=> SELECT dblink_connect_u('sm_conn_30','dbname=postgres user=alice password=wonderland');
 dblink_connect_u
------------------
 OK
(1 row)

postgres=> SELECT * FROM dblink_send_query('sm_conn_30','SELECT pg_stat_reset()') as dgr;
 dgr
-----
   1
(1 row)

postgres=> SELECT * FROM dblink_get_result('sm_conn_30') AS dgr(curr_user boolean);
ERROR:  permission denied for function pg_stat_reset
CONTEXT:  Error occurred on dblink connection named "unnamed": could not execute query.

This started with below commit:

commit acaf7ccb94a3916ea83712671a3563f0eb595558
Author: Peter Eisentraut <peter_e@gmx.net>
Date:   Sun Dec 25 12:00:00 2016 -0500

    dblink: Replace some macros by static functions
   
    Also remove some unused code and the no longer useful dblink.h file.
   
    Reviewed-by: Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com>


Before this, macro used to assign the conname local variable; I quickly worked
on the fix and attached patch do fix the issues. Patch assign the conname
local variable, so that error context show the correct connection name.


Regards,
Rushabh Lathia
Attachment

Re: dblink module printing unnamed connection (with commitacaf7ccb94)

From
Peter Eisentraut
Date:
On 3/23/17 01:38, Rushabh Lathia wrote:
> DBLINK contrib module started showing :"unnamed" connection name.

> Before this, macro used to assign the conname local variable; I quickly
> worked
> on the fix and attached patch do fix the issues. Patch assign the conname
> local variable, so that error context show the correct connection name.

Committed, thanks.

In dblink_record_internal(), I moved the conname =
text_to_cstring(PG_GETARG_TEXT_PP(0)) call a little bit, because it does
not apply in all code paths, so it could be a problem if you try to read
a text argument that the function is not actually passing in.

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services