pgsql: Fix has_column_privilege function corner case - Mailing list pgsql-committers

From Joe Conway
Subject pgsql: Fix has_column_privilege function corner case
Date
Msg-id E1lRf4L-0002oT-7I@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix has_column_privilege function corner case

According to the comments, when an invalid or dropped column oid is passed
to has_column_privilege(), the intention has always been to return NULL.
However, when the caller had table level privilege the invalid/missing
column was never discovered, because table permissions were checked first.

Fix that by introducing extended versions of pg_attribute_acl(check|mask)
and pg_class_acl(check|mask) which take a new argument, is_missing. When
is_missing is NULL, the old behavior is preserved. But when is_missing is
passed by the caller, no ERROR is thrown for dropped or missing
columns/relations, and is_missing is flipped to true. This in turn allows
has_column_privilege to check for column privileges first, providing the
desired semantics.

Not backpatched since it is a user visible behavioral change with no previous
complaints, and the fix is a bit on the invasive side.

Author: Joe Conway
Reviewed-By: Tom Lane
Reported by: Ian Barwick
Discussion: https://postgr.es/m/flat/9b5f4311-157b-4164-7fe7-077b4fe8ed84%40joeconway.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/b12bd4869b5e64b742a69ca07915e2f77f85a9ae

Modified Files
--------------
src/backend/catalog/aclchk.c             | 116 +++++++++++++++++++++++++++----
src/backend/utils/adt/acl.c              |  48 ++++---------
src/include/utils/acl.h                  |  11 +++
src/test/regress/expected/privileges.out |  14 +++-
src/test/regress/sql/privileges.sql      |   2 +
5 files changed, 142 insertions(+), 49 deletions(-)


pgsql-committers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: pgsql: Extended statistics on expressions
Next
From: Alvaro Herrera
Date:
Subject: pgsql: Fix some libpq_pipeline test problems