Re: My first patch! (to \df output) - Mailing list pgsql-hackers

From Jon Erdman
Subject Re: My first patch! (to \df output)
Date
Msg-id A937B7DE-82BE-4177-8536-485E6729BD9D@thewickedtribe.net
Whole thread Raw
In response to Re: My first patch! (to \df output)  (Jon Erdman <postgresql@thewickedtribe.net>)
Responses Re: My first patch! (to \df output)
Re: My first patch! (to \df output)
List pgsql-hackers
Oops! Here it is in the proper diff format. I didn't have my env set up correctly :(



--
Jon T Erdman
Postgresql Zealot


On Nov 9, 2012, at 1:53 PM, Jon Erdman <postgresql@thewickedtribe.net> wrote:

> On Oct 27, 2012, at 10:45 AM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
>
>> Hello
>>
>> 2012/10/27 Jon Erdman <postgresql@thewickedtribe.net>:
>>>
>>> Hello Hackers!
>>>
>>> So, currently the only way to see if a function is security definer or not is to directly query pg_proc. This is
bothirritating, and I think perhaps dangerous since security definer functions can be  so powerful. I thought that
rectifyingthat would make an excellent first patch, and I was bored today here in Prague since pgconf.eu is now
over...sohere it is. :) 
>>>
>>> This patch adds a column to the output of \df titled "Security" with values of "definer" or "invoker" based on the
booleansecdef column from pg_proc. I've also included a small doc patch to match. This patch is against master from
git.Comments welcome! 
>>>
>>> I just realized I didn't address regression tests, so I guess this is not actually complete yet. I should have time
forthat next week after I get back to the states. 
>>>
>>> I would also like to start discussion about perhaps adding a couple more things to \df+, specifically function
executionpermissions (which are also exposed nowhere outside the catalog to my knowledge), and maybe search_path since
that'srelated to secdef. Thoughts? 
>>
>> I prefer show this in \dt+ for column "Security" - and for other
>> functionality maybe new statement.
>
> I'm assuming you meant "\df+", and I've changed it accordingly. With this change there is now nothing to change in
theregression tests, so please consider this my formal and complete submission. <describe.patch> 
>
> Is there anything else I need to do to get this considered?
>
> Oh, in case anyone is interested, here's what the query now looks like and the new output:
>
> jerdman=# \df+ public.akeys
> ********* QUERY **********
> SELECT n.nspname as "Schema",
>  p.proname as "Name",
>  pg_catalog.pg_get_function_result(p.oid) as "Result data type",
>  pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
> CASE
>  WHEN p.proisagg THEN 'agg'
>  WHEN p.proiswindow THEN 'window'
>  WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
>  ELSE 'normal'
> END as "Type",
> CASE
>  WHEN prosecdef THEN 'definer'
>  ELSE 'invoker'
> END AS "Security",
> CASE
>  WHEN p.provolatile = 'i' THEN 'immutable'
>  WHEN p.provolatile = 's' THEN 'stable'
>  WHEN p.provolatile = 'v' THEN 'volatile'
> END as "Volatility",
>  pg_catalog.pg_get_userbyid(p.proowner) as "Owner",
>  l.lanname as "Language",
>  p.prosrc as "Source code",
>  pg_catalog.obj_description(p.oid, 'pg_proc') as "Description"
> FROM pg_catalog.pg_proc p
>     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
>     LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang
> WHERE p.proname ~ '^(akeys)$'
>  AND n.nspname ~ '^(public)$'
> ORDER BY 1, 2, 4;
> **************************
>
>                                                             List of functions
> Schema | Name  | Result data type | Argument data types |  Type  | Security | Volatility |  Owner  | Language |
Sourcecode  | Description  
>
--------+-------+------------------+---------------------+--------+----------+------------+---------+----------+--------------+-------------
> public | akeys | text[]           | hstore              | normal | invoker  | immutable  | jerdman | c        |
hstore_akeys|  
> (1 row)
>
> --
> Jon T Erdman
> Postgresql Zealot
>
>


Attachment

pgsql-hackers by date:

Previous
From: Jon Erdman
Date:
Subject: Re: My first patch! (to \df output)
Next
From: Tom Lane
Date:
Subject: Re: TRUNCATE SERIALIZABLE and frozen COPY