Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contrib/seg/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ PGFILEDESC = "seg - line segment data type"

HEADERS = segdata.h

REGRESS = seg
REGRESS = security seg

EXTRA_CLEAN = y.tab.c y.tab.h

Expand Down
32 changes: 32 additions & 0 deletions contrib/seg/expected/security.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
--
-- Test extension script protection against search path overriding
--
CREATE ROLE regress_seg_role;
SELECT current_database() AS datname \gset
GRANT CREATE ON DATABASE :"datname" TO regress_seg_role;
SET ROLE regress_seg_role;
CREATE SCHEMA regress_seg_schema;
CREATE FUNCTION regress_seg_schema.exfun(i int) RETURNS int AS $$
BEGIN
CREATE EXTENSION seg VERSION '1.2';

CREATE FUNCTION regress_seg_schema.compare(oid, regclass) RETURNS boolean AS
'BEGIN RAISE EXCEPTION ''overloaded compare() called by %'', current_user; END;' LANGUAGE plpgsql;

CREATE OPERATOR = (LEFTARG = oid, RIGHTARG = regclass, PROCEDURE = regress_seg_schema.compare);

ALTER EXTENSION seg UPDATE TO '1.3';

RETURN i;
END; $$ LANGUAGE plpgsql;
CREATE SCHEMA test_schema
CREATE TABLE t(i int) PARTITION BY RANGE (i)
CREATE TABLE p1 PARTITION OF t FOR VALUES FROM (1) TO (regress_seg_schema.exfun(2));
DROP SCHEMA test_schema CASCADE;
NOTICE: drop cascades to 3 other objects
DETAIL: drop cascades to table test_schema.t
drop cascades to extension seg
drop cascades to operator test_schema.=(oid,regclass)
RESET ROLE;
DROP OWNED BY regress_seg_role;
DROP ROLE regress_seg_role;
32 changes: 32 additions & 0 deletions contrib/seg/sql/security.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
--
-- Test extension script protection against search path overriding
--

CREATE ROLE regress_seg_role;
SELECT current_database() AS datname \gset
GRANT CREATE ON DATABASE :"datname" TO regress_seg_role;
SET ROLE regress_seg_role;
CREATE SCHEMA regress_seg_schema;

CREATE FUNCTION regress_seg_schema.exfun(i int) RETURNS int AS $$
BEGIN
CREATE EXTENSION seg VERSION '1.2';

CREATE FUNCTION regress_seg_schema.compare(oid, regclass) RETURNS boolean AS
'BEGIN RAISE EXCEPTION ''overloaded compare() called by %'', current_user; END;' LANGUAGE plpgsql;

CREATE OPERATOR = (LEFTARG = oid, RIGHTARG = regclass, PROCEDURE = regress_seg_schema.compare);

ALTER EXTENSION seg UPDATE TO '1.3';

RETURN i;
END; $$ LANGUAGE plpgsql;

CREATE SCHEMA test_schema
CREATE TABLE t(i int) PARTITION BY RANGE (i)
CREATE TABLE p1 PARTITION OF t FOR VALUES FROM (1) TO (regress_seg_schema.exfun(2));

DROP SCHEMA test_schema CASCADE;
RESET ROLE;
DROP OWNED BY regress_seg_role;
DROP ROLE regress_seg_role;
20 changes: 20 additions & 0 deletions src/test/regress/sql/namespace.sql
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,26 @@ COMMIT;
SHOW search_path;
DROP SCHEMA test_ns_schema_2 CASCADE;

-- verify that the correct search_path restored on abort
SET search_path to public;
BEGIN;
SET search_path to public, test_ns_schema_1;
CREATE SCHEMA test_ns_schema_2
CREATE VIEW abc_view AS SELECT c FROM abc;
COMMIT;
SHOW search_path;

-- verify that the correct search_path preserved
-- after creating the schema and on commit
BEGIN;
SET search_path to public, test_ns_schema_1;
CREATE SCHEMA test_ns_schema_2
CREATE VIEW abc_view AS SELECT a FROM abc;
SHOW search_path;
COMMIT;
SHOW search_path;
DROP SCHEMA test_ns_schema_2 CASCADE;

-- verify that the objects were created
SELECT COUNT(*) FROM pg_class WHERE relnamespace =
(SELECT oid FROM pg_namespace WHERE nspname = 'test_ns_schema_1');
Expand Down
Loading