blob: 90c548c0ce7f431a422cd4a31c0c14c32e1b8c53 [file] [log] [blame]
drh2d458342003-04-05 03:42:26 +00001# 2003 April 4
drh1962bda2003-01-12 19:33:52 +00002#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
6# May you do good and not evil.
7# May you find forgiveness for yourself and forgive others.
8# May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library. The
drh2d458342003-04-05 03:42:26 +000012# focus of this script is testing the ATTACH and DETACH commands
13# and related functionality.
drh1962bda2003-01-12 19:33:52 +000014#
danielk1977a21c6b62005-01-24 10:25:59 +000015# $Id: auth.test,v 1.26 2005/01/24 10:26:00 danielk1977 Exp $
drh1962bda2003-01-12 19:33:52 +000016#
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20
drhe22a3342003-04-22 20:30:37 +000021# disable this test if the SQLITE_OMIT_AUTHORIZATION macro is
22# defined during compilation.
drh1211de32004-07-26 12:24:22 +000023if {[catch {db auth {}} msg]} {
24 finish_test
25 return
26}
drh1962bda2003-01-12 19:33:52 +000027
danielk1977a21c6b62005-01-24 10:25:59 +000028rename proc proc_real
29proc_real proc {name arguments script} {
30 proc_real $name $arguments $script
31 if {$name=="auth"} {
32 db authorizer ::auth
33 }
34}
35
drhdcd997e2003-01-31 17:21:49 +000036do_test auth-1.1.1 {
drh1962bda2003-01-12 19:33:52 +000037 db close
drhef4ac8f2004-06-19 00:16:31 +000038 set ::DB [sqlite3 db test.db]
drhe22a3342003-04-22 20:30:37 +000039 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000040 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000041 return SQLITE_DENY
42 }
43 return SQLITE_OK
44 }
drhe22a3342003-04-22 20:30:37 +000045 db authorizer ::auth
drh1962bda2003-01-12 19:33:52 +000046 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000047} {1 {not authorized}}
drhdcd997e2003-01-31 17:21:49 +000048do_test auth-1.1.2 {
49 db errorcode
50} {23}
drh0f14e2e2004-06-29 12:39:08 +000051do_test auth-1.1.3 {
52 db authorizer
53} {::auth}
drh56891232004-09-09 13:55:50 +000054do_test auth-1.1.4 {
55 # Ticket #896.
56 catchsql {
57 SELECT x;
58 }
59} {1 {no such column: x}}
drh1962bda2003-01-12 19:33:52 +000060do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000061 execsql {SELECT name FROM sqlite_master}
62} {}
drh77ad4e42003-01-14 02:49:27 +000063do_test auth-1.3.1 {
drhe22a3342003-04-22 20:30:37 +000064 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000065 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000066 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000067 return SQLITE_DENY
68 }
69 return SQLITE_OK
70 }
71 catchsql {CREATE TABLE t1(a,b,c)}
72} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000073do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000074 db errorcode
75} {23}
76do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000077 set ::authargs
drhe22a3342003-04-22 20:30:37 +000078} {t1 {} main {}}
drhe5f9c642003-01-13 23:27:31 +000079do_test auth-1.4 {
80 execsql {SELECT name FROM sqlite_master}
81} {}
82
83do_test auth-1.5 {
drhe22a3342003-04-22 20:30:37 +000084 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000085 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +000086 return SQLITE_DENY
87 }
88 return SQLITE_OK
89 }
90 catchsql {CREATE TEMP TABLE t1(a,b,c)}
91} {1 {not authorized}}
92do_test auth-1.6 {
93 execsql {SELECT name FROM sqlite_temp_master}
94} {}
drh77ad4e42003-01-14 02:49:27 +000095do_test auth-1.7.1 {
drhe22a3342003-04-22 20:30:37 +000096 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000097 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000098 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000099 return SQLITE_DENY
100 }
101 return SQLITE_OK
102 }
103 catchsql {CREATE TEMP TABLE t1(a,b,c)}
104} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +0000105do_test auth-1.7.2 {
106 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000107} {t1 {} temp {}}
drhe5f9c642003-01-13 23:27:31 +0000108do_test auth-1.8 {
109 execsql {SELECT name FROM sqlite_temp_master}
110} {}
111
112do_test auth-1.9 {
drhe22a3342003-04-22 20:30:37 +0000113 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000114 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +0000115 return SQLITE_IGNORE
116 }
117 return SQLITE_OK
118 }
119 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +0000120} {0 {}}
121do_test auth-1.10 {
122 execsql {SELECT name FROM sqlite_master}
123} {}
124do_test auth-1.11 {
drhe22a3342003-04-22 20:30:37 +0000125 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000126 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000127 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000128 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000129 }
130 return SQLITE_OK
131 }
132 catchsql {CREATE TABLE t1(a,b,c)}
133} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000134do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000135 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000136} {}
137do_test auth-1.13 {
drhe22a3342003-04-22 20:30:37 +0000138 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000139 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +0000140 return SQLITE_IGNORE
141 }
142 return SQLITE_OK
143 }
144 catchsql {CREATE TEMP TABLE t1(a,b,c)}
145} {0 {}}
146do_test auth-1.14 {
147 execsql {SELECT name FROM sqlite_temp_master}
148} {}
149do_test auth-1.15 {
drhe22a3342003-04-22 20:30:37 +0000150 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000151 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000152 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000153 return SQLITE_IGNORE
154 }
155 return SQLITE_OK
156 }
157 catchsql {CREATE TEMP TABLE t1(a,b,c)}
158} {0 {}}
159do_test auth-1.16 {
160 execsql {SELECT name FROM sqlite_temp_master}
161} {}
162
163do_test auth-1.17 {
drhe22a3342003-04-22 20:30:37 +0000164 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000165 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000166 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000167 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000168 }
169 return SQLITE_OK
170 }
171 catchsql {CREATE TEMP TABLE t1(a,b,c)}
172} {0 {}}
173do_test auth-1.18 {
174 execsql {SELECT name FROM sqlite_temp_master}
175} {t1}
drh77ad4e42003-01-14 02:49:27 +0000176do_test auth-1.19.1 {
177 set ::authargs {}
drhe22a3342003-04-22 20:30:37 +0000178 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000179 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000180 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000181 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000182 }
183 return SQLITE_OK
184 }
185 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000186} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000187do_test auth-1.19.2 {
188 set ::authargs
189} {}
drh1962bda2003-01-12 19:33:52 +0000190do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000191 execsql {SELECT name FROM sqlite_master}
192} {t2}
drh1962bda2003-01-12 19:33:52 +0000193
drh77ad4e42003-01-14 02:49:27 +0000194do_test auth-1.21.1 {
drhe22a3342003-04-22 20:30:37 +0000195 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000196 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000197 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000198 return SQLITE_DENY
199 }
200 return SQLITE_OK
201 }
202 catchsql {DROP TABLE t2}
203} {1 {not authorized}}
204do_test auth-1.21.2 {
205 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000206} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000207do_test auth-1.22 {
208 execsql {SELECT name FROM sqlite_master}
209} {t2}
210do_test auth-1.23.1 {
drhe22a3342003-04-22 20:30:37 +0000211 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000212 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000213 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000214 return SQLITE_IGNORE
215 }
216 return SQLITE_OK
217 }
218 catchsql {DROP TABLE t2}
219} {0 {}}
220do_test auth-1.23.2 {
221 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000222} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000223do_test auth-1.24 {
224 execsql {SELECT name FROM sqlite_master}
225} {t2}
drhe5f9c642003-01-13 23:27:31 +0000226
drh77ad4e42003-01-14 02:49:27 +0000227do_test auth-1.25 {
drhe22a3342003-04-22 20:30:37 +0000228 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000229 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000230 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000231 return SQLITE_DENY
232 }
233 return SQLITE_OK
234 }
235 catchsql {DROP TABLE t1}
236} {1 {not authorized}}
237do_test auth-1.26 {
238 execsql {SELECT name FROM sqlite_temp_master}
239} {t1}
240do_test auth-1.27 {
drhe22a3342003-04-22 20:30:37 +0000241 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000242 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000243 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000244 return SQLITE_IGNORE
245 }
246 return SQLITE_OK
247 }
248 catchsql {DROP TABLE t1}
249} {0 {}}
250do_test auth-1.28 {
251 execsql {SELECT name FROM sqlite_temp_master}
252} {t1}
253
254do_test auth-1.29 {
drhe22a3342003-04-22 20:30:37 +0000255 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000256 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
257 return SQLITE_DENY
258 }
259 return SQLITE_OK
260 }
261 catchsql {INSERT INTO t2 VALUES(1,2,3)}
262} {1 {not authorized}}
263do_test auth-1.30 {
264 execsql {SELECT * FROM t2}
265} {}
266do_test auth-1.31 {
drhe22a3342003-04-22 20:30:37 +0000267 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000268 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
269 return SQLITE_IGNORE
270 }
271 return SQLITE_OK
272 }
273 catchsql {INSERT INTO t2 VALUES(1,2,3)}
274} {0 {}}
275do_test auth-1.32 {
276 execsql {SELECT * FROM t2}
277} {}
278do_test auth-1.33 {
drhe22a3342003-04-22 20:30:37 +0000279 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000280 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
281 return SQLITE_IGNORE
282 }
283 return SQLITE_OK
284 }
285 catchsql {INSERT INTO t2 VALUES(1,2,3)}
286} {0 {}}
287do_test auth-1.34 {
288 execsql {SELECT * FROM t2}
289} {1 2 3}
290
drh4925ca02003-11-27 00:48:57 +0000291do_test auth-1.35.1 {
drhe22a3342003-04-22 20:30:37 +0000292 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000293 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
294 return SQLITE_DENY
295 }
296 return SQLITE_OK
297 }
298 catchsql {SELECT * FROM t2}
299} {1 {access to t2.b is prohibited}}
drh4925ca02003-11-27 00:48:57 +0000300do_test auth-1.35.2 {
301 execsql {ATTACH DATABASE 'test.db' AS two}
302 catchsql {SELECT * FROM two.t2}
303} {1 {access to two.t2.b is prohibited}}
304execsql {DETACH DATABASE two}
drh77ad4e42003-01-14 02:49:27 +0000305do_test auth-1.36 {
drhe22a3342003-04-22 20:30:37 +0000306 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000307 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
308 return SQLITE_IGNORE
309 }
310 return SQLITE_OK
311 }
312 catchsql {SELECT * FROM t2}
313} {0 {1 {} 3}}
314do_test auth-1.37 {
drhe22a3342003-04-22 20:30:37 +0000315 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000316 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
317 return SQLITE_IGNORE
318 }
319 return SQLITE_OK
320 }
321 catchsql {SELECT * FROM t2 WHERE b=2}
322} {0 {}}
323do_test auth-1.38 {
drhe22a3342003-04-22 20:30:37 +0000324 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000325 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
326 return SQLITE_IGNORE
327 }
328 return SQLITE_OK
329 }
330 catchsql {SELECT * FROM t2 WHERE b=2}
331} {0 {{} 2 3}}
332do_test auth-1.39 {
drhe22a3342003-04-22 20:30:37 +0000333 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000334 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
335 return SQLITE_IGNORE
336 }
337 return SQLITE_OK
338 }
339 catchsql {SELECT * FROM t2 WHERE b IS NULL}
340} {0 {1 {} 3}}
341do_test auth-1.40 {
drhe22a3342003-04-22 20:30:37 +0000342 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000343 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
344 return SQLITE_DENY
345 }
346 return SQLITE_OK
347 }
348 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
349} {1 {access to t2.b is prohibited}}
350
351do_test auth-1.41 {
drhe22a3342003-04-22 20:30:37 +0000352 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000353 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
354 return SQLITE_DENY
355 }
356 return SQLITE_OK
357 }
358 catchsql {UPDATE t2 SET a=11}
359} {0 {}}
360do_test auth-1.42 {
361 execsql {SELECT * FROM t2}
362} {11 2 3}
363do_test auth-1.43 {
drhe22a3342003-04-22 20:30:37 +0000364 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000365 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
366 return SQLITE_DENY
367 }
368 return SQLITE_OK
369 }
370 catchsql {UPDATE t2 SET b=22, c=33}
371} {1 {not authorized}}
372do_test auth-1.44 {
373 execsql {SELECT * FROM t2}
374} {11 2 3}
375do_test auth-1.45 {
drhe22a3342003-04-22 20:30:37 +0000376 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000377 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
378 return SQLITE_IGNORE
379 }
380 return SQLITE_OK
381 }
382 catchsql {UPDATE t2 SET b=22, c=33}
383} {0 {}}
384do_test auth-1.46 {
385 execsql {SELECT * FROM t2}
386} {11 2 33}
387
388do_test auth-1.47 {
drhe22a3342003-04-22 20:30:37 +0000389 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000390 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
391 return SQLITE_DENY
392 }
393 return SQLITE_OK
394 }
395 catchsql {DELETE FROM t2 WHERE a=11}
396} {1 {not authorized}}
397do_test auth-1.48 {
398 execsql {SELECT * FROM t2}
399} {11 2 33}
400do_test auth-1.49 {
drhe22a3342003-04-22 20:30:37 +0000401 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000402 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
403 return SQLITE_IGNORE
404 }
405 return SQLITE_OK
406 }
407 catchsql {DELETE FROM t2 WHERE a=11}
408} {0 {}}
409do_test auth-1.50 {
410 execsql {SELECT * FROM t2}
411} {11 2 33}
412
413do_test auth-1.51 {
drhe22a3342003-04-22 20:30:37 +0000414 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000415 if {$code=="SQLITE_SELECT"} {
416 return SQLITE_DENY
417 }
418 return SQLITE_OK
419 }
420 catchsql {SELECT * FROM t2}
421} {1 {not authorized}}
422do_test auth-1.52 {
drhe22a3342003-04-22 20:30:37 +0000423 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000424 if {$code=="SQLITE_SELECT"} {
425 return SQLITE_IGNORE
426 }
427 return SQLITE_OK
428 }
429 catchsql {SELECT * FROM t2}
430} {0 {}}
431do_test auth-1.53 {
drhe22a3342003-04-22 20:30:37 +0000432 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000433 if {$code=="SQLITE_SELECT"} {
434 return SQLITE_OK
435 }
436 return SQLITE_OK
437 }
438 catchsql {SELECT * FROM t2}
439} {0 {11 2 33}}
440
danielk19772ac79702004-06-14 11:54:18 +0000441# Update for version 3: There used to be a handful of test here that
442# tested the authorisation callback with the COPY command. The following
443# test makes the same database modifications as they used to.
444do_test auth-1.54 {
445 execsql {INSERT INTO t2 VALUES(7, 8, 9);}
446} {}
447do_test auth-1.55 {
448 execsql {SELECT * FROM t2}
449} {11 2 33 7 8 9}
drh77ad4e42003-01-14 02:49:27 +0000450
451do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000452 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000453 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
454 return SQLITE_DENY
455 }
456 return SQLITE_OK
457 }
458 catchsql {DROP TABLE t2}
459} {1 {not authorized}}
460do_test auth-1.64 {
461 execsql {SELECT name FROM sqlite_master}
462} {t2}
463do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000464 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000465 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
466 return SQLITE_DENY
467 }
468 return SQLITE_OK
469 }
470 catchsql {DROP TABLE t2}
471} {1 {not authorized}}
472do_test auth-1.66 {
473 execsql {SELECT name FROM sqlite_master}
474} {t2}
475do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000476 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000477 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
478 return SQLITE_DENY
479 }
480 return SQLITE_OK
481 }
482 catchsql {DROP TABLE t1}
483} {1 {not authorized}}
484do_test auth-1.68 {
485 execsql {SELECT name FROM sqlite_temp_master}
486} {t1}
487do_test auth-1.69 {
drhe22a3342003-04-22 20:30:37 +0000488 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000489 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
490 return SQLITE_DENY
491 }
492 return SQLITE_OK
493 }
494 catchsql {DROP TABLE t1}
495} {1 {not authorized}}
496do_test auth-1.70 {
497 execsql {SELECT name FROM sqlite_temp_master}
498} {t1}
499
500do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000501 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000502 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
503 return SQLITE_IGNORE
504 }
505 return SQLITE_OK
506 }
507 catchsql {DROP TABLE t2}
508} {0 {}}
509do_test auth-1.72 {
510 execsql {SELECT name FROM sqlite_master}
511} {t2}
512do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000513 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000514 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
515 return SQLITE_IGNORE
516 }
517 return SQLITE_OK
518 }
519 catchsql {DROP TABLE t2}
520} {0 {}}
521do_test auth-1.74 {
522 execsql {SELECT name FROM sqlite_master}
523} {t2}
524do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000525 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000526 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
527 return SQLITE_IGNORE
528 }
529 return SQLITE_OK
530 }
531 catchsql {DROP TABLE t1}
532} {0 {}}
533do_test auth-1.76 {
534 execsql {SELECT name FROM sqlite_temp_master}
535} {t1}
536do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000537 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000538 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
539 return SQLITE_IGNORE
540 }
541 return SQLITE_OK
542 }
543 catchsql {DROP TABLE t1}
544} {0 {}}
545do_test auth-1.78 {
546 execsql {SELECT name FROM sqlite_temp_master}
547} {t1}
548
danielk197781650dc2004-11-22 11:51:13 +0000549# Test cases auth-1.79 to auth-1.124 test creating and dropping views.
danielk19770fa8ddb2004-11-22 08:43:32 +0000550# Omit these if the library was compiled with views omitted.
551ifcapable view {
drh77ad4e42003-01-14 02:49:27 +0000552do_test auth-1.79 {
drhe22a3342003-04-22 20:30:37 +0000553 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000554 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000555 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000556 return SQLITE_DENY
557 }
558 return SQLITE_OK
559 }
560 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
561} {1 {not authorized}}
562do_test auth-1.80 {
563 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000564} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000565do_test auth-1.81 {
566 execsql {SELECT name FROM sqlite_master}
567} {t2}
568do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000569 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000570 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000571 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000572 return SQLITE_IGNORE
573 }
574 return SQLITE_OK
575 }
576 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
577} {0 {}}
578do_test auth-1.83 {
579 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000580} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000581do_test auth-1.84 {
582 execsql {SELECT name FROM sqlite_master}
583} {t2}
584
585do_test auth-1.85 {
drhe22a3342003-04-22 20:30:37 +0000586 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000587 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000588 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000589 return SQLITE_DENY
590 }
591 return SQLITE_OK
592 }
593 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
594} {1 {not authorized}}
595do_test auth-1.86 {
596 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000597} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000598do_test auth-1.87 {
599 execsql {SELECT name FROM sqlite_temp_master}
600} {t1}
601do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000602 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000603 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000604 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000605 return SQLITE_IGNORE
606 }
607 return SQLITE_OK
608 }
609 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
610} {0 {}}
611do_test auth-1.89 {
612 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000613} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000614do_test auth-1.90 {
615 execsql {SELECT name FROM sqlite_temp_master}
616} {t1}
617
618do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000619 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000620 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
621 return SQLITE_DENY
622 }
623 return SQLITE_OK
624 }
625 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
626} {1 {not authorized}}
627do_test auth-1.92 {
628 execsql {SELECT name FROM sqlite_master}
629} {t2}
630do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000631 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000632 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
633 return SQLITE_IGNORE
634 }
635 return SQLITE_OK
636 }
637 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
638} {0 {}}
639do_test auth-1.94 {
640 execsql {SELECT name FROM sqlite_master}
641} {t2}
642
643do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000644 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000645 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
646 return SQLITE_DENY
647 }
648 return SQLITE_OK
649 }
650 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
651} {1 {not authorized}}
652do_test auth-1.96 {
653 execsql {SELECT name FROM sqlite_temp_master}
654} {t1}
655do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000656 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000657 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
658 return SQLITE_IGNORE
659 }
660 return SQLITE_OK
661 }
662 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
663} {0 {}}
664do_test auth-1.98 {
665 execsql {SELECT name FROM sqlite_temp_master}
666} {t1}
667
668do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000669 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000670 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
671 return SQLITE_DENY
672 }
673 return SQLITE_OK
674 }
675 catchsql {
676 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
677 DROP VIEW v2
678 }
679} {1 {not authorized}}
680do_test auth-1.100 {
681 execsql {SELECT name FROM sqlite_master}
682} {t2 v2}
683do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000684 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000685 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000686 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000687 return SQLITE_DENY
688 }
689 return SQLITE_OK
690 }
691 catchsql {DROP VIEW v2}
692} {1 {not authorized}}
693do_test auth-1.102 {
694 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000695} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000696do_test auth-1.103 {
697 execsql {SELECT name FROM sqlite_master}
698} {t2 v2}
699do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000700 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000701 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
702 return SQLITE_IGNORE
703 }
704 return SQLITE_OK
705 }
706 catchsql {DROP VIEW v2}
707} {0 {}}
708do_test auth-1.105 {
709 execsql {SELECT name FROM sqlite_master}
710} {t2 v2}
711do_test auth-1.106 {
drhe22a3342003-04-22 20:30:37 +0000712 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000713 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000714 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000715 return SQLITE_IGNORE
716 }
717 return SQLITE_OK
718 }
719 catchsql {DROP VIEW v2}
720} {0 {}}
721do_test auth-1.107 {
722 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000723} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000724do_test auth-1.108 {
725 execsql {SELECT name FROM sqlite_master}
726} {t2 v2}
727do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000728 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000729 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000730 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000731 return SQLITE_OK
732 }
733 return SQLITE_OK
734 }
735 catchsql {DROP VIEW v2}
736} {0 {}}
737do_test auth-1.110 {
738 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000739} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000740do_test auth-1.111 {
741 execsql {SELECT name FROM sqlite_master}
742} {t2}
743
744
745do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000746 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000747 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
748 return SQLITE_DENY
749 }
750 return SQLITE_OK
751 }
752 catchsql {
753 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
754 DROP VIEW v1
755 }
756} {1 {not authorized}}
757do_test auth-1.113 {
758 execsql {SELECT name FROM sqlite_temp_master}
759} {t1 v1}
760do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000761 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000762 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000763 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000764 return SQLITE_DENY
765 }
766 return SQLITE_OK
767 }
768 catchsql {DROP VIEW v1}
769} {1 {not authorized}}
770do_test auth-1.115 {
771 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000772} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000773do_test auth-1.116 {
774 execsql {SELECT name FROM sqlite_temp_master}
775} {t1 v1}
776do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000777 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000778 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
779 return SQLITE_IGNORE
780 }
781 return SQLITE_OK
782 }
783 catchsql {DROP VIEW v1}
784} {0 {}}
785do_test auth-1.118 {
786 execsql {SELECT name FROM sqlite_temp_master}
787} {t1 v1}
788do_test auth-1.119 {
drhe22a3342003-04-22 20:30:37 +0000789 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000790 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000791 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000792 return SQLITE_IGNORE
793 }
794 return SQLITE_OK
795 }
796 catchsql {DROP VIEW v1}
797} {0 {}}
798do_test auth-1.120 {
799 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000800} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000801do_test auth-1.121 {
802 execsql {SELECT name FROM sqlite_temp_master}
803} {t1 v1}
804do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000805 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000806 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000807 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000808 return SQLITE_OK
809 }
810 return SQLITE_OK
811 }
812 catchsql {DROP VIEW v1}
813} {0 {}}
814do_test auth-1.123 {
815 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000816} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000817do_test auth-1.124 {
818 execsql {SELECT name FROM sqlite_temp_master}
819} {t1}
danielk19770fa8ddb2004-11-22 08:43:32 +0000820} ;# ifcapable view
drh77ad4e42003-01-14 02:49:27 +0000821
danielk197781650dc2004-11-22 11:51:13 +0000822# Test cases auth-1.125 to auth-1.176 test creating and dropping triggers.
823# Omit these if the library was compiled with triggers omitted.
824#
825ifcapable trigger {
drh77ad4e42003-01-14 02:49:27 +0000826do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000827 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000828 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000829 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000830 return SQLITE_DENY
831 }
832 return SQLITE_OK
833 }
834 catchsql {
835 CREATE TRIGGER r2 DELETE on t2 BEGIN
836 SELECT NULL;
837 END;
838 }
839} {1 {not authorized}}
840do_test auth-1.126 {
841 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000842} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000843do_test auth-1.127 {
844 execsql {SELECT name FROM sqlite_master}
845} {t2}
846do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000847 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000848 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
849 return SQLITE_DENY
850 }
851 return SQLITE_OK
852 }
853 catchsql {
854 CREATE TRIGGER r2 DELETE on t2 BEGIN
855 SELECT NULL;
856 END;
857 }
858} {1 {not authorized}}
859do_test auth-1.129 {
860 execsql {SELECT name FROM sqlite_master}
861} {t2}
862do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000863 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000864 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000865 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000866 return SQLITE_IGNORE
867 }
868 return SQLITE_OK
869 }
870 catchsql {
871 CREATE TRIGGER r2 DELETE on t2 BEGIN
872 SELECT NULL;
873 END;
874 }
875} {0 {}}
876do_test auth-1.131 {
877 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000878} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000879do_test auth-1.132 {
880 execsql {SELECT name FROM sqlite_master}
881} {t2}
882do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000883 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000884 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
885 return SQLITE_IGNORE
886 }
887 return SQLITE_OK
888 }
889 catchsql {
890 CREATE TRIGGER r2 DELETE on t2 BEGIN
891 SELECT NULL;
892 END;
893 }
894} {0 {}}
895do_test auth-1.134 {
896 execsql {SELECT name FROM sqlite_master}
897} {t2}
898do_test auth-1.135 {
drhe22a3342003-04-22 20:30:37 +0000899 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000900 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000901 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000902 return SQLITE_OK
903 }
904 return SQLITE_OK
905 }
906 catchsql {
drhe22a3342003-04-22 20:30:37 +0000907 CREATE TABLE tx(id);
908 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
909 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000910 END;
911 }
912} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000913do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000914 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000915} {r2 t2 main {}}
916do_test auth-1.136.2 {
917 execsql {
918 SELECT name FROM sqlite_master WHERE type='trigger'
919 }
920} {r2}
921do_test auth-1.136.3 {
922 proc auth {code arg1 arg2 arg3 arg4} {
923 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
924 return SQLITE_OK
925 }
926 set ::authargs {}
927 execsql {
928 INSERT INTO t2 VALUES(1,2,3);
929 }
930 set ::authargs
931} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
932do_test auth-1.136.4 {
933 execsql {
934 SELECT * FROM tx;
935 }
936} {3}
drh77ad4e42003-01-14 02:49:27 +0000937do_test auth-1.137 {
938 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000939} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000940do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000941 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000942 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000943 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000944 return SQLITE_DENY
945 }
946 return SQLITE_OK
947 }
948 catchsql {
949 CREATE TRIGGER r1 DELETE on t1 BEGIN
950 SELECT NULL;
951 END;
952 }
953} {1 {not authorized}}
954do_test auth-1.139 {
955 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000956} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000957do_test auth-1.140 {
958 execsql {SELECT name FROM sqlite_temp_master}
959} {t1}
960do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000961 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000962 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
963 return SQLITE_DENY
964 }
965 return SQLITE_OK
966 }
967 catchsql {
968 CREATE TRIGGER r1 DELETE on t1 BEGIN
969 SELECT NULL;
970 END;
971 }
972} {1 {not authorized}}
973do_test auth-1.142 {
974 execsql {SELECT name FROM sqlite_temp_master}
975} {t1}
976do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000977 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000978 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000979 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000980 return SQLITE_IGNORE
981 }
982 return SQLITE_OK
983 }
984 catchsql {
985 CREATE TRIGGER r1 DELETE on t1 BEGIN
986 SELECT NULL;
987 END;
988 }
989} {0 {}}
990do_test auth-1.144 {
991 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000992} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000993do_test auth-1.145 {
994 execsql {SELECT name FROM sqlite_temp_master}
995} {t1}
996do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +0000997 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000998 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
999 return SQLITE_IGNORE
1000 }
1001 return SQLITE_OK
1002 }
1003 catchsql {
1004 CREATE TRIGGER r1 DELETE on t1 BEGIN
1005 SELECT NULL;
1006 END;
1007 }
1008} {0 {}}
1009do_test auth-1.147 {
1010 execsql {SELECT name FROM sqlite_temp_master}
1011} {t1}
1012do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +00001013 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001014 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001015 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001016 return SQLITE_OK
1017 }
1018 return SQLITE_OK
1019 }
1020 catchsql {
1021 CREATE TRIGGER r1 DELETE on t1 BEGIN
1022 SELECT NULL;
1023 END;
1024 }
1025} {0 {}}
1026do_test auth-1.149 {
1027 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001028} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001029do_test auth-1.150 {
1030 execsql {SELECT name FROM sqlite_temp_master}
1031} {t1 r1}
1032
1033do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001034 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001035 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1036 return SQLITE_DENY
1037 }
1038 return SQLITE_OK
1039 }
1040 catchsql {DROP TRIGGER r2}
1041} {1 {not authorized}}
1042do_test auth-1.152 {
1043 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001044} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001045do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001046 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001047 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001048 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001049 return SQLITE_DENY
1050 }
1051 return SQLITE_OK
1052 }
1053 catchsql {DROP TRIGGER r2}
1054} {1 {not authorized}}
1055do_test auth-1.154 {
1056 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001057} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001058do_test auth-1.155 {
1059 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001060} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001061do_test auth-1.156 {
drhe22a3342003-04-22 20:30:37 +00001062 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001063 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1064 return SQLITE_IGNORE
1065 }
1066 return SQLITE_OK
1067 }
1068 catchsql {DROP TRIGGER r2}
1069} {0 {}}
1070do_test auth-1.157 {
1071 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001072} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001073do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001074 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001075 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001076 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001077 return SQLITE_IGNORE
1078 }
1079 return SQLITE_OK
1080 }
1081 catchsql {DROP TRIGGER r2}
1082} {0 {}}
1083do_test auth-1.159 {
1084 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001085} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001086do_test auth-1.160 {
1087 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001088} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001089do_test auth-1.161 {
drhe22a3342003-04-22 20:30:37 +00001090 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001091 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001092 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001093 return SQLITE_OK
1094 }
1095 return SQLITE_OK
1096 }
1097 catchsql {DROP TRIGGER r2}
1098} {0 {}}
1099do_test auth-1.162 {
1100 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001101} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001102do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001103 execsql {
1104 DROP TABLE tx;
1105 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1106 SELECT name FROM sqlite_master;
1107 }
drh77ad4e42003-01-14 02:49:27 +00001108} {t2}
1109
1110do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001111 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001112 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1113 return SQLITE_DENY
1114 }
1115 return SQLITE_OK
1116 }
1117 catchsql {DROP TRIGGER r1}
1118} {1 {not authorized}}
1119do_test auth-1.165 {
1120 execsql {SELECT name FROM sqlite_temp_master}
1121} {t1 r1}
1122do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001123 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001124 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001125 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001126 return SQLITE_DENY
1127 }
1128 return SQLITE_OK
1129 }
1130 catchsql {DROP TRIGGER r1}
1131} {1 {not authorized}}
1132do_test auth-1.167 {
1133 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001134} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001135do_test auth-1.168 {
1136 execsql {SELECT name FROM sqlite_temp_master}
1137} {t1 r1}
1138do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001139 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001140 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1141 return SQLITE_IGNORE
1142 }
1143 return SQLITE_OK
1144 }
1145 catchsql {DROP TRIGGER r1}
1146} {0 {}}
1147do_test auth-1.170 {
1148 execsql {SELECT name FROM sqlite_temp_master}
1149} {t1 r1}
1150do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001151 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001152 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001153 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001154 return SQLITE_IGNORE
1155 }
1156 return SQLITE_OK
1157 }
1158 catchsql {DROP TRIGGER r1}
1159} {0 {}}
1160do_test auth-1.172 {
1161 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001162} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001163do_test auth-1.173 {
1164 execsql {SELECT name FROM sqlite_temp_master}
1165} {t1 r1}
1166do_test auth-1.174 {
drhe22a3342003-04-22 20:30:37 +00001167 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001168 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001169 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001170 return SQLITE_OK
1171 }
1172 return SQLITE_OK
1173 }
1174 catchsql {DROP TRIGGER r1}
1175} {0 {}}
1176do_test auth-1.175 {
1177 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001178} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001179do_test auth-1.176 {
1180 execsql {SELECT name FROM sqlite_temp_master}
1181} {t1}
danielk197781650dc2004-11-22 11:51:13 +00001182} ;# ifcapable trigger
drh77ad4e42003-01-14 02:49:27 +00001183
1184do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001185 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001186 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001187 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001188 return SQLITE_DENY
1189 }
1190 return SQLITE_OK
1191 }
1192 catchsql {CREATE INDEX i2 ON t2(a)}
1193} {1 {not authorized}}
1194do_test auth-1.178 {
1195 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001196} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001197do_test auth-1.179 {
1198 execsql {SELECT name FROM sqlite_master}
1199} {t2}
1200do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001201 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001202 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1203 return SQLITE_DENY
1204 }
1205 return SQLITE_OK
1206 }
1207 catchsql {CREATE INDEX i2 ON t2(a)}
1208} {1 {not authorized}}
1209do_test auth-1.181 {
1210 execsql {SELECT name FROM sqlite_master}
1211} {t2}
1212do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001213 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001214 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001215 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001216 return SQLITE_IGNORE
1217 }
1218 return SQLITE_OK
1219 }
1220 catchsql {CREATE INDEX i2 ON t2(b)}
1221} {0 {}}
1222do_test auth-1.183 {
1223 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001224} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001225do_test auth-1.184 {
1226 execsql {SELECT name FROM sqlite_master}
1227} {t2}
1228do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001229 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001230 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1231 return SQLITE_IGNORE
1232 }
1233 return SQLITE_OK
1234 }
1235 catchsql {CREATE INDEX i2 ON t2(b)}
1236} {0 {}}
1237do_test auth-1.186 {
1238 execsql {SELECT name FROM sqlite_master}
1239} {t2}
1240do_test auth-1.187 {
drhe22a3342003-04-22 20:30:37 +00001241 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001242 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001243 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001244 return SQLITE_OK
1245 }
1246 return SQLITE_OK
1247 }
1248 catchsql {CREATE INDEX i2 ON t2(a)}
1249} {0 {}}
1250do_test auth-1.188 {
1251 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001252} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001253do_test auth-1.189 {
1254 execsql {SELECT name FROM sqlite_master}
1255} {t2 i2}
1256
1257do_test auth-1.190 {
drhe22a3342003-04-22 20:30:37 +00001258 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001259 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001260 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001261 return SQLITE_DENY
1262 }
1263 return SQLITE_OK
1264 }
1265 catchsql {CREATE INDEX i1 ON t1(a)}
1266} {1 {not authorized}}
1267do_test auth-1.191 {
1268 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001269} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001270do_test auth-1.192 {
1271 execsql {SELECT name FROM sqlite_temp_master}
1272} {t1}
1273do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001274 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001275 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1276 return SQLITE_DENY
1277 }
1278 return SQLITE_OK
1279 }
1280 catchsql {CREATE INDEX i1 ON t1(b)}
1281} {1 {not authorized}}
1282do_test auth-1.194 {
1283 execsql {SELECT name FROM sqlite_temp_master}
1284} {t1}
1285do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001286 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001287 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001288 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001289 return SQLITE_IGNORE
1290 }
1291 return SQLITE_OK
1292 }
1293 catchsql {CREATE INDEX i1 ON t1(b)}
1294} {0 {}}
1295do_test auth-1.196 {
1296 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001297} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001298do_test auth-1.197 {
1299 execsql {SELECT name FROM sqlite_temp_master}
1300} {t1}
1301do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001302 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001303 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1304 return SQLITE_IGNORE
1305 }
1306 return SQLITE_OK
1307 }
1308 catchsql {CREATE INDEX i1 ON t1(c)}
1309} {0 {}}
1310do_test auth-1.199 {
1311 execsql {SELECT name FROM sqlite_temp_master}
1312} {t1}
1313do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001314 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001315 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001316 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001317 return SQLITE_OK
1318 }
1319 return SQLITE_OK
1320 }
1321 catchsql {CREATE INDEX i1 ON t1(a)}
1322} {0 {}}
1323do_test auth-1.201 {
1324 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001325} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001326do_test auth-1.202 {
1327 execsql {SELECT name FROM sqlite_temp_master}
1328} {t1 i1}
1329
1330do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001331 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001332 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1333 return SQLITE_DENY
1334 }
1335 return SQLITE_OK
1336 }
1337 catchsql {DROP INDEX i2}
1338} {1 {not authorized}}
1339do_test auth-1.204 {
1340 execsql {SELECT name FROM sqlite_master}
1341} {t2 i2}
1342do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001343 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001344 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001345 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001346 return SQLITE_DENY
1347 }
1348 return SQLITE_OK
1349 }
1350 catchsql {DROP INDEX i2}
1351} {1 {not authorized}}
1352do_test auth-1.206 {
1353 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001354} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001355do_test auth-1.207 {
1356 execsql {SELECT name FROM sqlite_master}
1357} {t2 i2}
1358do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001359 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001360 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1361 return SQLITE_IGNORE
1362 }
1363 return SQLITE_OK
1364 }
1365 catchsql {DROP INDEX i2}
1366} {0 {}}
1367do_test auth-1.209 {
1368 execsql {SELECT name FROM sqlite_master}
1369} {t2 i2}
1370do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001371 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001372 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001373 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001374 return SQLITE_IGNORE
1375 }
1376 return SQLITE_OK
1377 }
1378 catchsql {DROP INDEX i2}
1379} {0 {}}
1380do_test auth-1.211 {
1381 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001382} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001383do_test auth-1.212 {
1384 execsql {SELECT name FROM sqlite_master}
1385} {t2 i2}
1386do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001387 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001388 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001389 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001390 return SQLITE_OK
1391 }
1392 return SQLITE_OK
1393 }
1394 catchsql {DROP INDEX i2}
1395} {0 {}}
1396do_test auth-1.214 {
1397 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001398} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001399do_test auth-1.215 {
1400 execsql {SELECT name FROM sqlite_master}
1401} {t2}
1402
1403do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001404 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001405 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1406 return SQLITE_DENY
1407 }
1408 return SQLITE_OK
1409 }
1410 catchsql {DROP INDEX i1}
1411} {1 {not authorized}}
1412do_test auth-1.217 {
1413 execsql {SELECT name FROM sqlite_temp_master}
1414} {t1 i1}
1415do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001416 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001417 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001418 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001419 return SQLITE_DENY
1420 }
1421 return SQLITE_OK
1422 }
1423 catchsql {DROP INDEX i1}
1424} {1 {not authorized}}
1425do_test auth-1.219 {
1426 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001427} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001428do_test auth-1.220 {
1429 execsql {SELECT name FROM sqlite_temp_master}
1430} {t1 i1}
1431do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001432 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001433 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1434 return SQLITE_IGNORE
1435 }
1436 return SQLITE_OK
1437 }
1438 catchsql {DROP INDEX i1}
1439} {0 {}}
1440do_test auth-1.222 {
1441 execsql {SELECT name FROM sqlite_temp_master}
1442} {t1 i1}
1443do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001444 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001445 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001446 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001447 return SQLITE_IGNORE
1448 }
1449 return SQLITE_OK
1450 }
1451 catchsql {DROP INDEX i1}
1452} {0 {}}
1453do_test auth-1.224 {
1454 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001455} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001456do_test auth-1.225 {
1457 execsql {SELECT name FROM sqlite_temp_master}
1458} {t1 i1}
1459do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001460 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001461 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001462 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001463 return SQLITE_OK
1464 }
1465 return SQLITE_OK
1466 }
1467 catchsql {DROP INDEX i1}
1468} {0 {}}
1469do_test auth-1.227 {
1470 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001471} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001472do_test auth-1.228 {
1473 execsql {SELECT name FROM sqlite_temp_master}
1474} {t1}
1475
1476do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001477 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001478 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001479 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001480 return SQLITE_DENY
1481 }
1482 return SQLITE_OK
1483 }
1484 catchsql {PRAGMA full_column_names=on}
1485} {1 {not authorized}}
1486do_test auth-1.230 {
1487 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001488} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001489do_test auth-1.231 {
1490 execsql2 {SELECT a FROM t2}
1491} {a 11 a 7}
1492do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001493 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001494 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001495 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001496 return SQLITE_IGNORE
1497 }
1498 return SQLITE_OK
1499 }
1500 catchsql {PRAGMA full_column_names=on}
1501} {0 {}}
1502do_test auth-1.233 {
1503 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001504} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001505do_test auth-1.234 {
1506 execsql2 {SELECT a FROM t2}
1507} {a 11 a 7}
1508do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001509 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001510 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001511 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001512 return SQLITE_OK
1513 }
1514 return SQLITE_OK
1515 }
1516 catchsql {PRAGMA full_column_names=on}
1517} {0 {}}
1518do_test auth-1.236 {
1519 execsql2 {SELECT a FROM t2}
1520} {t2.a 11 t2.a 7}
1521do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001522 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001523 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001524 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001525 return SQLITE_OK
1526 }
1527 return SQLITE_OK
1528 }
1529 catchsql {PRAGMA full_column_names=OFF}
1530} {0 {}}
1531do_test auth-1.238 {
1532 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001533} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001534do_test auth-1.239 {
1535 execsql2 {SELECT a FROM t2}
1536} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001537
drh2c3831c2003-01-14 13:48:20 +00001538do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001539 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001540 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001541 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001542 return SQLITE_DENY
1543 }
1544 return SQLITE_OK
1545 }
1546 catchsql {BEGIN}
1547} {1 {not authorized}}
1548do_test auth-1.241 {
1549 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001550} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001551do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001552 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001553 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001554 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001555 return SQLITE_DENY
1556 }
1557 return SQLITE_OK
1558 }
1559 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1560} {1 {not authorized}}
1561do_test auth-1.243 {
1562 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001563} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001564do_test auth-1.244 {
1565 execsql {SELECT * FROM t2}
1566} {11 2 33 7 8 9 44 55 66}
1567do_test auth-1.245 {
1568 catchsql {ROLLBACK}
1569} {1 {not authorized}}
1570do_test auth-1.246 {
1571 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001572} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001573do_test auth-1.247 {
1574 catchsql {END TRANSACTION}
1575} {1 {not authorized}}
1576do_test auth-1.248 {
1577 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001578} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001579do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001580 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001581 catchsql {ROLLBACK}
1582} {0 {}}
1583do_test auth-1.250 {
1584 execsql {SELECT * FROM t2}
1585} {11 2 33 7 8 9}
1586
drh81e293b2003-06-06 19:00:42 +00001587# ticket #340 - authorization for ATTACH and DETACH.
1588#
1589do_test auth-1.251 {
1590 db authorizer ::auth
1591 proc auth {code arg1 arg2 arg3 arg4} {
1592 if {$code=="SQLITE_ATTACH"} {
1593 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1594 }
1595 return SQLITE_OK
1596 }
1597 catchsql {
1598 ATTACH DATABASE ':memory:' AS test1
1599 }
1600} {0 {}}
1601do_test auth-1.252 {
1602 set ::authargs
1603} {:memory: {} {} {}}
1604do_test auth-1.253 {
1605 catchsql {DETACH DATABASE test1}
1606 proc auth {code arg1 arg2 arg3 arg4} {
1607 if {$code=="SQLITE_ATTACH"} {
1608 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1609 return SQLITE_DENY
1610 }
1611 return SQLITE_OK
1612 }
1613 catchsql {
1614 ATTACH DATABASE ':memory:' AS test1;
1615 }
1616} {1 {not authorized}}
1617do_test auth-1.254 {
1618 lindex [execsql {PRAGMA database_list}] 7
1619} {}
1620do_test auth-1.255 {
1621 catchsql {DETACH DATABASE test1}
1622 proc auth {code arg1 arg2 arg3 arg4} {
1623 if {$code=="SQLITE_ATTACH"} {
1624 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1625 return SQLITE_IGNORE
1626 }
1627 return SQLITE_OK
1628 }
1629 catchsql {
1630 ATTACH DATABASE ':memory:' AS test1;
1631 }
1632} {0 {}}
1633do_test auth-1.256 {
1634 lindex [execsql {PRAGMA database_list}] 7
1635} {}
1636do_test auth-1.257 {
1637 proc auth {code arg1 arg2 arg3 arg4} {
1638 if {$code=="SQLITE_DETACH"} {
1639 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1640 return SQLITE_OK
1641 }
1642 return SQLITE_OK
1643 }
1644 execsql {ATTACH DATABASE ':memory:' AS test1}
1645 catchsql {
1646 DETACH DATABASE test1;
1647 }
1648} {0 {}}
1649do_test auth-1.258 {
1650 lindex [execsql {PRAGMA database_list}] 7
1651} {}
1652do_test auth-1.259 {
1653 execsql {ATTACH DATABASE ':memory:' AS test1}
1654 proc auth {code arg1 arg2 arg3 arg4} {
1655 if {$code=="SQLITE_DETACH"} {
1656 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1657 return SQLITE_IGNORE
1658 }
1659 return SQLITE_OK
1660 }
1661 catchsql {
1662 DETACH DATABASE test1;
1663 }
1664} {0 {}}
danielk197727188fb2004-11-23 10:13:03 +00001665ifcapable schema_pragmas {
drh81e293b2003-06-06 19:00:42 +00001666do_test auth-1.260 {
1667 lindex [execsql {PRAGMA database_list}] 7
1668} {test1}
danielk197727188fb2004-11-23 10:13:03 +00001669} ;# ifcapable schema_pragmas
drh81e293b2003-06-06 19:00:42 +00001670do_test auth-1.261 {
1671 proc auth {code arg1 arg2 arg3 arg4} {
1672 if {$code=="SQLITE_DETACH"} {
1673 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1674 return SQLITE_DENY
1675 }
1676 return SQLITE_OK
1677 }
1678 catchsql {
1679 DETACH DATABASE test1;
1680 }
1681} {1 {not authorized}}
danielk197727188fb2004-11-23 10:13:03 +00001682ifcapable schema_pragmas {
drh81e293b2003-06-06 19:00:42 +00001683do_test auth-1.262 {
1684 lindex [execsql {PRAGMA database_list}] 7
1685} {test1}
danielk197727188fb2004-11-23 10:13:03 +00001686} ;# ifcapable schema_pragmas
drh81e293b2003-06-06 19:00:42 +00001687db authorizer {}
1688execsql {DETACH DATABASE test1}
danielk19771c8c23c2004-11-12 15:53:37 +00001689db authorizer ::auth
1690
danielk1977215e64d2004-11-22 03:34:21 +00001691# Authorization for ALTER TABLE. These tests are omitted if the library
1692# was built without ALTER TABLE support.
1693ifcapable altertable {
1694
danielk19771c8c23c2004-11-12 15:53:37 +00001695do_test auth-1.263 {
1696 proc auth {code arg1 arg2 arg3 arg4} {
1697 if {$code=="SQLITE_ALTER_TABLE"} {
1698 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1699 return SQLITE_OK
1700 }
1701 return SQLITE_OK
1702 }
1703 catchsql {
1704 ALTER TABLE t1 RENAME TO t1x
1705 }
1706} {0 {}}
1707do_test auth-1.264 {
1708 execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
1709} {t1x}
1710do_test auth-1.265 {
1711 set authargs
1712} {temp t1 {} {}}
1713do_test auth-1.266 {
1714 proc auth {code arg1 arg2 arg3 arg4} {
1715 if {$code=="SQLITE_ALTER_TABLE"} {
1716 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1717 return SQLITE_IGNORE
1718 }
1719 return SQLITE_OK
1720 }
1721 catchsql {
1722 ALTER TABLE t1x RENAME TO t1
1723 }
1724} {0 {}}
1725do_test auth-1.267 {
1726 execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
1727} {t1x}
1728do_test auth-1.268 {
1729 set authargs
1730} {temp t1x {} {}}
1731do_test auth-1.269 {
1732 proc auth {code arg1 arg2 arg3 arg4} {
1733 if {$code=="SQLITE_ALTER_TABLE"} {
1734 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1735 return SQLITE_DENY
1736 }
1737 return SQLITE_OK
1738 }
1739 catchsql {
1740 ALTER TABLE t1x RENAME TO t1
1741 }
1742} {1 {not authorized}}
1743do_test auth-1.270 {
1744 execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
1745} {t1x}
1746do_test auth-1.271 {
1747 set authargs
1748} {temp t1x {} {}}
1749db authorizer {}
1750catchsql {ALTER TABLE t1x RENAME TO t1}
1751db authorizer ::auth
1752do_test auth-1.272 {
1753 proc auth {code arg1 arg2 arg3 arg4} {
1754 if {$code=="SQLITE_ALTER_TABLE"} {
1755 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1756 return SQLITE_OK
1757 }
1758 return SQLITE_OK
1759 }
1760 catchsql {
1761 ALTER TABLE t2 RENAME TO t2x
1762 }
1763} {0 {}}
1764do_test auth-1.273 {
1765 execsql {SELECT name FROM sqlite_master WHERE type='table'}
1766} {t2x}
1767do_test auth-1.274 {
1768 set authargs
1769} {main t2 {} {}}
1770do_test auth-1.275 {
1771 proc auth {code arg1 arg2 arg3 arg4} {
1772 if {$code=="SQLITE_ALTER_TABLE"} {
1773 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1774 return SQLITE_IGNORE
1775 }
1776 return SQLITE_OK
1777 }
1778 catchsql {
1779 ALTER TABLE t2x RENAME TO t2
1780 }
1781} {0 {}}
1782do_test auth-1.276 {
1783 execsql {SELECT name FROM sqlite_master WHERE type='table'}
1784} {t2x}
1785do_test auth-1.277 {
1786 set authargs
1787} {main t2x {} {}}
1788do_test auth-1.278 {
1789 proc auth {code arg1 arg2 arg3 arg4} {
1790 if {$code=="SQLITE_ALTER_TABLE"} {
1791 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1792 return SQLITE_DENY
1793 }
1794 return SQLITE_OK
1795 }
1796 catchsql {
1797 ALTER TABLE t2x RENAME TO t2
1798 }
1799} {1 {not authorized}}
1800do_test auth-1.279 {
1801 execsql {SELECT name FROM sqlite_master WHERE type='table'}
1802} {t2x}
1803do_test auth-1.280 {
1804 set authargs
1805} {main t2x {} {}}
1806db authorizer {}
1807catchsql {ALTER TABLE t2x RENAME TO t2}
drh81e293b2003-06-06 19:00:42 +00001808
danielk1977215e64d2004-11-22 03:34:21 +00001809} ;# ifcapable altertable
1810
danielk19771d54df82004-11-23 15:41:16 +00001811# Test the authorization callbacks for the REINDEX command.
1812ifcapable reindex {
1813
1814proc auth {code args} {
1815 if {$code=="SQLITE_REINDEX"} {
1816 set ::authargs [concat $::authargs $args]
1817 }
1818 return SQLITE_OK
1819}
1820db authorizer auth
1821do_test auth-1.281 {
1822 execsql {
1823 CREATE TABLE t3(a PRIMARY KEY, b, c);
1824 CREATE INDEX t3_idx1 ON t3(c COLLATE BINARY);
1825 CREATE INDEX t3_idx2 ON t3(b COLLATE NOCASE);
1826 }
1827} {}
1828do_test auth-1.282 {
1829 set ::authargs {}
1830 execsql {
1831 REINDEX t3_idx1;
1832 }
1833 set ::authargs
1834} {t3_idx1 {} main {}}
1835do_test auth-1.283 {
1836 set ::authargs {}
1837 execsql {
1838 REINDEX BINARY;
1839 }
1840 set ::authargs
1841} {t3_idx1 {} main {} sqlite_autoindex_t3_1 {} main {}}
1842do_test auth-1.284 {
1843 set ::authargs {}
1844 execsql {
1845 REINDEX NOCASE;
1846 }
1847 set ::authargs
1848} {t3_idx2 {} main {}}
1849do_test auth-1.285 {
1850 set ::authargs {}
1851 execsql {
1852 REINDEX t3;
1853 }
1854 set ::authargs
1855} {t3_idx2 {} main {} t3_idx1 {} main {} sqlite_autoindex_t3_1 {} main {}}
1856do_test auth-1.286 {
1857 execsql {
1858 DROP TABLE t3;
1859 }
1860} {}
1861do_test auth-1.287 {
1862 execsql {
1863 CREATE TEMP TABLE t3(a PRIMARY KEY, b, c);
1864 CREATE INDEX t3_idx1 ON t3(c COLLATE BINARY);
1865 CREATE INDEX t3_idx2 ON t3(b COLLATE NOCASE);
1866 }
1867} {}
1868do_test auth-1.288 {
1869 set ::authargs {}
1870 execsql {
1871 REINDEX temp.t3_idx1;
1872 }
1873 set ::authargs
1874} {t3_idx1 {} temp {}}
1875do_test auth-1.289 {
1876 set ::authargs {}
1877 execsql {
1878 REINDEX BINARY;
1879 }
1880 set ::authargs
1881} {t3_idx1 {} temp {} sqlite_autoindex_t3_1 {} temp {}}
1882do_test auth-1.290 {
1883 set ::authargs {}
1884 execsql {
1885 REINDEX NOCASE;
1886 }
1887 set ::authargs
1888} {t3_idx2 {} temp {}}
1889do_test auth-1.291 {
1890 set ::authargs {}
1891 execsql {
1892 REINDEX temp.t3;
1893 }
1894 set ::authargs
1895} {t3_idx2 {} temp {} t3_idx1 {} temp {} sqlite_autoindex_t3_1 {} temp {}}
1896proc auth {code args} {
1897 if {$code=="SQLITE_REINDEX"} {
1898 set ::authargs [concat $::authargs $args]
1899 return SQLITE_DENY
1900 }
1901 return SQLITE_OK
1902}
1903do_test auth-1.292 {
1904 set ::authargs {}
1905 catchsql {
1906 REINDEX temp.t3;
1907 }
1908} {1 {not authorized}}
1909do_test auth-1.293 {
1910 execsql {
1911 DROP TABLE t3;
1912 }
1913} {}
1914
1915} ;# ifcapable reindex
1916
drh81e293b2003-06-06 19:00:42 +00001917
drh2c3831c2003-01-14 13:48:20 +00001918do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001919 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001920 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1921 return SQLITE_DENY
1922 }
1923 return SQLITE_OK
1924 }
drhe22a3342003-04-22 20:30:37 +00001925 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001926 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1927 catchsql {SELECT * FROM t3}
1928} {1 {access to t3.x is prohibited}}
1929do_test auth-2.1 {
1930 catchsql {SELECT y,z FROM t3}
1931} {0 {}}
1932do_test auth-2.2 {
1933 catchsql {SELECT ROWID,y,z FROM t3}
1934} {1 {access to t3.x is prohibited}}
1935do_test auth-2.3 {
1936 catchsql {SELECT OID,y,z FROM t3}
1937} {1 {access to t3.x is prohibited}}
1938do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001939 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001940 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1941 return SQLITE_IGNORE
1942 }
1943 return SQLITE_OK
1944 }
1945 execsql {INSERT INTO t3 VALUES(44,55,66)}
1946 catchsql {SELECT * FROM t3}
1947} {0 {{} 55 66}}
1948do_test auth-2.5 {
1949 catchsql {SELECT rowid,y,z FROM t3}
1950} {0 {{} 55 66}}
1951do_test auth-2.6 {
drhe22a3342003-04-22 20:30:37 +00001952 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001953 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1954 return SQLITE_IGNORE
1955 }
1956 return SQLITE_OK
1957 }
1958 catchsql {SELECT * FROM t3}
1959} {0 {44 55 66}}
1960do_test auth-2.7 {
1961 catchsql {SELECT ROWID,y,z FROM t3}
1962} {0 {44 55 66}}
1963do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001964 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001965 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1966 return SQLITE_IGNORE
1967 }
1968 return SQLITE_OK
1969 }
1970 catchsql {SELECT ROWID,b,c FROM t2}
1971} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001972do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001973 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001974 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1975 return bogus
1976 }
1977 return SQLITE_OK
1978 }
1979 catchsql {SELECT ROWID,b,c FROM t2}
1980} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001981do_test auth-2.9.2 {
1982 db errorcode
drhc60d0442004-09-30 13:43:13 +00001983} {1}
drh2c3831c2003-01-14 13:48:20 +00001984do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001985 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001986 if {$code=="SQLITE_SELECT"} {
1987 return bogus
1988 }
1989 return SQLITE_OK
1990 }
1991 catchsql {SELECT ROWID,b,c FROM t2}
1992} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001993do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001994 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001995 if {$code=="SQLITE_READ" && $arg2=="a"} {
1996 return SQLITE_IGNORE
1997 }
1998 return SQLITE_OK
1999 }
2000 catchsql {SELECT * FROM t2, t3}
2001} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00002002do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00002003 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00002004 if {$code=="SQLITE_READ" && $arg2=="x"} {
2005 return SQLITE_IGNORE
2006 }
2007 return SQLITE_OK
2008 }
2009 catchsql {SELECT * FROM t2, t3}
2010} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00002011
drh027850b2003-04-16 20:24:52 +00002012# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
2013#
danielk197781650dc2004-11-22 11:51:13 +00002014ifcapable trigger {
drh027850b2003-04-16 20:24:52 +00002015do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00002016 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00002017 return SQLITE_OK
2018 }
2019 execsql {
2020 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
2021 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
2022 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
2023 END;
2024 UPDATE t2 SET a=a+1;
2025 SELECT * FROM tx;
2026 }
2027} {11 12 2 2 33 33 7 8 8 8 9 9}
2028do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00002029 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00002030 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
2031 return SQLITE_IGNORE
2032 }
2033 return SQLITE_OK
2034 }
2035 execsql {
2036 DELETE FROM tx;
2037 UPDATE t2 SET a=a+100;
2038 SELECT * FROM tx;
2039 }
2040} {12 112 2 2 {} {} 8 108 8 8 {} {}}
danielk197781650dc2004-11-22 11:51:13 +00002041} ;# ifcapable trigger
drh027850b2003-04-16 20:24:52 +00002042
drh85e20962003-04-25 17:52:11 +00002043# Make sure the names of views and triggers are passed on on arg4.
2044#
danielk197781650dc2004-11-22 11:51:13 +00002045ifcapable trigger {
drh85e20962003-04-25 17:52:11 +00002046do_test auth-4.1 {
2047 proc auth {code arg1 arg2 arg3 arg4} {
2048 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
2049 return SQLITE_OK
2050 }
2051 set authargs {}
2052 execsql {
2053 UPDATE t2 SET a=a+1;
2054 }
2055 set authargs
2056} [list \
2057 SQLITE_READ t2 a main {} \
2058 SQLITE_UPDATE t2 a main {} \
2059 SQLITE_INSERT tx {} main r1 \
2060 SQLITE_READ t2 a main r1 \
2061 SQLITE_READ t2 a main r1 \
2062 SQLITE_READ t2 b main r1 \
2063 SQLITE_READ t2 b main r1 \
2064 SQLITE_READ t2 c main r1 \
2065 SQLITE_READ t2 c main r1]
danielk197781650dc2004-11-22 11:51:13 +00002066}
danielk19770fa8ddb2004-11-22 08:43:32 +00002067
danielk197781650dc2004-11-22 11:51:13 +00002068ifcapable {view && trigger} {
drh85e20962003-04-25 17:52:11 +00002069do_test auth-4.2 {
2070 execsql {
2071 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
2072 CREATE TABLE v1chng(x1,x2);
2073 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
2074 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
2075 END;
2076 SELECT * FROM v1;
2077 }
2078} {115 117}
2079do_test auth-4.3 {
2080 set authargs {}
2081 execsql {
2082 UPDATE v1 SET x=1 WHERE x=117
2083 }
2084 set authargs
2085} [list \
2086 SQLITE_UPDATE v1 x main {} \
2087 SQLITE_READ v1 x main {} \
2088 SQLITE_SELECT {} {} {} v1 \
2089 SQLITE_READ t2 a main v1 \
2090 SQLITE_READ t2 b main v1 \
2091 SQLITE_INSERT v1chng {} main r2 \
2092 SQLITE_READ v1 x main r2 \
2093 SQLITE_READ v1 x main r2]
2094do_test auth-4.4 {
2095 execsql {
2096 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
2097 INSERT INTO v1chng VALUES(OLD.x,NULL);
2098 END;
2099 SELECT * FROM v1;
2100 }
2101} {115 117}
2102do_test auth-4.5 {
2103 set authargs {}
2104 execsql {
2105 DELETE FROM v1 WHERE x=117
2106 }
2107 set authargs
2108} [list \
2109 SQLITE_DELETE v1 {} main {} \
2110 SQLITE_READ v1 x main {} \
2111 SQLITE_SELECT {} {} {} v1 \
2112 SQLITE_READ t2 a main v1 \
2113 SQLITE_READ t2 b main v1 \
2114 SQLITE_INSERT v1chng {} main r3 \
2115 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00002116
danielk197781650dc2004-11-22 11:51:13 +00002117} ;# ifcapable view && trigger
danielk19770fa8ddb2004-11-22 08:43:32 +00002118
danielk1977a21c6b62005-01-24 10:25:59 +00002119rename proc {}
2120rename proc_real proc
2121
drh1962bda2003-01-12 19:33:52 +00002122finish_test