blob: c8d76f3dd5c885a50dd52c595b498e1e1d36b3f4 [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#
drh56891232004-09-09 13:55:50 +000015# $Id: auth.test,v 1.18 2004/09/09 13:55:51 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.
drh1211de32004-07-26 12:24:22 +000023if {[catch {db auth {}} msg]} {
24 finish_test
25 return
26}
drh1962bda2003-01-12 19:33:52 +000027
drhdcd997e2003-01-31 17:21:49 +000028do_test auth-1.1.1 {
drh1962bda2003-01-12 19:33:52 +000029 db close
drhef4ac8f2004-06-19 00:16:31 +000030 set ::DB [sqlite3 db test.db]
drhe22a3342003-04-22 20:30:37 +000031 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000032 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000033 return SQLITE_DENY
34 }
35 return SQLITE_OK
36 }
drhe22a3342003-04-22 20:30:37 +000037 db authorizer ::auth
drh1962bda2003-01-12 19:33:52 +000038 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000039} {1 {not authorized}}
drhdcd997e2003-01-31 17:21:49 +000040do_test auth-1.1.2 {
41 db errorcode
42} {23}
drh0f14e2e2004-06-29 12:39:08 +000043do_test auth-1.1.3 {
44 db authorizer
45} {::auth}
drh56891232004-09-09 13:55:50 +000046do_test auth-1.1.4 {
47 # Ticket #896.
48 catchsql {
49 SELECT x;
50 }
51} {1 {no such column: x}}
drh1962bda2003-01-12 19:33:52 +000052do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000053 execsql {SELECT name FROM sqlite_master}
54} {}
drh77ad4e42003-01-14 02:49:27 +000055do_test auth-1.3.1 {
drhe22a3342003-04-22 20:30:37 +000056 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000057 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000058 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000059 return SQLITE_DENY
60 }
61 return SQLITE_OK
62 }
63 catchsql {CREATE TABLE t1(a,b,c)}
64} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000065do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000066 db errorcode
67} {23}
68do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000069 set ::authargs
drhe22a3342003-04-22 20:30:37 +000070} {t1 {} main {}}
drhe5f9c642003-01-13 23:27:31 +000071do_test auth-1.4 {
72 execsql {SELECT name FROM sqlite_master}
73} {}
74
75do_test auth-1.5 {
drhe22a3342003-04-22 20:30:37 +000076 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000077 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +000078 return SQLITE_DENY
79 }
80 return SQLITE_OK
81 }
82 catchsql {CREATE TEMP TABLE t1(a,b,c)}
83} {1 {not authorized}}
84do_test auth-1.6 {
85 execsql {SELECT name FROM sqlite_temp_master}
86} {}
drh77ad4e42003-01-14 02:49:27 +000087do_test auth-1.7.1 {
drhe22a3342003-04-22 20:30:37 +000088 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000089 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000090 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000091 return SQLITE_DENY
92 }
93 return SQLITE_OK
94 }
95 catchsql {CREATE TEMP TABLE t1(a,b,c)}
96} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000097do_test auth-1.7.2 {
98 set ::authargs
drhe22a3342003-04-22 20:30:37 +000099} {t1 {} temp {}}
drhe5f9c642003-01-13 23:27:31 +0000100do_test auth-1.8 {
101 execsql {SELECT name FROM sqlite_temp_master}
102} {}
103
104do_test auth-1.9 {
drhe22a3342003-04-22 20:30:37 +0000105 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000106 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +0000107 return SQLITE_IGNORE
108 }
109 return SQLITE_OK
110 }
111 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +0000112} {0 {}}
113do_test auth-1.10 {
114 execsql {SELECT name FROM sqlite_master}
115} {}
116do_test auth-1.11 {
drhe22a3342003-04-22 20:30:37 +0000117 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000118 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000119 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000120 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000121 }
122 return SQLITE_OK
123 }
124 catchsql {CREATE TABLE t1(a,b,c)}
125} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000126do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000127 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000128} {}
129do_test auth-1.13 {
drhe22a3342003-04-22 20:30:37 +0000130 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000131 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +0000132 return SQLITE_IGNORE
133 }
134 return SQLITE_OK
135 }
136 catchsql {CREATE TEMP TABLE t1(a,b,c)}
137} {0 {}}
138do_test auth-1.14 {
139 execsql {SELECT name FROM sqlite_temp_master}
140} {}
141do_test auth-1.15 {
drhe22a3342003-04-22 20:30:37 +0000142 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000143 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000144 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000145 return SQLITE_IGNORE
146 }
147 return SQLITE_OK
148 }
149 catchsql {CREATE TEMP TABLE t1(a,b,c)}
150} {0 {}}
151do_test auth-1.16 {
152 execsql {SELECT name FROM sqlite_temp_master}
153} {}
154
155do_test auth-1.17 {
drhe22a3342003-04-22 20:30:37 +0000156 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000157 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000158 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000159 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000160 }
161 return SQLITE_OK
162 }
163 catchsql {CREATE TEMP TABLE t1(a,b,c)}
164} {0 {}}
165do_test auth-1.18 {
166 execsql {SELECT name FROM sqlite_temp_master}
167} {t1}
drh77ad4e42003-01-14 02:49:27 +0000168do_test auth-1.19.1 {
169 set ::authargs {}
drhe22a3342003-04-22 20:30:37 +0000170 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000171 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000172 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000173 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000174 }
175 return SQLITE_OK
176 }
177 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000178} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000179do_test auth-1.19.2 {
180 set ::authargs
181} {}
drh1962bda2003-01-12 19:33:52 +0000182do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000183 execsql {SELECT name FROM sqlite_master}
184} {t2}
drh1962bda2003-01-12 19:33:52 +0000185
drh77ad4e42003-01-14 02:49:27 +0000186do_test auth-1.21.1 {
drhe22a3342003-04-22 20:30:37 +0000187 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000188 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000189 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000190 return SQLITE_DENY
191 }
192 return SQLITE_OK
193 }
194 catchsql {DROP TABLE t2}
195} {1 {not authorized}}
196do_test auth-1.21.2 {
197 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000198} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000199do_test auth-1.22 {
200 execsql {SELECT name FROM sqlite_master}
201} {t2}
202do_test auth-1.23.1 {
drhe22a3342003-04-22 20:30:37 +0000203 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000204 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000205 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000206 return SQLITE_IGNORE
207 }
208 return SQLITE_OK
209 }
210 catchsql {DROP TABLE t2}
211} {0 {}}
212do_test auth-1.23.2 {
213 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000214} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000215do_test auth-1.24 {
216 execsql {SELECT name FROM sqlite_master}
217} {t2}
drhe5f9c642003-01-13 23:27:31 +0000218
drh77ad4e42003-01-14 02:49:27 +0000219do_test auth-1.25 {
drhe22a3342003-04-22 20:30:37 +0000220 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000221 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000222 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000223 return SQLITE_DENY
224 }
225 return SQLITE_OK
226 }
227 catchsql {DROP TABLE t1}
228} {1 {not authorized}}
229do_test auth-1.26 {
230 execsql {SELECT name FROM sqlite_temp_master}
231} {t1}
232do_test auth-1.27 {
drhe22a3342003-04-22 20:30:37 +0000233 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000234 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000235 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000236 return SQLITE_IGNORE
237 }
238 return SQLITE_OK
239 }
240 catchsql {DROP TABLE t1}
241} {0 {}}
242do_test auth-1.28 {
243 execsql {SELECT name FROM sqlite_temp_master}
244} {t1}
245
246do_test auth-1.29 {
drhe22a3342003-04-22 20:30:37 +0000247 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000248 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
249 return SQLITE_DENY
250 }
251 return SQLITE_OK
252 }
253 catchsql {INSERT INTO t2 VALUES(1,2,3)}
254} {1 {not authorized}}
255do_test auth-1.30 {
256 execsql {SELECT * FROM t2}
257} {}
258do_test auth-1.31 {
drhe22a3342003-04-22 20:30:37 +0000259 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000260 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
261 return SQLITE_IGNORE
262 }
263 return SQLITE_OK
264 }
265 catchsql {INSERT INTO t2 VALUES(1,2,3)}
266} {0 {}}
267do_test auth-1.32 {
268 execsql {SELECT * FROM t2}
269} {}
270do_test auth-1.33 {
drhe22a3342003-04-22 20:30:37 +0000271 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000272 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
273 return SQLITE_IGNORE
274 }
275 return SQLITE_OK
276 }
277 catchsql {INSERT INTO t2 VALUES(1,2,3)}
278} {0 {}}
279do_test auth-1.34 {
280 execsql {SELECT * FROM t2}
281} {1 2 3}
282
drh4925ca02003-11-27 00:48:57 +0000283do_test auth-1.35.1 {
drhe22a3342003-04-22 20:30:37 +0000284 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000285 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
286 return SQLITE_DENY
287 }
288 return SQLITE_OK
289 }
290 catchsql {SELECT * FROM t2}
291} {1 {access to t2.b is prohibited}}
drh4925ca02003-11-27 00:48:57 +0000292do_test auth-1.35.2 {
293 execsql {ATTACH DATABASE 'test.db' AS two}
294 catchsql {SELECT * FROM two.t2}
295} {1 {access to two.t2.b is prohibited}}
296execsql {DETACH DATABASE two}
drh77ad4e42003-01-14 02:49:27 +0000297do_test auth-1.36 {
drhe22a3342003-04-22 20:30:37 +0000298 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000299 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
300 return SQLITE_IGNORE
301 }
302 return SQLITE_OK
303 }
304 catchsql {SELECT * FROM t2}
305} {0 {1 {} 3}}
306do_test auth-1.37 {
drhe22a3342003-04-22 20:30:37 +0000307 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000308 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
309 return SQLITE_IGNORE
310 }
311 return SQLITE_OK
312 }
313 catchsql {SELECT * FROM t2 WHERE b=2}
314} {0 {}}
315do_test auth-1.38 {
drhe22a3342003-04-22 20:30:37 +0000316 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000317 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
318 return SQLITE_IGNORE
319 }
320 return SQLITE_OK
321 }
322 catchsql {SELECT * FROM t2 WHERE b=2}
323} {0 {{} 2 3}}
324do_test auth-1.39 {
drhe22a3342003-04-22 20:30:37 +0000325 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000326 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
327 return SQLITE_IGNORE
328 }
329 return SQLITE_OK
330 }
331 catchsql {SELECT * FROM t2 WHERE b IS NULL}
332} {0 {1 {} 3}}
333do_test auth-1.40 {
drhe22a3342003-04-22 20:30:37 +0000334 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000335 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
336 return SQLITE_DENY
337 }
338 return SQLITE_OK
339 }
340 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
341} {1 {access to t2.b is prohibited}}
342
343do_test auth-1.41 {
drhe22a3342003-04-22 20:30:37 +0000344 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000345 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
346 return SQLITE_DENY
347 }
348 return SQLITE_OK
349 }
350 catchsql {UPDATE t2 SET a=11}
351} {0 {}}
352do_test auth-1.42 {
353 execsql {SELECT * FROM t2}
354} {11 2 3}
355do_test auth-1.43 {
drhe22a3342003-04-22 20:30:37 +0000356 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000357 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
358 return SQLITE_DENY
359 }
360 return SQLITE_OK
361 }
362 catchsql {UPDATE t2 SET b=22, c=33}
363} {1 {not authorized}}
364do_test auth-1.44 {
365 execsql {SELECT * FROM t2}
366} {11 2 3}
367do_test auth-1.45 {
drhe22a3342003-04-22 20:30:37 +0000368 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000369 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
370 return SQLITE_IGNORE
371 }
372 return SQLITE_OK
373 }
374 catchsql {UPDATE t2 SET b=22, c=33}
375} {0 {}}
376do_test auth-1.46 {
377 execsql {SELECT * FROM t2}
378} {11 2 33}
379
380do_test auth-1.47 {
drhe22a3342003-04-22 20:30:37 +0000381 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000382 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
383 return SQLITE_DENY
384 }
385 return SQLITE_OK
386 }
387 catchsql {DELETE FROM t2 WHERE a=11}
388} {1 {not authorized}}
389do_test auth-1.48 {
390 execsql {SELECT * FROM t2}
391} {11 2 33}
392do_test auth-1.49 {
drhe22a3342003-04-22 20:30:37 +0000393 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000394 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
395 return SQLITE_IGNORE
396 }
397 return SQLITE_OK
398 }
399 catchsql {DELETE FROM t2 WHERE a=11}
400} {0 {}}
401do_test auth-1.50 {
402 execsql {SELECT * FROM t2}
403} {11 2 33}
404
405do_test auth-1.51 {
drhe22a3342003-04-22 20:30:37 +0000406 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000407 if {$code=="SQLITE_SELECT"} {
408 return SQLITE_DENY
409 }
410 return SQLITE_OK
411 }
412 catchsql {SELECT * FROM t2}
413} {1 {not authorized}}
414do_test auth-1.52 {
drhe22a3342003-04-22 20:30:37 +0000415 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000416 if {$code=="SQLITE_SELECT"} {
417 return SQLITE_IGNORE
418 }
419 return SQLITE_OK
420 }
421 catchsql {SELECT * FROM t2}
422} {0 {}}
423do_test auth-1.53 {
drhe22a3342003-04-22 20:30:37 +0000424 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000425 if {$code=="SQLITE_SELECT"} {
426 return SQLITE_OK
427 }
428 return SQLITE_OK
429 }
430 catchsql {SELECT * FROM t2}
431} {0 {11 2 33}}
432
danielk19772ac79702004-06-14 11:54:18 +0000433# Update for version 3: There used to be a handful of test here that
434# tested the authorisation callback with the COPY command. The following
435# test makes the same database modifications as they used to.
436do_test auth-1.54 {
437 execsql {INSERT INTO t2 VALUES(7, 8, 9);}
438} {}
439do_test auth-1.55 {
440 execsql {SELECT * FROM t2}
441} {11 2 33 7 8 9}
drh77ad4e42003-01-14 02:49:27 +0000442
443do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000444 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000445 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
446 return SQLITE_DENY
447 }
448 return SQLITE_OK
449 }
450 catchsql {DROP TABLE t2}
451} {1 {not authorized}}
452do_test auth-1.64 {
453 execsql {SELECT name FROM sqlite_master}
454} {t2}
455do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000456 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000457 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
458 return SQLITE_DENY
459 }
460 return SQLITE_OK
461 }
462 catchsql {DROP TABLE t2}
463} {1 {not authorized}}
464do_test auth-1.66 {
465 execsql {SELECT name FROM sqlite_master}
466} {t2}
467do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000468 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000469 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
470 return SQLITE_DENY
471 }
472 return SQLITE_OK
473 }
474 catchsql {DROP TABLE t1}
475} {1 {not authorized}}
476do_test auth-1.68 {
477 execsql {SELECT name FROM sqlite_temp_master}
478} {t1}
479do_test auth-1.69 {
drhe22a3342003-04-22 20:30:37 +0000480 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000481 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
482 return SQLITE_DENY
483 }
484 return SQLITE_OK
485 }
486 catchsql {DROP TABLE t1}
487} {1 {not authorized}}
488do_test auth-1.70 {
489 execsql {SELECT name FROM sqlite_temp_master}
490} {t1}
491
492do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000493 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000494 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
495 return SQLITE_IGNORE
496 }
497 return SQLITE_OK
498 }
499 catchsql {DROP TABLE t2}
500} {0 {}}
501do_test auth-1.72 {
502 execsql {SELECT name FROM sqlite_master}
503} {t2}
504do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000505 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000506 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
507 return SQLITE_IGNORE
508 }
509 return SQLITE_OK
510 }
511 catchsql {DROP TABLE t2}
512} {0 {}}
513do_test auth-1.74 {
514 execsql {SELECT name FROM sqlite_master}
515} {t2}
516do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000517 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000518 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
519 return SQLITE_IGNORE
520 }
521 return SQLITE_OK
522 }
523 catchsql {DROP TABLE t1}
524} {0 {}}
525do_test auth-1.76 {
526 execsql {SELECT name FROM sqlite_temp_master}
527} {t1}
528do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000529 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000530 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
531 return SQLITE_IGNORE
532 }
533 return SQLITE_OK
534 }
535 catchsql {DROP TABLE t1}
536} {0 {}}
537do_test auth-1.78 {
538 execsql {SELECT name FROM sqlite_temp_master}
539} {t1}
540
541do_test auth-1.79 {
drhe22a3342003-04-22 20:30:37 +0000542 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000543 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000544 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000545 return SQLITE_DENY
546 }
547 return SQLITE_OK
548 }
549 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
550} {1 {not authorized}}
551do_test auth-1.80 {
552 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000553} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000554do_test auth-1.81 {
555 execsql {SELECT name FROM sqlite_master}
556} {t2}
557do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000558 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000559 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000560 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000561 return SQLITE_IGNORE
562 }
563 return SQLITE_OK
564 }
565 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
566} {0 {}}
567do_test auth-1.83 {
568 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000569} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000570do_test auth-1.84 {
571 execsql {SELECT name FROM sqlite_master}
572} {t2}
573
574do_test auth-1.85 {
drhe22a3342003-04-22 20:30:37 +0000575 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000576 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000577 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000578 return SQLITE_DENY
579 }
580 return SQLITE_OK
581 }
582 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
583} {1 {not authorized}}
584do_test auth-1.86 {
585 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000586} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000587do_test auth-1.87 {
588 execsql {SELECT name FROM sqlite_temp_master}
589} {t1}
590do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000591 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000592 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000593 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000594 return SQLITE_IGNORE
595 }
596 return SQLITE_OK
597 }
598 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
599} {0 {}}
600do_test auth-1.89 {
601 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000602} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000603do_test auth-1.90 {
604 execsql {SELECT name FROM sqlite_temp_master}
605} {t1}
606
607do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000608 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000609 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
610 return SQLITE_DENY
611 }
612 return SQLITE_OK
613 }
614 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
615} {1 {not authorized}}
616do_test auth-1.92 {
617 execsql {SELECT name FROM sqlite_master}
618} {t2}
619do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000620 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000621 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
622 return SQLITE_IGNORE
623 }
624 return SQLITE_OK
625 }
626 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
627} {0 {}}
628do_test auth-1.94 {
629 execsql {SELECT name FROM sqlite_master}
630} {t2}
631
632do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000633 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000634 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
635 return SQLITE_DENY
636 }
637 return SQLITE_OK
638 }
639 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
640} {1 {not authorized}}
641do_test auth-1.96 {
642 execsql {SELECT name FROM sqlite_temp_master}
643} {t1}
644do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000645 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000646 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
647 return SQLITE_IGNORE
648 }
649 return SQLITE_OK
650 }
651 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
652} {0 {}}
653do_test auth-1.98 {
654 execsql {SELECT name FROM sqlite_temp_master}
655} {t1}
656
657do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000658 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000659 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
660 return SQLITE_DENY
661 }
662 return SQLITE_OK
663 }
664 catchsql {
665 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
666 DROP VIEW v2
667 }
668} {1 {not authorized}}
669do_test auth-1.100 {
670 execsql {SELECT name FROM sqlite_master}
671} {t2 v2}
672do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000673 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000674 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000675 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000676 return SQLITE_DENY
677 }
678 return SQLITE_OK
679 }
680 catchsql {DROP VIEW v2}
681} {1 {not authorized}}
682do_test auth-1.102 {
683 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000684} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000685do_test auth-1.103 {
686 execsql {SELECT name FROM sqlite_master}
687} {t2 v2}
688do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000689 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000690 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
691 return SQLITE_IGNORE
692 }
693 return SQLITE_OK
694 }
695 catchsql {DROP VIEW v2}
696} {0 {}}
697do_test auth-1.105 {
698 execsql {SELECT name FROM sqlite_master}
699} {t2 v2}
700do_test auth-1.106 {
drhe22a3342003-04-22 20:30:37 +0000701 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000702 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000703 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000704 return SQLITE_IGNORE
705 }
706 return SQLITE_OK
707 }
708 catchsql {DROP VIEW v2}
709} {0 {}}
710do_test auth-1.107 {
711 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000712} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000713do_test auth-1.108 {
714 execsql {SELECT name FROM sqlite_master}
715} {t2 v2}
716do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000717 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000718 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000719 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000720 return SQLITE_OK
721 }
722 return SQLITE_OK
723 }
724 catchsql {DROP VIEW v2}
725} {0 {}}
726do_test auth-1.110 {
727 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000728} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000729do_test auth-1.111 {
730 execsql {SELECT name FROM sqlite_master}
731} {t2}
732
733
734do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000735 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000736 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
737 return SQLITE_DENY
738 }
739 return SQLITE_OK
740 }
741 catchsql {
742 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
743 DROP VIEW v1
744 }
745} {1 {not authorized}}
746do_test auth-1.113 {
747 execsql {SELECT name FROM sqlite_temp_master}
748} {t1 v1}
749do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000750 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000751 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000752 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000753 return SQLITE_DENY
754 }
755 return SQLITE_OK
756 }
757 catchsql {DROP VIEW v1}
758} {1 {not authorized}}
759do_test auth-1.115 {
760 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000761} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000762do_test auth-1.116 {
763 execsql {SELECT name FROM sqlite_temp_master}
764} {t1 v1}
765do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000766 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000767 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
768 return SQLITE_IGNORE
769 }
770 return SQLITE_OK
771 }
772 catchsql {DROP VIEW v1}
773} {0 {}}
774do_test auth-1.118 {
775 execsql {SELECT name FROM sqlite_temp_master}
776} {t1 v1}
777do_test auth-1.119 {
drhe22a3342003-04-22 20:30:37 +0000778 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000779 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000780 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000781 return SQLITE_IGNORE
782 }
783 return SQLITE_OK
784 }
785 catchsql {DROP VIEW v1}
786} {0 {}}
787do_test auth-1.120 {
788 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000789} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000790do_test auth-1.121 {
791 execsql {SELECT name FROM sqlite_temp_master}
792} {t1 v1}
793do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000794 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000795 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000796 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000797 return SQLITE_OK
798 }
799 return SQLITE_OK
800 }
801 catchsql {DROP VIEW v1}
802} {0 {}}
803do_test auth-1.123 {
804 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000805} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000806do_test auth-1.124 {
807 execsql {SELECT name FROM sqlite_temp_master}
808} {t1}
809
810do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000811 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000812 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000813 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000814 return SQLITE_DENY
815 }
816 return SQLITE_OK
817 }
818 catchsql {
819 CREATE TRIGGER r2 DELETE on t2 BEGIN
820 SELECT NULL;
821 END;
822 }
823} {1 {not authorized}}
824do_test auth-1.126 {
825 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000826} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000827do_test auth-1.127 {
828 execsql {SELECT name FROM sqlite_master}
829} {t2}
830do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000831 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000832 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
833 return SQLITE_DENY
834 }
835 return SQLITE_OK
836 }
837 catchsql {
838 CREATE TRIGGER r2 DELETE on t2 BEGIN
839 SELECT NULL;
840 END;
841 }
842} {1 {not authorized}}
843do_test auth-1.129 {
844 execsql {SELECT name FROM sqlite_master}
845} {t2}
846do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000847 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000848 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000849 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000850 return SQLITE_IGNORE
851 }
852 return SQLITE_OK
853 }
854 catchsql {
855 CREATE TRIGGER r2 DELETE on t2 BEGIN
856 SELECT NULL;
857 END;
858 }
859} {0 {}}
860do_test auth-1.131 {
861 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000862} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000863do_test auth-1.132 {
864 execsql {SELECT name FROM sqlite_master}
865} {t2}
866do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000867 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000868 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
869 return SQLITE_IGNORE
870 }
871 return SQLITE_OK
872 }
873 catchsql {
874 CREATE TRIGGER r2 DELETE on t2 BEGIN
875 SELECT NULL;
876 END;
877 }
878} {0 {}}
879do_test auth-1.134 {
880 execsql {SELECT name FROM sqlite_master}
881} {t2}
882do_test auth-1.135 {
drhe22a3342003-04-22 20:30:37 +0000883 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000884 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000885 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000886 return SQLITE_OK
887 }
888 return SQLITE_OK
889 }
890 catchsql {
drhe22a3342003-04-22 20:30:37 +0000891 CREATE TABLE tx(id);
892 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
893 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000894 END;
895 }
896} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000897do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000898 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000899} {r2 t2 main {}}
900do_test auth-1.136.2 {
901 execsql {
902 SELECT name FROM sqlite_master WHERE type='trigger'
903 }
904} {r2}
905do_test auth-1.136.3 {
906 proc auth {code arg1 arg2 arg3 arg4} {
907 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
908 return SQLITE_OK
909 }
910 set ::authargs {}
911 execsql {
912 INSERT INTO t2 VALUES(1,2,3);
913 }
914 set ::authargs
915} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
916do_test auth-1.136.4 {
917 execsql {
918 SELECT * FROM tx;
919 }
920} {3}
drh77ad4e42003-01-14 02:49:27 +0000921do_test auth-1.137 {
922 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000923} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000924do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000925 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000926 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000927 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000928 return SQLITE_DENY
929 }
930 return SQLITE_OK
931 }
932 catchsql {
933 CREATE TRIGGER r1 DELETE on t1 BEGIN
934 SELECT NULL;
935 END;
936 }
937} {1 {not authorized}}
938do_test auth-1.139 {
939 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000940} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000941do_test auth-1.140 {
942 execsql {SELECT name FROM sqlite_temp_master}
943} {t1}
944do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000945 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000946 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
947 return SQLITE_DENY
948 }
949 return SQLITE_OK
950 }
951 catchsql {
952 CREATE TRIGGER r1 DELETE on t1 BEGIN
953 SELECT NULL;
954 END;
955 }
956} {1 {not authorized}}
957do_test auth-1.142 {
958 execsql {SELECT name FROM sqlite_temp_master}
959} {t1}
960do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000961 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000962 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000963 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000964 return SQLITE_IGNORE
965 }
966 return SQLITE_OK
967 }
968 catchsql {
969 CREATE TRIGGER r1 DELETE on t1 BEGIN
970 SELECT NULL;
971 END;
972 }
973} {0 {}}
974do_test auth-1.144 {
975 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000976} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000977do_test auth-1.145 {
978 execsql {SELECT name FROM sqlite_temp_master}
979} {t1}
980do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +0000981 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000982 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
983 return SQLITE_IGNORE
984 }
985 return SQLITE_OK
986 }
987 catchsql {
988 CREATE TRIGGER r1 DELETE on t1 BEGIN
989 SELECT NULL;
990 END;
991 }
992} {0 {}}
993do_test auth-1.147 {
994 execsql {SELECT name FROM sqlite_temp_master}
995} {t1}
996do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +0000997 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000998 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000999 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001000 return SQLITE_OK
1001 }
1002 return SQLITE_OK
1003 }
1004 catchsql {
1005 CREATE TRIGGER r1 DELETE on t1 BEGIN
1006 SELECT NULL;
1007 END;
1008 }
1009} {0 {}}
1010do_test auth-1.149 {
1011 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001012} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001013do_test auth-1.150 {
1014 execsql {SELECT name FROM sqlite_temp_master}
1015} {t1 r1}
1016
1017do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001018 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001019 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1020 return SQLITE_DENY
1021 }
1022 return SQLITE_OK
1023 }
1024 catchsql {DROP TRIGGER r2}
1025} {1 {not authorized}}
1026do_test auth-1.152 {
1027 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001028} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001029do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001030 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001031 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001032 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001033 return SQLITE_DENY
1034 }
1035 return SQLITE_OK
1036 }
1037 catchsql {DROP TRIGGER r2}
1038} {1 {not authorized}}
1039do_test auth-1.154 {
1040 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001041} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001042do_test auth-1.155 {
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.156 {
drhe22a3342003-04-22 20:30:37 +00001046 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001047 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1048 return SQLITE_IGNORE
1049 }
1050 return SQLITE_OK
1051 }
1052 catchsql {DROP TRIGGER r2}
1053} {0 {}}
1054do_test auth-1.157 {
1055 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001056} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001057do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001058 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001059 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001060 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001061 return SQLITE_IGNORE
1062 }
1063 return SQLITE_OK
1064 }
1065 catchsql {DROP TRIGGER r2}
1066} {0 {}}
1067do_test auth-1.159 {
1068 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001069} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001070do_test auth-1.160 {
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.161 {
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_OK
1078 }
1079 return SQLITE_OK
1080 }
1081 catchsql {DROP TRIGGER r2}
1082} {0 {}}
1083do_test auth-1.162 {
1084 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001085} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001086do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001087 execsql {
1088 DROP TABLE tx;
1089 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1090 SELECT name FROM sqlite_master;
1091 }
drh77ad4e42003-01-14 02:49:27 +00001092} {t2}
1093
1094do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001095 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001096 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1097 return SQLITE_DENY
1098 }
1099 return SQLITE_OK
1100 }
1101 catchsql {DROP TRIGGER r1}
1102} {1 {not authorized}}
1103do_test auth-1.165 {
1104 execsql {SELECT name FROM sqlite_temp_master}
1105} {t1 r1}
1106do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001107 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001108 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001109 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001110 return SQLITE_DENY
1111 }
1112 return SQLITE_OK
1113 }
1114 catchsql {DROP TRIGGER r1}
1115} {1 {not authorized}}
1116do_test auth-1.167 {
1117 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001118} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001119do_test auth-1.168 {
1120 execsql {SELECT name FROM sqlite_temp_master}
1121} {t1 r1}
1122do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001123 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001124 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1125 return SQLITE_IGNORE
1126 }
1127 return SQLITE_OK
1128 }
1129 catchsql {DROP TRIGGER r1}
1130} {0 {}}
1131do_test auth-1.170 {
1132 execsql {SELECT name FROM sqlite_temp_master}
1133} {t1 r1}
1134do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001135 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001136 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001137 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001138 return SQLITE_IGNORE
1139 }
1140 return SQLITE_OK
1141 }
1142 catchsql {DROP TRIGGER r1}
1143} {0 {}}
1144do_test auth-1.172 {
1145 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001146} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001147do_test auth-1.173 {
1148 execsql {SELECT name FROM sqlite_temp_master}
1149} {t1 r1}
1150do_test auth-1.174 {
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_OK
1155 }
1156 return SQLITE_OK
1157 }
1158 catchsql {DROP TRIGGER r1}
1159} {0 {}}
1160do_test auth-1.175 {
1161 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001162} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001163do_test auth-1.176 {
1164 execsql {SELECT name FROM sqlite_temp_master}
1165} {t1}
1166
1167do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001168 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001169 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001170 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001171 return SQLITE_DENY
1172 }
1173 return SQLITE_OK
1174 }
1175 catchsql {CREATE INDEX i2 ON t2(a)}
1176} {1 {not authorized}}
1177do_test auth-1.178 {
1178 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001179} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001180do_test auth-1.179 {
1181 execsql {SELECT name FROM sqlite_master}
1182} {t2}
1183do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001184 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001185 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1186 return SQLITE_DENY
1187 }
1188 return SQLITE_OK
1189 }
1190 catchsql {CREATE INDEX i2 ON t2(a)}
1191} {1 {not authorized}}
1192do_test auth-1.181 {
1193 execsql {SELECT name FROM sqlite_master}
1194} {t2}
1195do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001196 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001197 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001198 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001199 return SQLITE_IGNORE
1200 }
1201 return SQLITE_OK
1202 }
1203 catchsql {CREATE INDEX i2 ON t2(b)}
1204} {0 {}}
1205do_test auth-1.183 {
1206 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001207} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001208do_test auth-1.184 {
1209 execsql {SELECT name FROM sqlite_master}
1210} {t2}
1211do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001212 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001213 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1214 return SQLITE_IGNORE
1215 }
1216 return SQLITE_OK
1217 }
1218 catchsql {CREATE INDEX i2 ON t2(b)}
1219} {0 {}}
1220do_test auth-1.186 {
1221 execsql {SELECT name FROM sqlite_master}
1222} {t2}
1223do_test auth-1.187 {
drhe22a3342003-04-22 20:30:37 +00001224 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001225 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001226 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001227 return SQLITE_OK
1228 }
1229 return SQLITE_OK
1230 }
1231 catchsql {CREATE INDEX i2 ON t2(a)}
1232} {0 {}}
1233do_test auth-1.188 {
1234 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001235} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001236do_test auth-1.189 {
1237 execsql {SELECT name FROM sqlite_master}
1238} {t2 i2}
1239
1240do_test auth-1.190 {
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_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001243 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001244 return SQLITE_DENY
1245 }
1246 return SQLITE_OK
1247 }
1248 catchsql {CREATE INDEX i1 ON t1(a)}
1249} {1 {not authorized}}
1250do_test auth-1.191 {
1251 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001252} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001253do_test auth-1.192 {
1254 execsql {SELECT name FROM sqlite_temp_master}
1255} {t1}
1256do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001257 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001258 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1259 return SQLITE_DENY
1260 }
1261 return SQLITE_OK
1262 }
1263 catchsql {CREATE INDEX i1 ON t1(b)}
1264} {1 {not authorized}}
1265do_test auth-1.194 {
1266 execsql {SELECT name FROM sqlite_temp_master}
1267} {t1}
1268do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001269 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001270 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001271 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001272 return SQLITE_IGNORE
1273 }
1274 return SQLITE_OK
1275 }
1276 catchsql {CREATE INDEX i1 ON t1(b)}
1277} {0 {}}
1278do_test auth-1.196 {
1279 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001280} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001281do_test auth-1.197 {
1282 execsql {SELECT name FROM sqlite_temp_master}
1283} {t1}
1284do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001285 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001286 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1287 return SQLITE_IGNORE
1288 }
1289 return SQLITE_OK
1290 }
1291 catchsql {CREATE INDEX i1 ON t1(c)}
1292} {0 {}}
1293do_test auth-1.199 {
1294 execsql {SELECT name FROM sqlite_temp_master}
1295} {t1}
1296do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001297 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001298 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001299 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001300 return SQLITE_OK
1301 }
1302 return SQLITE_OK
1303 }
1304 catchsql {CREATE INDEX i1 ON t1(a)}
1305} {0 {}}
1306do_test auth-1.201 {
1307 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001308} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001309do_test auth-1.202 {
1310 execsql {SELECT name FROM sqlite_temp_master}
1311} {t1 i1}
1312
1313do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001314 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001315 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1316 return SQLITE_DENY
1317 }
1318 return SQLITE_OK
1319 }
1320 catchsql {DROP INDEX i2}
1321} {1 {not authorized}}
1322do_test auth-1.204 {
1323 execsql {SELECT name FROM sqlite_master}
1324} {t2 i2}
1325do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001326 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001327 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001328 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001329 return SQLITE_DENY
1330 }
1331 return SQLITE_OK
1332 }
1333 catchsql {DROP INDEX i2}
1334} {1 {not authorized}}
1335do_test auth-1.206 {
1336 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001337} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001338do_test auth-1.207 {
1339 execsql {SELECT name FROM sqlite_master}
1340} {t2 i2}
1341do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001342 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001343 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1344 return SQLITE_IGNORE
1345 }
1346 return SQLITE_OK
1347 }
1348 catchsql {DROP INDEX i2}
1349} {0 {}}
1350do_test auth-1.209 {
1351 execsql {SELECT name FROM sqlite_master}
1352} {t2 i2}
1353do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001354 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001355 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001356 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001357 return SQLITE_IGNORE
1358 }
1359 return SQLITE_OK
1360 }
1361 catchsql {DROP INDEX i2}
1362} {0 {}}
1363do_test auth-1.211 {
1364 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001365} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001366do_test auth-1.212 {
1367 execsql {SELECT name FROM sqlite_master}
1368} {t2 i2}
1369do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001370 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001371 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001372 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001373 return SQLITE_OK
1374 }
1375 return SQLITE_OK
1376 }
1377 catchsql {DROP INDEX i2}
1378} {0 {}}
1379do_test auth-1.214 {
1380 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001381} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001382do_test auth-1.215 {
1383 execsql {SELECT name FROM sqlite_master}
1384} {t2}
1385
1386do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001387 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001388 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1389 return SQLITE_DENY
1390 }
1391 return SQLITE_OK
1392 }
1393 catchsql {DROP INDEX i1}
1394} {1 {not authorized}}
1395do_test auth-1.217 {
1396 execsql {SELECT name FROM sqlite_temp_master}
1397} {t1 i1}
1398do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001399 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001400 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001401 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001402 return SQLITE_DENY
1403 }
1404 return SQLITE_OK
1405 }
1406 catchsql {DROP INDEX i1}
1407} {1 {not authorized}}
1408do_test auth-1.219 {
1409 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001410} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001411do_test auth-1.220 {
1412 execsql {SELECT name FROM sqlite_temp_master}
1413} {t1 i1}
1414do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001415 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001416 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1417 return SQLITE_IGNORE
1418 }
1419 return SQLITE_OK
1420 }
1421 catchsql {DROP INDEX i1}
1422} {0 {}}
1423do_test auth-1.222 {
1424 execsql {SELECT name FROM sqlite_temp_master}
1425} {t1 i1}
1426do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001427 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001428 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001429 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001430 return SQLITE_IGNORE
1431 }
1432 return SQLITE_OK
1433 }
1434 catchsql {DROP INDEX i1}
1435} {0 {}}
1436do_test auth-1.224 {
1437 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001438} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001439do_test auth-1.225 {
1440 execsql {SELECT name FROM sqlite_temp_master}
1441} {t1 i1}
1442do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001443 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001444 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001445 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001446 return SQLITE_OK
1447 }
1448 return SQLITE_OK
1449 }
1450 catchsql {DROP INDEX i1}
1451} {0 {}}
1452do_test auth-1.227 {
1453 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001454} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001455do_test auth-1.228 {
1456 execsql {SELECT name FROM sqlite_temp_master}
1457} {t1}
1458
1459do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001460 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001461 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001462 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001463 return SQLITE_DENY
1464 }
1465 return SQLITE_OK
1466 }
1467 catchsql {PRAGMA full_column_names=on}
1468} {1 {not authorized}}
1469do_test auth-1.230 {
1470 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001471} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001472do_test auth-1.231 {
1473 execsql2 {SELECT a FROM t2}
1474} {a 11 a 7}
1475do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001476 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001477 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001478 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001479 return SQLITE_IGNORE
1480 }
1481 return SQLITE_OK
1482 }
1483 catchsql {PRAGMA full_column_names=on}
1484} {0 {}}
1485do_test auth-1.233 {
1486 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001487} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001488do_test auth-1.234 {
1489 execsql2 {SELECT a FROM t2}
1490} {a 11 a 7}
1491do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001492 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001493 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001494 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001495 return SQLITE_OK
1496 }
1497 return SQLITE_OK
1498 }
1499 catchsql {PRAGMA full_column_names=on}
1500} {0 {}}
1501do_test auth-1.236 {
1502 execsql2 {SELECT a FROM t2}
1503} {t2.a 11 t2.a 7}
1504do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001505 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001506 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001507 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001508 return SQLITE_OK
1509 }
1510 return SQLITE_OK
1511 }
1512 catchsql {PRAGMA full_column_names=OFF}
1513} {0 {}}
1514do_test auth-1.238 {
1515 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001516} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001517do_test auth-1.239 {
1518 execsql2 {SELECT a FROM t2}
1519} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001520
drh2c3831c2003-01-14 13:48:20 +00001521do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001522 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001523 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001524 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001525 return SQLITE_DENY
1526 }
1527 return SQLITE_OK
1528 }
1529 catchsql {BEGIN}
1530} {1 {not authorized}}
1531do_test auth-1.241 {
1532 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001533} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001534do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001535 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001536 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001537 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001538 return SQLITE_DENY
1539 }
1540 return SQLITE_OK
1541 }
1542 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1543} {1 {not authorized}}
1544do_test auth-1.243 {
1545 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001546} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001547do_test auth-1.244 {
1548 execsql {SELECT * FROM t2}
1549} {11 2 33 7 8 9 44 55 66}
1550do_test auth-1.245 {
1551 catchsql {ROLLBACK}
1552} {1 {not authorized}}
1553do_test auth-1.246 {
1554 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001555} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001556do_test auth-1.247 {
1557 catchsql {END TRANSACTION}
1558} {1 {not authorized}}
1559do_test auth-1.248 {
1560 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001561} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001562do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001563 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001564 catchsql {ROLLBACK}
1565} {0 {}}
1566do_test auth-1.250 {
1567 execsql {SELECT * FROM t2}
1568} {11 2 33 7 8 9}
1569
drh81e293b2003-06-06 19:00:42 +00001570# ticket #340 - authorization for ATTACH and DETACH.
1571#
1572do_test auth-1.251 {
1573 db authorizer ::auth
1574 proc auth {code arg1 arg2 arg3 arg4} {
1575 if {$code=="SQLITE_ATTACH"} {
1576 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1577 }
1578 return SQLITE_OK
1579 }
1580 catchsql {
1581 ATTACH DATABASE ':memory:' AS test1
1582 }
1583} {0 {}}
1584do_test auth-1.252 {
1585 set ::authargs
1586} {:memory: {} {} {}}
1587do_test auth-1.253 {
1588 catchsql {DETACH DATABASE test1}
1589 proc auth {code arg1 arg2 arg3 arg4} {
1590 if {$code=="SQLITE_ATTACH"} {
1591 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1592 return SQLITE_DENY
1593 }
1594 return SQLITE_OK
1595 }
1596 catchsql {
1597 ATTACH DATABASE ':memory:' AS test1;
1598 }
1599} {1 {not authorized}}
1600do_test auth-1.254 {
1601 lindex [execsql {PRAGMA database_list}] 7
1602} {}
1603do_test auth-1.255 {
1604 catchsql {DETACH DATABASE test1}
1605 proc auth {code arg1 arg2 arg3 arg4} {
1606 if {$code=="SQLITE_ATTACH"} {
1607 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1608 return SQLITE_IGNORE
1609 }
1610 return SQLITE_OK
1611 }
1612 catchsql {
1613 ATTACH DATABASE ':memory:' AS test1;
1614 }
1615} {0 {}}
1616do_test auth-1.256 {
1617 lindex [execsql {PRAGMA database_list}] 7
1618} {}
1619do_test auth-1.257 {
1620 proc auth {code arg1 arg2 arg3 arg4} {
1621 if {$code=="SQLITE_DETACH"} {
1622 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1623 return SQLITE_OK
1624 }
1625 return SQLITE_OK
1626 }
1627 execsql {ATTACH DATABASE ':memory:' AS test1}
1628 catchsql {
1629 DETACH DATABASE test1;
1630 }
1631} {0 {}}
1632do_test auth-1.258 {
1633 lindex [execsql {PRAGMA database_list}] 7
1634} {}
1635do_test auth-1.259 {
1636 execsql {ATTACH DATABASE ':memory:' AS test1}
1637 proc auth {code arg1 arg2 arg3 arg4} {
1638 if {$code=="SQLITE_DETACH"} {
1639 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1640 return SQLITE_IGNORE
1641 }
1642 return SQLITE_OK
1643 }
1644 catchsql {
1645 DETACH DATABASE test1;
1646 }
1647} {0 {}}
1648do_test auth-1.260 {
1649 lindex [execsql {PRAGMA database_list}] 7
1650} {test1}
1651do_test auth-1.261 {
1652 proc auth {code arg1 arg2 arg3 arg4} {
1653 if {$code=="SQLITE_DETACH"} {
1654 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1655 return SQLITE_DENY
1656 }
1657 return SQLITE_OK
1658 }
1659 catchsql {
1660 DETACH DATABASE test1;
1661 }
1662} {1 {not authorized}}
1663do_test auth-1.262 {
1664 lindex [execsql {PRAGMA database_list}] 7
1665} {test1}
1666db authorizer {}
1667execsql {DETACH DATABASE test1}
1668
1669
drh2c3831c2003-01-14 13:48:20 +00001670do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001671 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001672 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1673 return SQLITE_DENY
1674 }
1675 return SQLITE_OK
1676 }
drhe22a3342003-04-22 20:30:37 +00001677 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001678 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1679 catchsql {SELECT * FROM t3}
1680} {1 {access to t3.x is prohibited}}
1681do_test auth-2.1 {
1682 catchsql {SELECT y,z FROM t3}
1683} {0 {}}
1684do_test auth-2.2 {
1685 catchsql {SELECT ROWID,y,z FROM t3}
1686} {1 {access to t3.x is prohibited}}
1687do_test auth-2.3 {
1688 catchsql {SELECT OID,y,z FROM t3}
1689} {1 {access to t3.x is prohibited}}
1690do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001691 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001692 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1693 return SQLITE_IGNORE
1694 }
1695 return SQLITE_OK
1696 }
1697 execsql {INSERT INTO t3 VALUES(44,55,66)}
1698 catchsql {SELECT * FROM t3}
1699} {0 {{} 55 66}}
1700do_test auth-2.5 {
1701 catchsql {SELECT rowid,y,z FROM t3}
1702} {0 {{} 55 66}}
1703do_test auth-2.6 {
drhe22a3342003-04-22 20:30:37 +00001704 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001705 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1706 return SQLITE_IGNORE
1707 }
1708 return SQLITE_OK
1709 }
1710 catchsql {SELECT * FROM t3}
1711} {0 {44 55 66}}
1712do_test auth-2.7 {
1713 catchsql {SELECT ROWID,y,z FROM t3}
1714} {0 {44 55 66}}
1715do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001716 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001717 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1718 return SQLITE_IGNORE
1719 }
1720 return SQLITE_OK
1721 }
1722 catchsql {SELECT ROWID,b,c FROM t2}
1723} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001724do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001725 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001726 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1727 return bogus
1728 }
1729 return SQLITE_OK
1730 }
1731 catchsql {SELECT ROWID,b,c FROM t2}
1732} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001733do_test auth-2.9.2 {
1734 db errorcode
1735} {21}
drh2c3831c2003-01-14 13:48:20 +00001736do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001737 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001738 if {$code=="SQLITE_SELECT"} {
1739 return bogus
1740 }
1741 return SQLITE_OK
1742 }
1743 catchsql {SELECT ROWID,b,c FROM t2}
1744} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001745do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001746 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001747 if {$code=="SQLITE_READ" && $arg2=="a"} {
1748 return SQLITE_IGNORE
1749 }
1750 return SQLITE_OK
1751 }
1752 catchsql {SELECT * FROM t2, t3}
1753} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00001754do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00001755 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001756 if {$code=="SQLITE_READ" && $arg2=="x"} {
1757 return SQLITE_IGNORE
1758 }
1759 return SQLITE_OK
1760 }
1761 catchsql {SELECT * FROM t2, t3}
1762} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001763
drh027850b2003-04-16 20:24:52 +00001764# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1765#
1766do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00001767 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001768 return SQLITE_OK
1769 }
1770 execsql {
1771 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1772 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1773 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1774 END;
1775 UPDATE t2 SET a=a+1;
1776 SELECT * FROM tx;
1777 }
1778} {11 12 2 2 33 33 7 8 8 8 9 9}
1779do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00001780 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001781 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1782 return SQLITE_IGNORE
1783 }
1784 return SQLITE_OK
1785 }
1786 execsql {
1787 DELETE FROM tx;
1788 UPDATE t2 SET a=a+100;
1789 SELECT * FROM tx;
1790 }
1791} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1792
drh85e20962003-04-25 17:52:11 +00001793# Make sure the names of views and triggers are passed on on arg4.
1794#
1795do_test auth-4.1 {
1796 proc auth {code arg1 arg2 arg3 arg4} {
1797 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
1798 return SQLITE_OK
1799 }
1800 set authargs {}
1801 execsql {
1802 UPDATE t2 SET a=a+1;
1803 }
1804 set authargs
1805} [list \
1806 SQLITE_READ t2 a main {} \
1807 SQLITE_UPDATE t2 a main {} \
1808 SQLITE_INSERT tx {} main r1 \
1809 SQLITE_READ t2 a main r1 \
1810 SQLITE_READ t2 a main r1 \
1811 SQLITE_READ t2 b main r1 \
1812 SQLITE_READ t2 b main r1 \
1813 SQLITE_READ t2 c main r1 \
1814 SQLITE_READ t2 c main r1]
1815do_test auth-4.2 {
1816 execsql {
1817 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
1818 CREATE TABLE v1chng(x1,x2);
1819 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
1820 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
1821 END;
1822 SELECT * FROM v1;
1823 }
1824} {115 117}
1825do_test auth-4.3 {
1826 set authargs {}
1827 execsql {
1828 UPDATE v1 SET x=1 WHERE x=117
1829 }
1830 set authargs
1831} [list \
1832 SQLITE_UPDATE v1 x main {} \
1833 SQLITE_READ v1 x main {} \
1834 SQLITE_SELECT {} {} {} v1 \
1835 SQLITE_READ t2 a main v1 \
1836 SQLITE_READ t2 b main v1 \
1837 SQLITE_INSERT v1chng {} main r2 \
1838 SQLITE_READ v1 x main r2 \
1839 SQLITE_READ v1 x main r2]
1840do_test auth-4.4 {
1841 execsql {
1842 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
1843 INSERT INTO v1chng VALUES(OLD.x,NULL);
1844 END;
1845 SELECT * FROM v1;
1846 }
1847} {115 117}
1848do_test auth-4.5 {
1849 set authargs {}
1850 execsql {
1851 DELETE FROM v1 WHERE x=117
1852 }
1853 set authargs
1854} [list \
1855 SQLITE_DELETE v1 {} main {} \
1856 SQLITE_READ v1 x main {} \
1857 SQLITE_SELECT {} {} {} v1 \
1858 SQLITE_READ t2 a main v1 \
1859 SQLITE_READ t2 b main v1 \
1860 SQLITE_INSERT v1chng {} main r3 \
1861 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00001862
1863finish_test