mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Fix sepgsql regression tests (9.2-only patch).
The regression tests for sepgsql were broken by changes in the
base distro as-shipped policies. Specifically, definition of
unconfined_t in the system default policy was changed to bypass
multi-category rules, which the regression test depended on.
Fix that by defining a custom privileged domain
(sepgsql_regtest_superuser_t) and using it instead of system's
unconfined_t domain. The new sepgsql_regtest_superuser_t domain
performs almost like the current unconfined_t, but restricted by
multi-category policy as the traditional unconfined_t was.
The custom policy module is a self defined domain, and so should not
be affected by related future system policy changes. However, it still
uses the unconfined_u:unconfined_r pair for selinux-user and role.
Those definitions have not been changed for several years and seem
less risky to rely on than the unconfined_t domain. Additionally, if
we define custom user/role, they would need to be manually defined
at the operating system level, adding more complexity to an already
non-standard and complex regression test.
Applies only to 9.2. Unlike the previous similar patch, commit 794e2558b
,
this also fixes a bug related to processing SELECT INTO statement.
Because v9.2 didn't have ObjectAccessPostCreate to inform the context
when a relation is newly created, sepgsql had an alternative method.
However, related code in sepgsql_object_access() neglected to consider
T_CreateTableAsStmt, thus no label was assigned on the new relation.
This logic was removed and replaced starting in 9.3.
Patch by Kohei KaiGai.
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
--
|
||||
|
||||
-- confirm required permissions using audit messages
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0
|
||||
SET sepgsql.debug_audit = true;
|
||||
SET client_min_messages = LOG;
|
||||
|
||||
|
@ -110,7 +110,7 @@ COPY t5 (e) FROM '/dev/null'; -- ok
|
||||
--
|
||||
-- Clean up
|
||||
--
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c255
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255
|
||||
DROP TABLE IF EXISTS t1 CASCADE;
|
||||
DROP TABLE IF EXISTS t2 CASCADE;
|
||||
DROP TABLE IF EXISTS t3 CASCADE;
|
||||
|
@ -104,27 +104,27 @@ SELECT sepgsql_getcon(); -- client's label must be restored
|
||||
--
|
||||
|
||||
-- validation of transaction aware dynamic-transition
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0:c0.c25
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c15');
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c25
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c15');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
SELECT sepgsql_setcon(NULL); -- failed to reset
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
BEGIN;
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c12');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c12');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
SAVEPOINT svpt_1;
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c9');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c9');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
SAVEPOINT svpt_2;
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
SAVEPOINT svpt_3;
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c3');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c3');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
ROLLBACK TO SAVEPOINT svpt_2;
|
||||
@ -137,16 +137,16 @@ ABORT;
|
||||
SELECT sepgsql_getcon(); -- should be 's0:c0.c15'
|
||||
|
||||
BEGIN;
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c8');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c8');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
SAVEPOINT svpt_1;
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c4');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c4');
|
||||
SELECT sepgsql_getcon();
|
||||
|
||||
ROLLBACK TO SAVEPOINT svpt_1;
|
||||
SELECT sepgsql_getcon(); -- should be 's0:c0.c8'
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0:c0.c6');
|
||||
SELECT sepgsql_setcon('unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0:c0.c6');
|
||||
|
||||
COMMIT;
|
||||
SELECT sepgsql_getcon(); -- should be 's0:c0.c6'
|
||||
@ -225,7 +225,7 @@ SELECT sepgsql_getcon();
|
||||
--
|
||||
-- Clean up
|
||||
--
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c255
|
||||
-- @SECURITY-CONTEXT=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0-s0:c0.c255
|
||||
DROP TABLE IF EXISTS t1 CASCADE;
|
||||
DROP TABLE IF EXISTS t2 CASCADE;
|
||||
DROP TABLE IF EXISTS t3 CASCADE;
|
||||
|
Reference in New Issue
Block a user