blob: 5f0bfebdde45d270b44561e7c2be38ad7d3906ae [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#
drh0f14e2e2004-06-29 12:39:08 +000015# $Id: auth.test,v 1.16 2004/06/29 12:39:08 drh 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.
drh1962bda2003-01-12 19:33:52 +000023
drhdcd997e2003-01-31 17:21:49 +000024do_test auth-1.1.1 {
drh1962bda2003-01-12 19:33:52 +000025 db close
drhef4ac8f2004-06-19 00:16:31 +000026 set ::DB [sqlite3 db test.db]
drhe22a3342003-04-22 20:30:37 +000027 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000028 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000029 return SQLITE_DENY
30 }
31 return SQLITE_OK
32 }
drhe22a3342003-04-22 20:30:37 +000033 db authorizer ::auth
drh1962bda2003-01-12 19:33:52 +000034 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000035} {1 {not authorized}}
drhdcd997e2003-01-31 17:21:49 +000036do_test auth-1.1.2 {
37 db errorcode
38} {23}
drh0f14e2e2004-06-29 12:39:08 +000039do_test auth-1.1.3 {
40 db authorizer
41} {::auth}
drh1962bda2003-01-12 19:33:52 +000042do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000043 execsql {SELECT name FROM sqlite_master}
44} {}
drh77ad4e42003-01-14 02:49:27 +000045do_test auth-1.3.1 {
drhe22a3342003-04-22 20:30:37 +000046 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000047 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000048 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000049 return SQLITE_DENY
50 }
51 return SQLITE_OK
52 }
53 catchsql {CREATE TABLE t1(a,b,c)}
54} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000055do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000056 db errorcode
57} {23}
58do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000059 set ::authargs
drhe22a3342003-04-22 20:30:37 +000060} {t1 {} main {}}
drhe5f9c642003-01-13 23:27:31 +000061do_test auth-1.4 {
62 execsql {SELECT name FROM sqlite_master}
63} {}
64
65do_test auth-1.5 {
drhe22a3342003-04-22 20:30:37 +000066 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000067 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +000068 return SQLITE_DENY
69 }
70 return SQLITE_OK
71 }
72 catchsql {CREATE TEMP TABLE t1(a,b,c)}
73} {1 {not authorized}}
74do_test auth-1.6 {
75 execsql {SELECT name FROM sqlite_temp_master}
76} {}
drh77ad4e42003-01-14 02:49:27 +000077do_test auth-1.7.1 {
drhe22a3342003-04-22 20:30:37 +000078 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000079 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000080 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000081 return SQLITE_DENY
82 }
83 return SQLITE_OK
84 }
85 catchsql {CREATE TEMP TABLE t1(a,b,c)}
86} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000087do_test auth-1.7.2 {
88 set ::authargs
drhe22a3342003-04-22 20:30:37 +000089} {t1 {} temp {}}
drhe5f9c642003-01-13 23:27:31 +000090do_test auth-1.8 {
91 execsql {SELECT name FROM sqlite_temp_master}
92} {}
93
94do_test auth-1.9 {
drhe22a3342003-04-22 20:30:37 +000095 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000096 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000097 return SQLITE_IGNORE
98 }
99 return SQLITE_OK
100 }
101 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +0000102} {0 {}}
103do_test auth-1.10 {
104 execsql {SELECT name FROM sqlite_master}
105} {}
106do_test auth-1.11 {
drhe22a3342003-04-22 20:30:37 +0000107 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000108 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000109 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000110 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000111 }
112 return SQLITE_OK
113 }
114 catchsql {CREATE TABLE t1(a,b,c)}
115} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000116do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000117 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000118} {}
119do_test auth-1.13 {
drhe22a3342003-04-22 20:30:37 +0000120 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000121 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +0000122 return SQLITE_IGNORE
123 }
124 return SQLITE_OK
125 }
126 catchsql {CREATE TEMP TABLE t1(a,b,c)}
127} {0 {}}
128do_test auth-1.14 {
129 execsql {SELECT name FROM sqlite_temp_master}
130} {}
131do_test auth-1.15 {
drhe22a3342003-04-22 20:30:37 +0000132 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000133 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000134 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000135 return SQLITE_IGNORE
136 }
137 return SQLITE_OK
138 }
139 catchsql {CREATE TEMP TABLE t1(a,b,c)}
140} {0 {}}
141do_test auth-1.16 {
142 execsql {SELECT name FROM sqlite_temp_master}
143} {}
144
145do_test auth-1.17 {
drhe22a3342003-04-22 20:30:37 +0000146 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000147 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000148 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000149 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000150 }
151 return SQLITE_OK
152 }
153 catchsql {CREATE TEMP TABLE t1(a,b,c)}
154} {0 {}}
155do_test auth-1.18 {
156 execsql {SELECT name FROM sqlite_temp_master}
157} {t1}
drh77ad4e42003-01-14 02:49:27 +0000158do_test auth-1.19.1 {
159 set ::authargs {}
drhe22a3342003-04-22 20:30:37 +0000160 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000161 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000162 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000163 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000164 }
165 return SQLITE_OK
166 }
167 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000168} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000169do_test auth-1.19.2 {
170 set ::authargs
171} {}
drh1962bda2003-01-12 19:33:52 +0000172do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000173 execsql {SELECT name FROM sqlite_master}
174} {t2}
drh1962bda2003-01-12 19:33:52 +0000175
drh77ad4e42003-01-14 02:49:27 +0000176do_test auth-1.21.1 {
drhe22a3342003-04-22 20:30:37 +0000177 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000178 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000179 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000180 return SQLITE_DENY
181 }
182 return SQLITE_OK
183 }
184 catchsql {DROP TABLE t2}
185} {1 {not authorized}}
186do_test auth-1.21.2 {
187 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000188} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000189do_test auth-1.22 {
190 execsql {SELECT name FROM sqlite_master}
191} {t2}
192do_test auth-1.23.1 {
drhe22a3342003-04-22 20:30:37 +0000193 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000194 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000195 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000196 return SQLITE_IGNORE
197 }
198 return SQLITE_OK
199 }
200 catchsql {DROP TABLE t2}
201} {0 {}}
202do_test auth-1.23.2 {
203 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000204} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000205do_test auth-1.24 {
206 execsql {SELECT name FROM sqlite_master}
207} {t2}
drhe5f9c642003-01-13 23:27:31 +0000208
drh77ad4e42003-01-14 02:49:27 +0000209do_test auth-1.25 {
drhe22a3342003-04-22 20:30:37 +0000210 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000211 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000212 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000213 return SQLITE_DENY
214 }
215 return SQLITE_OK
216 }
217 catchsql {DROP TABLE t1}
218} {1 {not authorized}}
219do_test auth-1.26 {
220 execsql {SELECT name FROM sqlite_temp_master}
221} {t1}
222do_test auth-1.27 {
drhe22a3342003-04-22 20:30:37 +0000223 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000224 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000225 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000226 return SQLITE_IGNORE
227 }
228 return SQLITE_OK
229 }
230 catchsql {DROP TABLE t1}
231} {0 {}}
232do_test auth-1.28 {
233 execsql {SELECT name FROM sqlite_temp_master}
234} {t1}
235
236do_test auth-1.29 {
drhe22a3342003-04-22 20:30:37 +0000237 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000238 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
239 return SQLITE_DENY
240 }
241 return SQLITE_OK
242 }
243 catchsql {INSERT INTO t2 VALUES(1,2,3)}
244} {1 {not authorized}}
245do_test auth-1.30 {
246 execsql {SELECT * FROM t2}
247} {}
248do_test auth-1.31 {
drhe22a3342003-04-22 20:30:37 +0000249 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000250 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
251 return SQLITE_IGNORE
252 }
253 return SQLITE_OK
254 }
255 catchsql {INSERT INTO t2 VALUES(1,2,3)}
256} {0 {}}
257do_test auth-1.32 {
258 execsql {SELECT * FROM t2}
259} {}
260do_test auth-1.33 {
drhe22a3342003-04-22 20:30:37 +0000261 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000262 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
263 return SQLITE_IGNORE
264 }
265 return SQLITE_OK
266 }
267 catchsql {INSERT INTO t2 VALUES(1,2,3)}
268} {0 {}}
269do_test auth-1.34 {
270 execsql {SELECT * FROM t2}
271} {1 2 3}
272
drh4925ca02003-11-27 00:48:57 +0000273do_test auth-1.35.1 {
drhe22a3342003-04-22 20:30:37 +0000274 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000275 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
276 return SQLITE_DENY
277 }
278 return SQLITE_OK
279 }
280 catchsql {SELECT * FROM t2}
281} {1 {access to t2.b is prohibited}}
drh4925ca02003-11-27 00:48:57 +0000282do_test auth-1.35.2 {
283 execsql {ATTACH DATABASE 'test.db' AS two}
284 catchsql {SELECT * FROM two.t2}
285} {1 {access to two.t2.b is prohibited}}
286execsql {DETACH DATABASE two}
drh77ad4e42003-01-14 02:49:27 +0000287do_test auth-1.36 {
drhe22a3342003-04-22 20:30:37 +0000288 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000289 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
290 return SQLITE_IGNORE
291 }
292 return SQLITE_OK
293 }
294 catchsql {SELECT * FROM t2}
295} {0 {1 {} 3}}
296do_test auth-1.37 {
drhe22a3342003-04-22 20:30:37 +0000297 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000298 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
299 return SQLITE_IGNORE
300 }
301 return SQLITE_OK
302 }
303 catchsql {SELECT * FROM t2 WHERE b=2}
304} {0 {}}
305do_test auth-1.38 {
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=="a"} {
308 return SQLITE_IGNORE
309 }
310 return SQLITE_OK
311 }
312 catchsql {SELECT * FROM t2 WHERE b=2}
313} {0 {{} 2 3}}
314do_test auth-1.39 {
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 IS NULL}
322} {0 {1 {} 3}}
323do_test auth-1.40 {
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=="b"} {
326 return SQLITE_DENY
327 }
328 return SQLITE_OK
329 }
330 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
331} {1 {access to t2.b is prohibited}}
332
333do_test auth-1.41 {
drhe22a3342003-04-22 20:30:37 +0000334 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000335 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
336 return SQLITE_DENY
337 }
338 return SQLITE_OK
339 }
340 catchsql {UPDATE t2 SET a=11}
341} {0 {}}
342do_test auth-1.42 {
343 execsql {SELECT * FROM t2}
344} {11 2 3}
345do_test auth-1.43 {
drhe22a3342003-04-22 20:30:37 +0000346 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000347 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
348 return SQLITE_DENY
349 }
350 return SQLITE_OK
351 }
352 catchsql {UPDATE t2 SET b=22, c=33}
353} {1 {not authorized}}
354do_test auth-1.44 {
355 execsql {SELECT * FROM t2}
356} {11 2 3}
357do_test auth-1.45 {
drhe22a3342003-04-22 20:30:37 +0000358 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000359 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
360 return SQLITE_IGNORE
361 }
362 return SQLITE_OK
363 }
364 catchsql {UPDATE t2 SET b=22, c=33}
365} {0 {}}
366do_test auth-1.46 {
367 execsql {SELECT * FROM t2}
368} {11 2 33}
369
370do_test auth-1.47 {
drhe22a3342003-04-22 20:30:37 +0000371 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000372 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
373 return SQLITE_DENY
374 }
375 return SQLITE_OK
376 }
377 catchsql {DELETE FROM t2 WHERE a=11}
378} {1 {not authorized}}
379do_test auth-1.48 {
380 execsql {SELECT * FROM t2}
381} {11 2 33}
382do_test auth-1.49 {
drhe22a3342003-04-22 20:30:37 +0000383 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000384 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
385 return SQLITE_IGNORE
386 }
387 return SQLITE_OK
388 }
389 catchsql {DELETE FROM t2 WHERE a=11}
390} {0 {}}
391do_test auth-1.50 {
392 execsql {SELECT * FROM t2}
393} {11 2 33}
394
395do_test auth-1.51 {
drhe22a3342003-04-22 20:30:37 +0000396 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000397 if {$code=="SQLITE_SELECT"} {
398 return SQLITE_DENY
399 }
400 return SQLITE_OK
401 }
402 catchsql {SELECT * FROM t2}
403} {1 {not authorized}}
404do_test auth-1.52 {
drhe22a3342003-04-22 20:30:37 +0000405 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000406 if {$code=="SQLITE_SELECT"} {
407 return SQLITE_IGNORE
408 }
409 return SQLITE_OK
410 }
411 catchsql {SELECT * FROM t2}
412} {0 {}}
413do_test auth-1.53 {
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_OK
417 }
418 return SQLITE_OK
419 }
420 catchsql {SELECT * FROM t2}
421} {0 {11 2 33}}
422
danielk19772ac79702004-06-14 11:54:18 +0000423# Update for version 3: There used to be a handful of test here that
424# tested the authorisation callback with the COPY command. The following
425# test makes the same database modifications as they used to.
426do_test auth-1.54 {
427 execsql {INSERT INTO t2 VALUES(7, 8, 9);}
428} {}
429do_test auth-1.55 {
430 execsql {SELECT * FROM t2}
431} {11 2 33 7 8 9}
drh77ad4e42003-01-14 02:49:27 +0000432
433do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000434 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000435 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
436 return SQLITE_DENY
437 }
438 return SQLITE_OK
439 }
440 catchsql {DROP TABLE t2}
441} {1 {not authorized}}
442do_test auth-1.64 {
443 execsql {SELECT name FROM sqlite_master}
444} {t2}
445do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000446 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000447 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
448 return SQLITE_DENY
449 }
450 return SQLITE_OK
451 }
452 catchsql {DROP TABLE t2}
453} {1 {not authorized}}
454do_test auth-1.66 {
455 execsql {SELECT name FROM sqlite_master}
456} {t2}
457do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000458 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000459 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
460 return SQLITE_DENY
461 }
462 return SQLITE_OK
463 }
464 catchsql {DROP TABLE t1}
465} {1 {not authorized}}
466do_test auth-1.68 {
467 execsql {SELECT name FROM sqlite_temp_master}
468} {t1}
469do_test auth-1.69 {
drhe22a3342003-04-22 20:30:37 +0000470 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000471 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
472 return SQLITE_DENY
473 }
474 return SQLITE_OK
475 }
476 catchsql {DROP TABLE t1}
477} {1 {not authorized}}
478do_test auth-1.70 {
479 execsql {SELECT name FROM sqlite_temp_master}
480} {t1}
481
482do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000483 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000484 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
485 return SQLITE_IGNORE
486 }
487 return SQLITE_OK
488 }
489 catchsql {DROP TABLE t2}
490} {0 {}}
491do_test auth-1.72 {
492 execsql {SELECT name FROM sqlite_master}
493} {t2}
494do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000495 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000496 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
497 return SQLITE_IGNORE
498 }
499 return SQLITE_OK
500 }
501 catchsql {DROP TABLE t2}
502} {0 {}}
503do_test auth-1.74 {
504 execsql {SELECT name FROM sqlite_master}
505} {t2}
506do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000507 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000508 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
509 return SQLITE_IGNORE
510 }
511 return SQLITE_OK
512 }
513 catchsql {DROP TABLE t1}
514} {0 {}}
515do_test auth-1.76 {
516 execsql {SELECT name FROM sqlite_temp_master}
517} {t1}
518do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000519 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000520 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
521 return SQLITE_IGNORE
522 }
523 return SQLITE_OK
524 }
525 catchsql {DROP TABLE t1}
526} {0 {}}
527do_test auth-1.78 {
528 execsql {SELECT name FROM sqlite_temp_master}
529} {t1}
530
531do_test auth-1.79 {
drhe22a3342003-04-22 20:30:37 +0000532 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000533 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000534 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000535 return SQLITE_DENY
536 }
537 return SQLITE_OK
538 }
539 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
540} {1 {not authorized}}
541do_test auth-1.80 {
542 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000543} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000544do_test auth-1.81 {
545 execsql {SELECT name FROM sqlite_master}
546} {t2}
547do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000548 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000549 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000550 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000551 return SQLITE_IGNORE
552 }
553 return SQLITE_OK
554 }
555 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
556} {0 {}}
557do_test auth-1.83 {
558 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000559} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000560do_test auth-1.84 {
561 execsql {SELECT name FROM sqlite_master}
562} {t2}
563
564do_test auth-1.85 {
drhe22a3342003-04-22 20:30:37 +0000565 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000566 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000567 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000568 return SQLITE_DENY
569 }
570 return SQLITE_OK
571 }
572 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
573} {1 {not authorized}}
574do_test auth-1.86 {
575 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000576} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000577do_test auth-1.87 {
578 execsql {SELECT name FROM sqlite_temp_master}
579} {t1}
580do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000581 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000582 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000583 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000584 return SQLITE_IGNORE
585 }
586 return SQLITE_OK
587 }
588 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
589} {0 {}}
590do_test auth-1.89 {
591 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000592} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000593do_test auth-1.90 {
594 execsql {SELECT name FROM sqlite_temp_master}
595} {t1}
596
597do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000598 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000599 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
600 return SQLITE_DENY
601 }
602 return SQLITE_OK
603 }
604 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
605} {1 {not authorized}}
606do_test auth-1.92 {
607 execsql {SELECT name FROM sqlite_master}
608} {t2}
609do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000610 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000611 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
612 return SQLITE_IGNORE
613 }
614 return SQLITE_OK
615 }
616 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
617} {0 {}}
618do_test auth-1.94 {
619 execsql {SELECT name FROM sqlite_master}
620} {t2}
621
622do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000623 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000624 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
625 return SQLITE_DENY
626 }
627 return SQLITE_OK
628 }
629 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
630} {1 {not authorized}}
631do_test auth-1.96 {
632 execsql {SELECT name FROM sqlite_temp_master}
633} {t1}
634do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000635 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000636 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
637 return SQLITE_IGNORE
638 }
639 return SQLITE_OK
640 }
641 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
642} {0 {}}
643do_test auth-1.98 {
644 execsql {SELECT name FROM sqlite_temp_master}
645} {t1}
646
647do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000648 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000649 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
650 return SQLITE_DENY
651 }
652 return SQLITE_OK
653 }
654 catchsql {
655 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
656 DROP VIEW v2
657 }
658} {1 {not authorized}}
659do_test auth-1.100 {
660 execsql {SELECT name FROM sqlite_master}
661} {t2 v2}
662do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000663 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000664 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000665 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000666 return SQLITE_DENY
667 }
668 return SQLITE_OK
669 }
670 catchsql {DROP VIEW v2}
671} {1 {not authorized}}
672do_test auth-1.102 {
673 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000674} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000675do_test auth-1.103 {
676 execsql {SELECT name FROM sqlite_master}
677} {t2 v2}
678do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000679 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000680 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
681 return SQLITE_IGNORE
682 }
683 return SQLITE_OK
684 }
685 catchsql {DROP VIEW v2}
686} {0 {}}
687do_test auth-1.105 {
688 execsql {SELECT name FROM sqlite_master}
689} {t2 v2}
690do_test auth-1.106 {
drhe22a3342003-04-22 20:30:37 +0000691 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000692 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000693 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000694 return SQLITE_IGNORE
695 }
696 return SQLITE_OK
697 }
698 catchsql {DROP VIEW v2}
699} {0 {}}
700do_test auth-1.107 {
701 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000702} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000703do_test auth-1.108 {
704 execsql {SELECT name FROM sqlite_master}
705} {t2 v2}
706do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000707 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000708 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000709 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000710 return SQLITE_OK
711 }
712 return SQLITE_OK
713 }
714 catchsql {DROP VIEW v2}
715} {0 {}}
716do_test auth-1.110 {
717 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000718} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000719do_test auth-1.111 {
720 execsql {SELECT name FROM sqlite_master}
721} {t2}
722
723
724do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000725 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000726 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
727 return SQLITE_DENY
728 }
729 return SQLITE_OK
730 }
731 catchsql {
732 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
733 DROP VIEW v1
734 }
735} {1 {not authorized}}
736do_test auth-1.113 {
737 execsql {SELECT name FROM sqlite_temp_master}
738} {t1 v1}
739do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000740 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000741 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000742 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000743 return SQLITE_DENY
744 }
745 return SQLITE_OK
746 }
747 catchsql {DROP VIEW v1}
748} {1 {not authorized}}
749do_test auth-1.115 {
750 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000751} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000752do_test auth-1.116 {
753 execsql {SELECT name FROM sqlite_temp_master}
754} {t1 v1}
755do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000756 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000757 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
758 return SQLITE_IGNORE
759 }
760 return SQLITE_OK
761 }
762 catchsql {DROP VIEW v1}
763} {0 {}}
764do_test auth-1.118 {
765 execsql {SELECT name FROM sqlite_temp_master}
766} {t1 v1}
767do_test auth-1.119 {
drhe22a3342003-04-22 20:30:37 +0000768 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000769 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000770 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000771 return SQLITE_IGNORE
772 }
773 return SQLITE_OK
774 }
775 catchsql {DROP VIEW v1}
776} {0 {}}
777do_test auth-1.120 {
778 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000779} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000780do_test auth-1.121 {
781 execsql {SELECT name FROM sqlite_temp_master}
782} {t1 v1}
783do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000784 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000785 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000786 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000787 return SQLITE_OK
788 }
789 return SQLITE_OK
790 }
791 catchsql {DROP VIEW v1}
792} {0 {}}
793do_test auth-1.123 {
794 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000795} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000796do_test auth-1.124 {
797 execsql {SELECT name FROM sqlite_temp_master}
798} {t1}
799
800do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000801 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000802 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000803 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000804 return SQLITE_DENY
805 }
806 return SQLITE_OK
807 }
808 catchsql {
809 CREATE TRIGGER r2 DELETE on t2 BEGIN
810 SELECT NULL;
811 END;
812 }
813} {1 {not authorized}}
814do_test auth-1.126 {
815 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000816} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000817do_test auth-1.127 {
818 execsql {SELECT name FROM sqlite_master}
819} {t2}
820do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000821 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000822 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
823 return SQLITE_DENY
824 }
825 return SQLITE_OK
826 }
827 catchsql {
828 CREATE TRIGGER r2 DELETE on t2 BEGIN
829 SELECT NULL;
830 END;
831 }
832} {1 {not authorized}}
833do_test auth-1.129 {
834 execsql {SELECT name FROM sqlite_master}
835} {t2}
836do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000837 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000838 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000839 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000840 return SQLITE_IGNORE
841 }
842 return SQLITE_OK
843 }
844 catchsql {
845 CREATE TRIGGER r2 DELETE on t2 BEGIN
846 SELECT NULL;
847 END;
848 }
849} {0 {}}
850do_test auth-1.131 {
851 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000852} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000853do_test auth-1.132 {
854 execsql {SELECT name FROM sqlite_master}
855} {t2}
856do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000857 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000858 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
859 return SQLITE_IGNORE
860 }
861 return SQLITE_OK
862 }
863 catchsql {
864 CREATE TRIGGER r2 DELETE on t2 BEGIN
865 SELECT NULL;
866 END;
867 }
868} {0 {}}
869do_test auth-1.134 {
870 execsql {SELECT name FROM sqlite_master}
871} {t2}
872do_test auth-1.135 {
drhe22a3342003-04-22 20:30:37 +0000873 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000874 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000875 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000876 return SQLITE_OK
877 }
878 return SQLITE_OK
879 }
880 catchsql {
drhe22a3342003-04-22 20:30:37 +0000881 CREATE TABLE tx(id);
882 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
883 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000884 END;
885 }
886} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000887do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000888 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000889} {r2 t2 main {}}
890do_test auth-1.136.2 {
891 execsql {
892 SELECT name FROM sqlite_master WHERE type='trigger'
893 }
894} {r2}
895do_test auth-1.136.3 {
896 proc auth {code arg1 arg2 arg3 arg4} {
897 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
898 return SQLITE_OK
899 }
900 set ::authargs {}
901 execsql {
902 INSERT INTO t2 VALUES(1,2,3);
903 }
904 set ::authargs
905} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
906do_test auth-1.136.4 {
907 execsql {
908 SELECT * FROM tx;
909 }
910} {3}
drh77ad4e42003-01-14 02:49:27 +0000911do_test auth-1.137 {
912 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000913} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000914do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000915 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000916 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000917 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000918 return SQLITE_DENY
919 }
920 return SQLITE_OK
921 }
922 catchsql {
923 CREATE TRIGGER r1 DELETE on t1 BEGIN
924 SELECT NULL;
925 END;
926 }
927} {1 {not authorized}}
928do_test auth-1.139 {
929 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000930} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000931do_test auth-1.140 {
932 execsql {SELECT name FROM sqlite_temp_master}
933} {t1}
934do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000935 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000936 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
937 return SQLITE_DENY
938 }
939 return SQLITE_OK
940 }
941 catchsql {
942 CREATE TRIGGER r1 DELETE on t1 BEGIN
943 SELECT NULL;
944 END;
945 }
946} {1 {not authorized}}
947do_test auth-1.142 {
948 execsql {SELECT name FROM sqlite_temp_master}
949} {t1}
950do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000951 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000952 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000953 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000954 return SQLITE_IGNORE
955 }
956 return SQLITE_OK
957 }
958 catchsql {
959 CREATE TRIGGER r1 DELETE on t1 BEGIN
960 SELECT NULL;
961 END;
962 }
963} {0 {}}
964do_test auth-1.144 {
965 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000966} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000967do_test auth-1.145 {
968 execsql {SELECT name FROM sqlite_temp_master}
969} {t1}
970do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +0000971 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000972 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
973 return SQLITE_IGNORE
974 }
975 return SQLITE_OK
976 }
977 catchsql {
978 CREATE TRIGGER r1 DELETE on t1 BEGIN
979 SELECT NULL;
980 END;
981 }
982} {0 {}}
983do_test auth-1.147 {
984 execsql {SELECT name FROM sqlite_temp_master}
985} {t1}
986do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +0000987 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000988 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000989 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000990 return SQLITE_OK
991 }
992 return SQLITE_OK
993 }
994 catchsql {
995 CREATE TRIGGER r1 DELETE on t1 BEGIN
996 SELECT NULL;
997 END;
998 }
999} {0 {}}
1000do_test auth-1.149 {
1001 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001002} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001003do_test auth-1.150 {
1004 execsql {SELECT name FROM sqlite_temp_master}
1005} {t1 r1}
1006
1007do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001008 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001009 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1010 return SQLITE_DENY
1011 }
1012 return SQLITE_OK
1013 }
1014 catchsql {DROP TRIGGER r2}
1015} {1 {not authorized}}
1016do_test auth-1.152 {
1017 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001018} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001019do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001020 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001021 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001022 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001023 return SQLITE_DENY
1024 }
1025 return SQLITE_OK
1026 }
1027 catchsql {DROP TRIGGER r2}
1028} {1 {not authorized}}
1029do_test auth-1.154 {
1030 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001031} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001032do_test auth-1.155 {
1033 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001034} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001035do_test auth-1.156 {
drhe22a3342003-04-22 20:30:37 +00001036 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001037 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1038 return SQLITE_IGNORE
1039 }
1040 return SQLITE_OK
1041 }
1042 catchsql {DROP TRIGGER r2}
1043} {0 {}}
1044do_test auth-1.157 {
1045 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001046} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001047do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001048 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001049 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001050 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001051 return SQLITE_IGNORE
1052 }
1053 return SQLITE_OK
1054 }
1055 catchsql {DROP TRIGGER r2}
1056} {0 {}}
1057do_test auth-1.159 {
1058 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001059} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001060do_test auth-1.160 {
1061 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001062} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001063do_test auth-1.161 {
drhe22a3342003-04-22 20:30:37 +00001064 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001065 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001066 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001067 return SQLITE_OK
1068 }
1069 return SQLITE_OK
1070 }
1071 catchsql {DROP TRIGGER r2}
1072} {0 {}}
1073do_test auth-1.162 {
1074 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001075} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001076do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001077 execsql {
1078 DROP TABLE tx;
1079 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1080 SELECT name FROM sqlite_master;
1081 }
drh77ad4e42003-01-14 02:49:27 +00001082} {t2}
1083
1084do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001085 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001086 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1087 return SQLITE_DENY
1088 }
1089 return SQLITE_OK
1090 }
1091 catchsql {DROP TRIGGER r1}
1092} {1 {not authorized}}
1093do_test auth-1.165 {
1094 execsql {SELECT name FROM sqlite_temp_master}
1095} {t1 r1}
1096do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001097 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001098 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001099 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001100 return SQLITE_DENY
1101 }
1102 return SQLITE_OK
1103 }
1104 catchsql {DROP TRIGGER r1}
1105} {1 {not authorized}}
1106do_test auth-1.167 {
1107 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001108} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001109do_test auth-1.168 {
1110 execsql {SELECT name FROM sqlite_temp_master}
1111} {t1 r1}
1112do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001113 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001114 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1115 return SQLITE_IGNORE
1116 }
1117 return SQLITE_OK
1118 }
1119 catchsql {DROP TRIGGER r1}
1120} {0 {}}
1121do_test auth-1.170 {
1122 execsql {SELECT name FROM sqlite_temp_master}
1123} {t1 r1}
1124do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001125 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001126 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001127 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001128 return SQLITE_IGNORE
1129 }
1130 return SQLITE_OK
1131 }
1132 catchsql {DROP TRIGGER r1}
1133} {0 {}}
1134do_test auth-1.172 {
1135 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001136} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001137do_test auth-1.173 {
1138 execsql {SELECT name FROM sqlite_temp_master}
1139} {t1 r1}
1140do_test auth-1.174 {
drhe22a3342003-04-22 20:30:37 +00001141 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001142 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001143 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001144 return SQLITE_OK
1145 }
1146 return SQLITE_OK
1147 }
1148 catchsql {DROP TRIGGER r1}
1149} {0 {}}
1150do_test auth-1.175 {
1151 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001152} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001153do_test auth-1.176 {
1154 execsql {SELECT name FROM sqlite_temp_master}
1155} {t1}
1156
1157do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001158 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001159 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001160 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001161 return SQLITE_DENY
1162 }
1163 return SQLITE_OK
1164 }
1165 catchsql {CREATE INDEX i2 ON t2(a)}
1166} {1 {not authorized}}
1167do_test auth-1.178 {
1168 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001169} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001170do_test auth-1.179 {
1171 execsql {SELECT name FROM sqlite_master}
1172} {t2}
1173do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001174 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001175 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1176 return SQLITE_DENY
1177 }
1178 return SQLITE_OK
1179 }
1180 catchsql {CREATE INDEX i2 ON t2(a)}
1181} {1 {not authorized}}
1182do_test auth-1.181 {
1183 execsql {SELECT name FROM sqlite_master}
1184} {t2}
1185do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001186 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001187 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001188 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001189 return SQLITE_IGNORE
1190 }
1191 return SQLITE_OK
1192 }
1193 catchsql {CREATE INDEX i2 ON t2(b)}
1194} {0 {}}
1195do_test auth-1.183 {
1196 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001197} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001198do_test auth-1.184 {
1199 execsql {SELECT name FROM sqlite_master}
1200} {t2}
1201do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001202 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001203 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1204 return SQLITE_IGNORE
1205 }
1206 return SQLITE_OK
1207 }
1208 catchsql {CREATE INDEX i2 ON t2(b)}
1209} {0 {}}
1210do_test auth-1.186 {
1211 execsql {SELECT name FROM sqlite_master}
1212} {t2}
1213do_test auth-1.187 {
drhe22a3342003-04-22 20:30:37 +00001214 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001215 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001216 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001217 return SQLITE_OK
1218 }
1219 return SQLITE_OK
1220 }
1221 catchsql {CREATE INDEX i2 ON t2(a)}
1222} {0 {}}
1223do_test auth-1.188 {
1224 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001225} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001226do_test auth-1.189 {
1227 execsql {SELECT name FROM sqlite_master}
1228} {t2 i2}
1229
1230do_test auth-1.190 {
drhe22a3342003-04-22 20:30:37 +00001231 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001232 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001233 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001234 return SQLITE_DENY
1235 }
1236 return SQLITE_OK
1237 }
1238 catchsql {CREATE INDEX i1 ON t1(a)}
1239} {1 {not authorized}}
1240do_test auth-1.191 {
1241 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001242} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001243do_test auth-1.192 {
1244 execsql {SELECT name FROM sqlite_temp_master}
1245} {t1}
1246do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001247 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001248 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1249 return SQLITE_DENY
1250 }
1251 return SQLITE_OK
1252 }
1253 catchsql {CREATE INDEX i1 ON t1(b)}
1254} {1 {not authorized}}
1255do_test auth-1.194 {
1256 execsql {SELECT name FROM sqlite_temp_master}
1257} {t1}
1258do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001259 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001260 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001261 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001262 return SQLITE_IGNORE
1263 }
1264 return SQLITE_OK
1265 }
1266 catchsql {CREATE INDEX i1 ON t1(b)}
1267} {0 {}}
1268do_test auth-1.196 {
1269 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001270} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001271do_test auth-1.197 {
1272 execsql {SELECT name FROM sqlite_temp_master}
1273} {t1}
1274do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001275 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001276 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1277 return SQLITE_IGNORE
1278 }
1279 return SQLITE_OK
1280 }
1281 catchsql {CREATE INDEX i1 ON t1(c)}
1282} {0 {}}
1283do_test auth-1.199 {
1284 execsql {SELECT name FROM sqlite_temp_master}
1285} {t1}
1286do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001287 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001288 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001289 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001290 return SQLITE_OK
1291 }
1292 return SQLITE_OK
1293 }
1294 catchsql {CREATE INDEX i1 ON t1(a)}
1295} {0 {}}
1296do_test auth-1.201 {
1297 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001298} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001299do_test auth-1.202 {
1300 execsql {SELECT name FROM sqlite_temp_master}
1301} {t1 i1}
1302
1303do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001304 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001305 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1306 return SQLITE_DENY
1307 }
1308 return SQLITE_OK
1309 }
1310 catchsql {DROP INDEX i2}
1311} {1 {not authorized}}
1312do_test auth-1.204 {
1313 execsql {SELECT name FROM sqlite_master}
1314} {t2 i2}
1315do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001316 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001317 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001318 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001319 return SQLITE_DENY
1320 }
1321 return SQLITE_OK
1322 }
1323 catchsql {DROP INDEX i2}
1324} {1 {not authorized}}
1325do_test auth-1.206 {
1326 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001327} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001328do_test auth-1.207 {
1329 execsql {SELECT name FROM sqlite_master}
1330} {t2 i2}
1331do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001332 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001333 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1334 return SQLITE_IGNORE
1335 }
1336 return SQLITE_OK
1337 }
1338 catchsql {DROP INDEX i2}
1339} {0 {}}
1340do_test auth-1.209 {
1341 execsql {SELECT name FROM sqlite_master}
1342} {t2 i2}
1343do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001344 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001345 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001346 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001347 return SQLITE_IGNORE
1348 }
1349 return SQLITE_OK
1350 }
1351 catchsql {DROP INDEX i2}
1352} {0 {}}
1353do_test auth-1.211 {
1354 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001355} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001356do_test auth-1.212 {
1357 execsql {SELECT name FROM sqlite_master}
1358} {t2 i2}
1359do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001360 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001361 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001362 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001363 return SQLITE_OK
1364 }
1365 return SQLITE_OK
1366 }
1367 catchsql {DROP INDEX i2}
1368} {0 {}}
1369do_test auth-1.214 {
1370 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001371} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001372do_test auth-1.215 {
1373 execsql {SELECT name FROM sqlite_master}
1374} {t2}
1375
1376do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001377 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001378 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1379 return SQLITE_DENY
1380 }
1381 return SQLITE_OK
1382 }
1383 catchsql {DROP INDEX i1}
1384} {1 {not authorized}}
1385do_test auth-1.217 {
1386 execsql {SELECT name FROM sqlite_temp_master}
1387} {t1 i1}
1388do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001389 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001390 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001391 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001392 return SQLITE_DENY
1393 }
1394 return SQLITE_OK
1395 }
1396 catchsql {DROP INDEX i1}
1397} {1 {not authorized}}
1398do_test auth-1.219 {
1399 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001400} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001401do_test auth-1.220 {
1402 execsql {SELECT name FROM sqlite_temp_master}
1403} {t1 i1}
1404do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001405 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001406 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1407 return SQLITE_IGNORE
1408 }
1409 return SQLITE_OK
1410 }
1411 catchsql {DROP INDEX i1}
1412} {0 {}}
1413do_test auth-1.222 {
1414 execsql {SELECT name FROM sqlite_temp_master}
1415} {t1 i1}
1416do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001417 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001418 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001419 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001420 return SQLITE_IGNORE
1421 }
1422 return SQLITE_OK
1423 }
1424 catchsql {DROP INDEX i1}
1425} {0 {}}
1426do_test auth-1.224 {
1427 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001428} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001429do_test auth-1.225 {
1430 execsql {SELECT name FROM sqlite_temp_master}
1431} {t1 i1}
1432do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001433 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001434 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001435 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001436 return SQLITE_OK
1437 }
1438 return SQLITE_OK
1439 }
1440 catchsql {DROP INDEX i1}
1441} {0 {}}
1442do_test auth-1.227 {
1443 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001444} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001445do_test auth-1.228 {
1446 execsql {SELECT name FROM sqlite_temp_master}
1447} {t1}
1448
1449do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001450 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001451 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001452 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001453 return SQLITE_DENY
1454 }
1455 return SQLITE_OK
1456 }
1457 catchsql {PRAGMA full_column_names=on}
1458} {1 {not authorized}}
1459do_test auth-1.230 {
1460 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001461} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001462do_test auth-1.231 {
1463 execsql2 {SELECT a FROM t2}
1464} {a 11 a 7}
1465do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001466 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001467 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001468 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001469 return SQLITE_IGNORE
1470 }
1471 return SQLITE_OK
1472 }
1473 catchsql {PRAGMA full_column_names=on}
1474} {0 {}}
1475do_test auth-1.233 {
1476 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001477} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001478do_test auth-1.234 {
1479 execsql2 {SELECT a FROM t2}
1480} {a 11 a 7}
1481do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001482 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001483 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001484 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001485 return SQLITE_OK
1486 }
1487 return SQLITE_OK
1488 }
1489 catchsql {PRAGMA full_column_names=on}
1490} {0 {}}
1491do_test auth-1.236 {
1492 execsql2 {SELECT a FROM t2}
1493} {t2.a 11 t2.a 7}
1494do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001495 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001496 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001497 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001498 return SQLITE_OK
1499 }
1500 return SQLITE_OK
1501 }
1502 catchsql {PRAGMA full_column_names=OFF}
1503} {0 {}}
1504do_test auth-1.238 {
1505 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001506} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001507do_test auth-1.239 {
1508 execsql2 {SELECT a FROM t2}
1509} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001510
drh2c3831c2003-01-14 13:48:20 +00001511do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001512 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001513 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001514 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001515 return SQLITE_DENY
1516 }
1517 return SQLITE_OK
1518 }
1519 catchsql {BEGIN}
1520} {1 {not authorized}}
1521do_test auth-1.241 {
1522 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001523} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001524do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001525 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001526 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001527 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001528 return SQLITE_DENY
1529 }
1530 return SQLITE_OK
1531 }
1532 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1533} {1 {not authorized}}
1534do_test auth-1.243 {
1535 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001536} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001537do_test auth-1.244 {
1538 execsql {SELECT * FROM t2}
1539} {11 2 33 7 8 9 44 55 66}
1540do_test auth-1.245 {
1541 catchsql {ROLLBACK}
1542} {1 {not authorized}}
1543do_test auth-1.246 {
1544 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001545} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001546do_test auth-1.247 {
1547 catchsql {END TRANSACTION}
1548} {1 {not authorized}}
1549do_test auth-1.248 {
1550 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001551} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001552do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001553 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001554 catchsql {ROLLBACK}
1555} {0 {}}
1556do_test auth-1.250 {
1557 execsql {SELECT * FROM t2}
1558} {11 2 33 7 8 9}
1559
drh81e293b2003-06-06 19:00:42 +00001560# ticket #340 - authorization for ATTACH and DETACH.
1561#
1562do_test auth-1.251 {
1563 db authorizer ::auth
1564 proc auth {code arg1 arg2 arg3 arg4} {
1565 if {$code=="SQLITE_ATTACH"} {
1566 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1567 }
1568 return SQLITE_OK
1569 }
1570 catchsql {
1571 ATTACH DATABASE ':memory:' AS test1
1572 }
1573} {0 {}}
1574do_test auth-1.252 {
1575 set ::authargs
1576} {:memory: {} {} {}}
1577do_test auth-1.253 {
1578 catchsql {DETACH DATABASE test1}
1579 proc auth {code arg1 arg2 arg3 arg4} {
1580 if {$code=="SQLITE_ATTACH"} {
1581 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1582 return SQLITE_DENY
1583 }
1584 return SQLITE_OK
1585 }
1586 catchsql {
1587 ATTACH DATABASE ':memory:' AS test1;
1588 }
1589} {1 {not authorized}}
1590do_test auth-1.254 {
1591 lindex [execsql {PRAGMA database_list}] 7
1592} {}
1593do_test auth-1.255 {
1594 catchsql {DETACH DATABASE test1}
1595 proc auth {code arg1 arg2 arg3 arg4} {
1596 if {$code=="SQLITE_ATTACH"} {
1597 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1598 return SQLITE_IGNORE
1599 }
1600 return SQLITE_OK
1601 }
1602 catchsql {
1603 ATTACH DATABASE ':memory:' AS test1;
1604 }
1605} {0 {}}
1606do_test auth-1.256 {
1607 lindex [execsql {PRAGMA database_list}] 7
1608} {}
1609do_test auth-1.257 {
1610 proc auth {code arg1 arg2 arg3 arg4} {
1611 if {$code=="SQLITE_DETACH"} {
1612 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1613 return SQLITE_OK
1614 }
1615 return SQLITE_OK
1616 }
1617 execsql {ATTACH DATABASE ':memory:' AS test1}
1618 catchsql {
1619 DETACH DATABASE test1;
1620 }
1621} {0 {}}
1622do_test auth-1.258 {
1623 lindex [execsql {PRAGMA database_list}] 7
1624} {}
1625do_test auth-1.259 {
1626 execsql {ATTACH DATABASE ':memory:' AS test1}
1627 proc auth {code arg1 arg2 arg3 arg4} {
1628 if {$code=="SQLITE_DETACH"} {
1629 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1630 return SQLITE_IGNORE
1631 }
1632 return SQLITE_OK
1633 }
1634 catchsql {
1635 DETACH DATABASE test1;
1636 }
1637} {0 {}}
1638do_test auth-1.260 {
1639 lindex [execsql {PRAGMA database_list}] 7
1640} {test1}
1641do_test auth-1.261 {
1642 proc auth {code arg1 arg2 arg3 arg4} {
1643 if {$code=="SQLITE_DETACH"} {
1644 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1645 return SQLITE_DENY
1646 }
1647 return SQLITE_OK
1648 }
1649 catchsql {
1650 DETACH DATABASE test1;
1651 }
1652} {1 {not authorized}}
1653do_test auth-1.262 {
1654 lindex [execsql {PRAGMA database_list}] 7
1655} {test1}
1656db authorizer {}
1657execsql {DETACH DATABASE test1}
1658
1659
drh2c3831c2003-01-14 13:48:20 +00001660do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001661 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001662 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1663 return SQLITE_DENY
1664 }
1665 return SQLITE_OK
1666 }
drhe22a3342003-04-22 20:30:37 +00001667 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001668 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1669 catchsql {SELECT * FROM t3}
1670} {1 {access to t3.x is prohibited}}
1671do_test auth-2.1 {
1672 catchsql {SELECT y,z FROM t3}
1673} {0 {}}
1674do_test auth-2.2 {
1675 catchsql {SELECT ROWID,y,z FROM t3}
1676} {1 {access to t3.x is prohibited}}
1677do_test auth-2.3 {
1678 catchsql {SELECT OID,y,z FROM t3}
1679} {1 {access to t3.x is prohibited}}
1680do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001681 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001682 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1683 return SQLITE_IGNORE
1684 }
1685 return SQLITE_OK
1686 }
1687 execsql {INSERT INTO t3 VALUES(44,55,66)}
1688 catchsql {SELECT * FROM t3}
1689} {0 {{} 55 66}}
1690do_test auth-2.5 {
1691 catchsql {SELECT rowid,y,z FROM t3}
1692} {0 {{} 55 66}}
1693do_test auth-2.6 {
drhe22a3342003-04-22 20:30:37 +00001694 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001695 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1696 return SQLITE_IGNORE
1697 }
1698 return SQLITE_OK
1699 }
1700 catchsql {SELECT * FROM t3}
1701} {0 {44 55 66}}
1702do_test auth-2.7 {
1703 catchsql {SELECT ROWID,y,z FROM t3}
1704} {0 {44 55 66}}
1705do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001706 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001707 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1708 return SQLITE_IGNORE
1709 }
1710 return SQLITE_OK
1711 }
1712 catchsql {SELECT ROWID,b,c FROM t2}
1713} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001714do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001715 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001716 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1717 return bogus
1718 }
1719 return SQLITE_OK
1720 }
1721 catchsql {SELECT ROWID,b,c FROM t2}
1722} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001723do_test auth-2.9.2 {
1724 db errorcode
1725} {21}
drh2c3831c2003-01-14 13:48:20 +00001726do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001727 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001728 if {$code=="SQLITE_SELECT"} {
1729 return bogus
1730 }
1731 return SQLITE_OK
1732 }
1733 catchsql {SELECT ROWID,b,c FROM t2}
1734} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001735do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001736 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001737 if {$code=="SQLITE_READ" && $arg2=="a"} {
1738 return SQLITE_IGNORE
1739 }
1740 return SQLITE_OK
1741 }
1742 catchsql {SELECT * FROM t2, t3}
1743} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00001744do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00001745 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001746 if {$code=="SQLITE_READ" && $arg2=="x"} {
1747 return SQLITE_IGNORE
1748 }
1749 return SQLITE_OK
1750 }
1751 catchsql {SELECT * FROM t2, t3}
1752} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001753
drh027850b2003-04-16 20:24:52 +00001754# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1755#
1756do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00001757 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001758 return SQLITE_OK
1759 }
1760 execsql {
1761 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1762 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1763 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1764 END;
1765 UPDATE t2 SET a=a+1;
1766 SELECT * FROM tx;
1767 }
1768} {11 12 2 2 33 33 7 8 8 8 9 9}
1769do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00001770 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001771 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1772 return SQLITE_IGNORE
1773 }
1774 return SQLITE_OK
1775 }
1776 execsql {
1777 DELETE FROM tx;
1778 UPDATE t2 SET a=a+100;
1779 SELECT * FROM tx;
1780 }
1781} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1782
drh85e20962003-04-25 17:52:11 +00001783# Make sure the names of views and triggers are passed on on arg4.
1784#
1785do_test auth-4.1 {
1786 proc auth {code arg1 arg2 arg3 arg4} {
1787 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
1788 return SQLITE_OK
1789 }
1790 set authargs {}
1791 execsql {
1792 UPDATE t2 SET a=a+1;
1793 }
1794 set authargs
1795} [list \
1796 SQLITE_READ t2 a main {} \
1797 SQLITE_UPDATE t2 a main {} \
1798 SQLITE_INSERT tx {} main r1 \
1799 SQLITE_READ t2 a main r1 \
1800 SQLITE_READ t2 a main r1 \
1801 SQLITE_READ t2 b main r1 \
1802 SQLITE_READ t2 b main r1 \
1803 SQLITE_READ t2 c main r1 \
1804 SQLITE_READ t2 c main r1]
1805do_test auth-4.2 {
1806 execsql {
1807 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
1808 CREATE TABLE v1chng(x1,x2);
1809 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
1810 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
1811 END;
1812 SELECT * FROM v1;
1813 }
1814} {115 117}
1815do_test auth-4.3 {
1816 set authargs {}
1817 execsql {
1818 UPDATE v1 SET x=1 WHERE x=117
1819 }
1820 set authargs
1821} [list \
1822 SQLITE_UPDATE v1 x main {} \
1823 SQLITE_READ v1 x main {} \
1824 SQLITE_SELECT {} {} {} v1 \
1825 SQLITE_READ t2 a main v1 \
1826 SQLITE_READ t2 b main v1 \
1827 SQLITE_INSERT v1chng {} main r2 \
1828 SQLITE_READ v1 x main r2 \
1829 SQLITE_READ v1 x main r2]
1830do_test auth-4.4 {
1831 execsql {
1832 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
1833 INSERT INTO v1chng VALUES(OLD.x,NULL);
1834 END;
1835 SELECT * FROM v1;
1836 }
1837} {115 117}
1838do_test auth-4.5 {
1839 set authargs {}
1840 execsql {
1841 DELETE FROM v1 WHERE x=117
1842 }
1843 set authargs
1844} [list \
1845 SQLITE_DELETE v1 {} main {} \
1846 SQLITE_READ v1 x main {} \
1847 SQLITE_SELECT {} {} {} v1 \
1848 SQLITE_READ t2 a main v1 \
1849 SQLITE_READ t2 b main v1 \
1850 SQLITE_INSERT v1chng {} main r3 \
1851 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00001852
1853finish_test