diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-07-04 09:26:19 +0200 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-07-13 10:41:40 +0200 |
commit | 3804e89bd0e94fb412d3eecb2113cc97e0f7310b (patch) | |
tree | 39ec8a13fa0c559eee23a58b0a7c6c0220213e96 /src/backend | |
parent | 39035a52894a419ae1b905adfdb0bad72ee19a36 (diff) | |
download | postgresql-3804e89bd0e94fb412d3eecb2113cc97e0f7310b.tar.gz postgresql-3804e89bd0e94fb412d3eecb2113cc97e0f7310b.zip |
Prohibit transaction commands in security definer procedures
Starting and aborting transactions in security definer procedures
doesn't work. StartTransaction() insists that the security context
stack is empty, so this would currently cause a crash, and
AbortTransaction() resets it. This could be made to work by
reorganizing the code, but right now we just prohibit it.
Reported-by: amul sul <sulamul@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/CAAJ_b96Gupt_LFL7uNyy3c50-wbhA68NUjiK5%3DrF6_w%3Dpq_T%3DQ%40mail.gmail.com
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/commands/functioncmds.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 84daa19e064..68109bfda06 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -2246,6 +2246,15 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver callcontext->atomic = true; /* + * In security definer procedures, we can't allow transaction commands. + * StartTransaction() insists that the security context stack is empty, + * and AbortTransaction() resets the security context. This could be + * reorganized, but right now it doesn't work. + */ + if (((Form_pg_proc )GETSTRUCT(tp))->prosecdef) + callcontext->atomic = true; + + /* * Expand named arguments, defaults, etc. */ fexpr->args = expand_function_arguments(fexpr->args, fexpr->funcresulttype, tp); |