|
From: <ta...@us...> - 2015-03-19 18:58:37
|
Revision: 61025
http://sourceforge.net/p/firebird/code/61025
Author: tabloid
Date: 2015-03-19 18:58:34 +0000 (Thu, 19 Mar 2015)
Log Message:
-----------
See added / modified .fbt file(s)
Added Paths:
-----------
qa/fbt-repository/trunk/tests/bugs/core_3736.fbt
qa/fbt-repository/trunk/tests/functional/tabloid/batches/svn-get-local-updated.bat.txt
Added: qa/fbt-repository/trunk/tests/bugs/core_3736.fbt
===================================================================
--- qa/fbt-repository/trunk/tests/bugs/core_3736.fbt (rev 0)
+++ qa/fbt-repository/trunk/tests/bugs/core_3736.fbt 2015-03-19 18:58:34 UTC (rev 61025)
@@ -0,0 +1,148 @@
+{
+'id': 'bugs.core_3736',
+'qmid': '',
+'tracker_id': 'CORE-3736',
+'title': 'WITH LOCK clause is allowed for users with read-only rights on some table, thus blocking others from updating this table',
+'description': '',
+'versions': [
+{
+ 'firebird_version': '3.0',
+ 'platform': 'All',
+ 'test_type': 'ISQL',
+ 'init_script':
+ """
+ """,
+ 'test_script':
+ """
+ drop user tmp$c3736_ro; -- read-only access to the table
+ drop user tmp$c3736_ud; -- access for UPDATE and DELETE on the table
+ commit;
+
+ create user tmp$c3736_ro password 'tmp$c3736_ro';
+ create user tmp$c3736_ud password 'tmp$c3736_ud';
+ commit;
+
+ revoke all on all from tmp$c3736_ro;
+ revoke all on all from tmp$c3736_ud;
+ commit;
+
+ recreate table t_read_only_for_non_sys(id int);
+ commit;
+ insert into t_read_only_for_non_sys values(1);
+ insert into t_read_only_for_non_sys values(2);
+ insert into t_read_only_for_non_sys values(3);
+ insert into t_read_only_for_non_sys values(4);
+ insert into t_read_only_for_non_sys values(5);
+ commit;
+
+ grant select on t_read_only_for_non_sys to tmp$c3736_ro;
+ commit;
+ grant update,delete,select on t_read_only_for_non_sys to tmp$c3736_ud;
+ commit;
+
+ set transaction no wait;
+
+ update t_read_only_for_non_sys set id = id where id >= 4;
+
+ set term ^;
+ execute block returns( who_am_i type of column sec$users.sec$user_name, my_action varchar(20), what_i_see int )
+ as
+ declare v_dbname type of column mon$database.mon$database_name;
+ declare v_usr_ro type of column sec$users.sec$user_name = 'tmp$c3736_ro';
+ declare v_pwd_ro varchar(20) = 'tmp$c3736_ro';
+ declare v_connect varchar(255);
+ begin
+ select 'localhost:' || d.mon$database_name
+ from mon$database d
+ into v_dbname;
+
+ for
+ execute statement 'select current_user, ''select_read_only'', id from t_read_only_for_non_sys' -- for update with lock'
+ on external (v_dbname)
+ as user (v_usr_ro) password (v_pwd_ro)
+ into who_am_i, my_action, what_i_see
+ do
+ suspend;
+
+ for
+ execute statement 'select current_user, ''select_with_lock'', id from t_read_only_for_non_sys for update with lock'
+ on external (v_dbname)
+ as user (v_usr_ro) password (v_pwd_ro)
+ into who_am_i, my_action, what_i_see
+ do
+ suspend;
+
+
+ end
+ ^
+ set term ;^
+ rollback;
+
+ set transaction no wait;
+
+ update t_read_only_for_non_sys set id = id where id >= 4;
+
+ set term ^;
+ execute block returns( who_am_i type of column sec$users.sec$user_name, my_action varchar(20), what_i_see int )
+ as
+ declare v_dbname type of column mon$database.mon$database_name;
+ declare v_usr_ud type of column sec$users.sec$user_name = 'tmp$c3736_ud';
+ declare v_pwd_ud varchar(20) = 'tmp$c3736_ud';
+ declare v_connect varchar(255);
+ begin
+ select 'localhost:' || d.mon$database_name
+ from mon$database d
+ into v_dbname;
+
+ for
+ execute statement 'select current_user, ''select_with_lock'', id from t_read_only_for_non_sys for update with lock'
+ on external (v_dbname)
+ as user (v_usr_ud) password (v_pwd_ud)
+ into who_am_i, my_action, what_i_see
+ do
+ suspend;
+
+ end
+ ^
+ set term ;^
+ rollback;
+ """,
+ 'expected_stdout':
+ """
+ WHO_AM_I MY_ACTION WHAT_I_SEE
+ =============================== ==================== ============
+ TMP$C3736_RO select_read_only 1
+ TMP$C3736_RO select_read_only 2
+ TMP$C3736_RO select_read_only 3
+ TMP$C3736_RO select_read_only 4
+ TMP$C3736_RO select_read_only 5
+
+
+ WHO_AM_I MY_ACTION WHAT_I_SEE
+ =============================== ==================== ============
+ TMP$C3736_UD select_with_lock 1
+ TMP$C3736_UD select_with_lock 2
+ TMP$C3736_UD select_with_lock 3
+ """,
+ 'expected_stderr':
+ """
+ Execute statement error at isc_dsql_prepare :
+ 335544352 : no permission for UPDATE access to TABLE T_READ_ONLY_FOR_NON_SYS
+ Statement : select current_user, 'select_with_lock', id from t_read_only_for_non_sys for update with lock
+ Execute statement error at isc_dsql_fetch :
+ 335544878 : concurrent transaction number is 806
+ Statement : select current_user, 'select_with_lock', id from t_read_only_for_non_sys for update with lock
+ """,
+ 'substitutions': [
+ ('=.*',''),
+ ('Statement failed, SQLSTATE.*',''),
+ ('record not found for user:.*',''),
+ ('unknown ISC error.*', ''),
+ ('Warning: ALL on ALL is not granted to.*', ''),
+ ('Data source.*',''),
+ ('TABLE T_READ_ONLY_FOR_NON_SYS',''),
+ ('concurrent transaction number is.*','')
+ ]
+}
+]
+}
Property changes on: qa/fbt-repository/trunk/tests/bugs/core_3736.fbt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: qa/fbt-repository/trunk/tests/functional/tabloid/batches/svn-get-local-updated.bat.txt
===================================================================
--- qa/fbt-repository/trunk/tests/functional/tabloid/batches/svn-get-local-updated.bat.txt (rev 0)
+++ qa/fbt-repository/trunk/tests/functional/tabloid/batches/svn-get-local-updated.bat.txt 2015-03-19 18:58:34 UTC (rev 61025)
@@ -0,0 +1 @@
+svn st | findstr /r /v /b /c:"?"
\ No newline at end of file
Property changes on: qa/fbt-repository/trunk/tests/functional/tabloid/batches/svn-get-local-updated.bat.txt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|