blob: 4fd48daaaa53fd8fb7d4a2648ce62b20a11e5398 [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#
drh027850b2003-04-16 20:24:52 +000015# $Id: auth.test,v 1.7 2003/04/16 20:24:52 drh Exp $
drh1962bda2003-01-12 19:33:52 +000016#
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20
21if {[info command sqlite_set_authorizer]!=""} {
22
drhdcd997e2003-01-31 17:21:49 +000023do_test auth-1.1.1 {
drh1962bda2003-01-12 19:33:52 +000024 db close
25 set ::DB [sqlite db test.db]
26 proc auth {code arg1 arg2} {
drh77ad4e42003-01-14 02:49:27 +000027 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000028 return SQLITE_DENY
29 }
30 return SQLITE_OK
31 }
32 sqlite_set_authorizer $::DB ::auth
33 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000034} {1 {not authorized}}
drhdcd997e2003-01-31 17:21:49 +000035do_test auth-1.1.2 {
36 db errorcode
37} {23}
drh1962bda2003-01-12 19:33:52 +000038do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000039 execsql {SELECT name FROM sqlite_master}
40} {}
drh77ad4e42003-01-14 02:49:27 +000041do_test auth-1.3.1 {
drh1962bda2003-01-12 19:33:52 +000042 proc auth {code arg1 arg2} {
drhe5f9c642003-01-13 23:27:31 +000043 if {$code=="SQLITE_CREATE_TABLE"} {
drh77ad4e42003-01-14 02:49:27 +000044 set ::authargs [list $arg1 $arg2]
drhe5f9c642003-01-13 23:27:31 +000045 return SQLITE_DENY
46 }
47 return SQLITE_OK
48 }
49 catchsql {CREATE TABLE t1(a,b,c)}
50} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000051do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000052 db errorcode
53} {23}
54do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000055 set ::authargs
56} {t1 {}}
drhe5f9c642003-01-13 23:27:31 +000057do_test auth-1.4 {
58 execsql {SELECT name FROM sqlite_master}
59} {}
60
61do_test auth-1.5 {
62 proc auth {code arg1 arg2} {
drh77ad4e42003-01-14 02:49:27 +000063 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +000064 return SQLITE_DENY
65 }
66 return SQLITE_OK
67 }
68 catchsql {CREATE TEMP TABLE t1(a,b,c)}
69} {1 {not authorized}}
70do_test auth-1.6 {
71 execsql {SELECT name FROM sqlite_temp_master}
72} {}
drh77ad4e42003-01-14 02:49:27 +000073do_test auth-1.7.1 {
drhe5f9c642003-01-13 23:27:31 +000074 proc auth {code arg1 arg2} {
75 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drh77ad4e42003-01-14 02:49:27 +000076 set ::authargs [list $arg1 $arg2]
drhe5f9c642003-01-13 23:27:31 +000077 return SQLITE_DENY
78 }
79 return SQLITE_OK
80 }
81 catchsql {CREATE TEMP TABLE t1(a,b,c)}
82} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000083do_test auth-1.7.2 {
84 set ::authargs
85} {t1 {}}
drhe5f9c642003-01-13 23:27:31 +000086do_test auth-1.8 {
87 execsql {SELECT name FROM sqlite_temp_master}
88} {}
89
90do_test auth-1.9 {
91 proc auth {code arg1 arg2} {
drh77ad4e42003-01-14 02:49:27 +000092 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000093 return SQLITE_IGNORE
94 }
95 return SQLITE_OK
96 }
97 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000098} {0 {}}
99do_test auth-1.10 {
100 execsql {SELECT name FROM sqlite_master}
101} {}
102do_test auth-1.11 {
drh1962bda2003-01-12 19:33:52 +0000103 proc auth {code arg1 arg2} {
drhe5f9c642003-01-13 23:27:31 +0000104 if {$code=="SQLITE_CREATE_TABLE"} {
drh77ad4e42003-01-14 02:49:27 +0000105 set ::authargs [list $arg1 $arg2]
drhe5f9c642003-01-13 23:27:31 +0000106 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000107 }
108 return SQLITE_OK
109 }
110 catchsql {CREATE TABLE t1(a,b,c)}
111} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000112do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000113 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000114} {}
115do_test auth-1.13 {
drh1962bda2003-01-12 19:33:52 +0000116 proc auth {code arg1 arg2} {
drh77ad4e42003-01-14 02:49:27 +0000117 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +0000118 return SQLITE_IGNORE
119 }
120 return SQLITE_OK
121 }
122 catchsql {CREATE TEMP TABLE t1(a,b,c)}
123} {0 {}}
124do_test auth-1.14 {
125 execsql {SELECT name FROM sqlite_temp_master}
126} {}
127do_test auth-1.15 {
128 proc auth {code arg1 arg2} {
129 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drh77ad4e42003-01-14 02:49:27 +0000130 set ::authargs [list $arg1 $arg2]
drhe5f9c642003-01-13 23:27:31 +0000131 return SQLITE_IGNORE
132 }
133 return SQLITE_OK
134 }
135 catchsql {CREATE TEMP TABLE t1(a,b,c)}
136} {0 {}}
137do_test auth-1.16 {
138 execsql {SELECT name FROM sqlite_temp_master}
139} {}
140
141do_test auth-1.17 {
142 proc auth {code arg1 arg2} {
143 if {$code=="SQLITE_CREATE_TABLE"} {
drh77ad4e42003-01-14 02:49:27 +0000144 set ::authargs [list $arg1 $arg2]
145 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000146 }
147 return SQLITE_OK
148 }
149 catchsql {CREATE TEMP TABLE t1(a,b,c)}
150} {0 {}}
151do_test auth-1.18 {
152 execsql {SELECT name FROM sqlite_temp_master}
153} {t1}
drh77ad4e42003-01-14 02:49:27 +0000154do_test auth-1.19.1 {
155 set ::authargs {}
drhe5f9c642003-01-13 23:27:31 +0000156 proc auth {code arg1 arg2} {
157 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drh77ad4e42003-01-14 02:49:27 +0000158 set ::authargs [list $arg1 $arg2]
159 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000160 }
161 return SQLITE_OK
162 }
163 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000164} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000165do_test auth-1.19.2 {
166 set ::authargs
167} {}
drh1962bda2003-01-12 19:33:52 +0000168do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000169 execsql {SELECT name FROM sqlite_master}
170} {t2}
drh1962bda2003-01-12 19:33:52 +0000171
drh77ad4e42003-01-14 02:49:27 +0000172do_test auth-1.21.1 {
173 proc auth {code arg1 arg2} {
174 if {$code=="SQLITE_DROP_TABLE"} {
175 set ::authargs [list $arg1 $arg2]
176 return SQLITE_DENY
177 }
178 return SQLITE_OK
179 }
180 catchsql {DROP TABLE t2}
181} {1 {not authorized}}
182do_test auth-1.21.2 {
183 set ::authargs
184} {t2 {}}
185do_test auth-1.22 {
186 execsql {SELECT name FROM sqlite_master}
187} {t2}
188do_test auth-1.23.1 {
189 proc auth {code arg1 arg2} {
190 if {$code=="SQLITE_DROP_TABLE"} {
191 set ::authargs [list $arg1 $arg2]
192 return SQLITE_IGNORE
193 }
194 return SQLITE_OK
195 }
196 catchsql {DROP TABLE t2}
197} {0 {}}
198do_test auth-1.23.2 {
199 set ::authargs
200} {t2 {}}
201do_test auth-1.24 {
202 execsql {SELECT name FROM sqlite_master}
203} {t2}
drhe5f9c642003-01-13 23:27:31 +0000204
drh77ad4e42003-01-14 02:49:27 +0000205do_test auth-1.25 {
206 proc auth {code arg1 arg2} {
207 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
208 set ::authargs [list $arg1 $arg2]
209 return SQLITE_DENY
210 }
211 return SQLITE_OK
212 }
213 catchsql {DROP TABLE t1}
214} {1 {not authorized}}
215do_test auth-1.26 {
216 execsql {SELECT name FROM sqlite_temp_master}
217} {t1}
218do_test auth-1.27 {
219 proc auth {code arg1 arg2} {
220 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
221 set ::authargs [list $arg1 $arg2]
222 return SQLITE_IGNORE
223 }
224 return SQLITE_OK
225 }
226 catchsql {DROP TABLE t1}
227} {0 {}}
228do_test auth-1.28 {
229 execsql {SELECT name FROM sqlite_temp_master}
230} {t1}
231
232do_test auth-1.29 {
233 proc auth {code arg1 arg2} {
234 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
235 return SQLITE_DENY
236 }
237 return SQLITE_OK
238 }
239 catchsql {INSERT INTO t2 VALUES(1,2,3)}
240} {1 {not authorized}}
241do_test auth-1.30 {
242 execsql {SELECT * FROM t2}
243} {}
244do_test auth-1.31 {
245 proc auth {code arg1 arg2} {
246 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
247 return SQLITE_IGNORE
248 }
249 return SQLITE_OK
250 }
251 catchsql {INSERT INTO t2 VALUES(1,2,3)}
252} {0 {}}
253do_test auth-1.32 {
254 execsql {SELECT * FROM t2}
255} {}
256do_test auth-1.33 {
257 proc auth {code arg1 arg2} {
258 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
259 return SQLITE_IGNORE
260 }
261 return SQLITE_OK
262 }
263 catchsql {INSERT INTO t2 VALUES(1,2,3)}
264} {0 {}}
265do_test auth-1.34 {
266 execsql {SELECT * FROM t2}
267} {1 2 3}
268
269do_test auth-1.35 {
270 proc auth {code arg1 arg2} {
271 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
272 return SQLITE_DENY
273 }
274 return SQLITE_OK
275 }
276 catchsql {SELECT * FROM t2}
277} {1 {access to t2.b is prohibited}}
278do_test auth-1.36 {
279 proc auth {code arg1 arg2} {
280 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
281 return SQLITE_IGNORE
282 }
283 return SQLITE_OK
284 }
285 catchsql {SELECT * FROM t2}
286} {0 {1 {} 3}}
287do_test auth-1.37 {
288 proc auth {code arg1 arg2} {
289 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
290 return SQLITE_IGNORE
291 }
292 return SQLITE_OK
293 }
294 catchsql {SELECT * FROM t2 WHERE b=2}
295} {0 {}}
296do_test auth-1.38 {
297 proc auth {code arg1 arg2} {
298 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
299 return SQLITE_IGNORE
300 }
301 return SQLITE_OK
302 }
303 catchsql {SELECT * FROM t2 WHERE b=2}
304} {0 {{} 2 3}}
305do_test auth-1.39 {
306 proc auth {code arg1 arg2} {
307 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
308 return SQLITE_IGNORE
309 }
310 return SQLITE_OK
311 }
312 catchsql {SELECT * FROM t2 WHERE b IS NULL}
313} {0 {1 {} 3}}
314do_test auth-1.40 {
315 proc auth {code arg1 arg2} {
316 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
317 return SQLITE_DENY
318 }
319 return SQLITE_OK
320 }
321 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
322} {1 {access to t2.b is prohibited}}
323
324do_test auth-1.41 {
325 proc auth {code arg1 arg2} {
326 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
327 return SQLITE_DENY
328 }
329 return SQLITE_OK
330 }
331 catchsql {UPDATE t2 SET a=11}
332} {0 {}}
333do_test auth-1.42 {
334 execsql {SELECT * FROM t2}
335} {11 2 3}
336do_test auth-1.43 {
337 proc auth {code arg1 arg2} {
338 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
339 return SQLITE_DENY
340 }
341 return SQLITE_OK
342 }
343 catchsql {UPDATE t2 SET b=22, c=33}
344} {1 {not authorized}}
345do_test auth-1.44 {
346 execsql {SELECT * FROM t2}
347} {11 2 3}
348do_test auth-1.45 {
349 proc auth {code arg1 arg2} {
350 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
351 return SQLITE_IGNORE
352 }
353 return SQLITE_OK
354 }
355 catchsql {UPDATE t2 SET b=22, c=33}
356} {0 {}}
357do_test auth-1.46 {
358 execsql {SELECT * FROM t2}
359} {11 2 33}
360
361do_test auth-1.47 {
362 proc auth {code arg1 arg2} {
363 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
364 return SQLITE_DENY
365 }
366 return SQLITE_OK
367 }
368 catchsql {DELETE FROM t2 WHERE a=11}
369} {1 {not authorized}}
370do_test auth-1.48 {
371 execsql {SELECT * FROM t2}
372} {11 2 33}
373do_test auth-1.49 {
374 proc auth {code arg1 arg2} {
375 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
376 return SQLITE_IGNORE
377 }
378 return SQLITE_OK
379 }
380 catchsql {DELETE FROM t2 WHERE a=11}
381} {0 {}}
382do_test auth-1.50 {
383 execsql {SELECT * FROM t2}
384} {11 2 33}
385
386do_test auth-1.51 {
387 proc auth {code arg1 arg2} {
388 if {$code=="SQLITE_SELECT"} {
389 return SQLITE_DENY
390 }
391 return SQLITE_OK
392 }
393 catchsql {SELECT * FROM t2}
394} {1 {not authorized}}
395do_test auth-1.52 {
396 proc auth {code arg1 arg2} {
397 if {$code=="SQLITE_SELECT"} {
398 return SQLITE_IGNORE
399 }
400 return SQLITE_OK
401 }
402 catchsql {SELECT * FROM t2}
403} {0 {}}
404do_test auth-1.53 {
405 proc auth {code arg1 arg2} {
406 if {$code=="SQLITE_SELECT"} {
407 return SQLITE_OK
408 }
409 return SQLITE_OK
410 }
411 catchsql {SELECT * FROM t2}
412} {0 {11 2 33}}
413
414set f [open data1.txt w]
415puts $f "7:8:9"
416close $f
417do_test auth-1.54 {
418 proc auth {code arg1 arg2} {
419 if {$code=="SQLITE_COPY"} {
420 set ::authargs [list $arg1 $arg2]
421 return SQLITE_DENY
422 }
423 return SQLITE_OK
424 }
425 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'}
426} {1 {not authorized}}
427do_test auth-1.55 {
428 set ::authargs
429} {t2 data1.txt}
430do_test auth-1.56 {
431 execsql {SELECT * FROM t2}
432} {11 2 33}
433do_test auth-1.57 {
434 proc auth {code arg1 arg2} {
435 if {$code=="SQLITE_COPY"} {
436 set ::authargs [list $arg1 $arg2]
437 return SQLITE_IGNORE
438 }
439 return SQLITE_OK
440 }
441 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'}
442} {0 {}}
443do_test auth-1.58 {
444 set ::authargs
445} {t2 data1.txt}
446do_test auth-1.59 {
447 execsql {SELECT * FROM t2}
448} {11 2 33}
449do_test auth-1.60 {
450 proc auth {code arg1 arg2} {
451 if {$code=="SQLITE_COPY"} {
452 set ::authargs [list $arg1 $arg2]
453 return SQLITE_OK
454 }
455 return SQLITE_OK
456 }
457 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'}
458} {0 {}}
459do_test auth-1.61 {
460 set ::authargs
461} {t2 data1.txt}
462do_test auth-1.62 {
463 execsql {SELECT * FROM t2}
464} {11 2 33 7 8 9}
465
466do_test auth-1.63 {
467 proc auth {code arg1 arg2} {
468 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
469 return SQLITE_DENY
470 }
471 return SQLITE_OK
472 }
473 catchsql {DROP TABLE t2}
474} {1 {not authorized}}
475do_test auth-1.64 {
476 execsql {SELECT name FROM sqlite_master}
477} {t2}
478do_test auth-1.65 {
479 proc auth {code arg1 arg2} {
480 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
481 return SQLITE_DENY
482 }
483 return SQLITE_OK
484 }
485 catchsql {DROP TABLE t2}
486} {1 {not authorized}}
487do_test auth-1.66 {
488 execsql {SELECT name FROM sqlite_master}
489} {t2}
490do_test auth-1.67 {
491 proc auth {code arg1 arg2} {
492 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
493 return SQLITE_DENY
494 }
495 return SQLITE_OK
496 }
497 catchsql {DROP TABLE t1}
498} {1 {not authorized}}
499do_test auth-1.68 {
500 execsql {SELECT name FROM sqlite_temp_master}
501} {t1}
502do_test auth-1.69 {
503 proc auth {code arg1 arg2} {
504 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
505 return SQLITE_DENY
506 }
507 return SQLITE_OK
508 }
509 catchsql {DROP TABLE t1}
510} {1 {not authorized}}
511do_test auth-1.70 {
512 execsql {SELECT name FROM sqlite_temp_master}
513} {t1}
514
515do_test auth-1.71 {
516 proc auth {code arg1 arg2} {
517 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
518 return SQLITE_IGNORE
519 }
520 return SQLITE_OK
521 }
522 catchsql {DROP TABLE t2}
523} {0 {}}
524do_test auth-1.72 {
525 execsql {SELECT name FROM sqlite_master}
526} {t2}
527do_test auth-1.73 {
528 proc auth {code arg1 arg2} {
529 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
530 return SQLITE_IGNORE
531 }
532 return SQLITE_OK
533 }
534 catchsql {DROP TABLE t2}
535} {0 {}}
536do_test auth-1.74 {
537 execsql {SELECT name FROM sqlite_master}
538} {t2}
539do_test auth-1.75 {
540 proc auth {code arg1 arg2} {
541 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
542 return SQLITE_IGNORE
543 }
544 return SQLITE_OK
545 }
546 catchsql {DROP TABLE t1}
547} {0 {}}
548do_test auth-1.76 {
549 execsql {SELECT name FROM sqlite_temp_master}
550} {t1}
551do_test auth-1.77 {
552 proc auth {code arg1 arg2} {
553 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
554 return SQLITE_IGNORE
555 }
556 return SQLITE_OK
557 }
558 catchsql {DROP TABLE t1}
559} {0 {}}
560do_test auth-1.78 {
561 execsql {SELECT name FROM sqlite_temp_master}
562} {t1}
563
564do_test auth-1.79 {
565 proc auth {code arg1 arg2} {
566 if {$code=="SQLITE_CREATE_VIEW"} {
567 set ::authargs [list $arg1 $arg2]
568 return SQLITE_DENY
569 }
570 return SQLITE_OK
571 }
572 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
573} {1 {not authorized}}
574do_test auth-1.80 {
575 set ::authargs
576} {v1 {}}
577do_test auth-1.81 {
578 execsql {SELECT name FROM sqlite_master}
579} {t2}
580do_test auth-1.82 {
581 proc auth {code arg1 arg2} {
582 if {$code=="SQLITE_CREATE_VIEW"} {
583 set ::authargs [list $arg1 $arg2]
584 return SQLITE_IGNORE
585 }
586 return SQLITE_OK
587 }
588 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
589} {0 {}}
590do_test auth-1.83 {
591 set ::authargs
592} {v1 {}}
593do_test auth-1.84 {
594 execsql {SELECT name FROM sqlite_master}
595} {t2}
596
597do_test auth-1.85 {
598 proc auth {code arg1 arg2} {
599 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
600 set ::authargs [list $arg1 $arg2]
601 return SQLITE_DENY
602 }
603 return SQLITE_OK
604 }
605 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
606} {1 {not authorized}}
607do_test auth-1.86 {
608 set ::authargs
609} {v1 {}}
610do_test auth-1.87 {
611 execsql {SELECT name FROM sqlite_temp_master}
612} {t1}
613do_test auth-1.88 {
614 proc auth {code arg1 arg2} {
615 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
616 set ::authargs [list $arg1 $arg2]
617 return SQLITE_IGNORE
618 }
619 return SQLITE_OK
620 }
621 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
622} {0 {}}
623do_test auth-1.89 {
624 set ::authargs
625} {v1 {}}
626do_test auth-1.90 {
627 execsql {SELECT name FROM sqlite_temp_master}
628} {t1}
629
630do_test auth-1.91 {
631 proc auth {code arg1 arg2} {
632 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
633 return SQLITE_DENY
634 }
635 return SQLITE_OK
636 }
637 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
638} {1 {not authorized}}
639do_test auth-1.92 {
640 execsql {SELECT name FROM sqlite_master}
641} {t2}
642do_test auth-1.93 {
643 proc auth {code arg1 arg2} {
644 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
645 return SQLITE_IGNORE
646 }
647 return SQLITE_OK
648 }
649 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
650} {0 {}}
651do_test auth-1.94 {
652 execsql {SELECT name FROM sqlite_master}
653} {t2}
654
655do_test auth-1.95 {
656 proc auth {code arg1 arg2} {
657 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
658 return SQLITE_DENY
659 }
660 return SQLITE_OK
661 }
662 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
663} {1 {not authorized}}
664do_test auth-1.96 {
665 execsql {SELECT name FROM sqlite_temp_master}
666} {t1}
667do_test auth-1.97 {
668 proc auth {code arg1 arg2} {
669 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
670 return SQLITE_IGNORE
671 }
672 return SQLITE_OK
673 }
674 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
675} {0 {}}
676do_test auth-1.98 {
677 execsql {SELECT name FROM sqlite_temp_master}
678} {t1}
679
680do_test auth-1.99 {
681 proc auth {code arg1 arg2} {
682 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
683 return SQLITE_DENY
684 }
685 return SQLITE_OK
686 }
687 catchsql {
688 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
689 DROP VIEW v2
690 }
691} {1 {not authorized}}
692do_test auth-1.100 {
693 execsql {SELECT name FROM sqlite_master}
694} {t2 v2}
695do_test auth-1.101 {
696 proc auth {code arg1 arg2} {
697 if {$code=="SQLITE_DROP_VIEW"} {
698 set ::authargs [list $arg1 $arg2]
699 return SQLITE_DENY
700 }
701 return SQLITE_OK
702 }
703 catchsql {DROP VIEW v2}
704} {1 {not authorized}}
705do_test auth-1.102 {
706 set ::authargs
707} {v2 {}}
708do_test auth-1.103 {
709 execsql {SELECT name FROM sqlite_master}
710} {t2 v2}
711do_test auth-1.104 {
712 proc auth {code arg1 arg2} {
713 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
714 return SQLITE_IGNORE
715 }
716 return SQLITE_OK
717 }
718 catchsql {DROP VIEW v2}
719} {0 {}}
720do_test auth-1.105 {
721 execsql {SELECT name FROM sqlite_master}
722} {t2 v2}
723do_test auth-1.106 {
724 proc auth {code arg1 arg2} {
725 if {$code=="SQLITE_DROP_VIEW"} {
726 set ::authargs [list $arg1 $arg2]
727 return SQLITE_IGNORE
728 }
729 return SQLITE_OK
730 }
731 catchsql {DROP VIEW v2}
732} {0 {}}
733do_test auth-1.107 {
734 set ::authargs
735} {v2 {}}
736do_test auth-1.108 {
737 execsql {SELECT name FROM sqlite_master}
738} {t2 v2}
739do_test auth-1.109 {
740 proc auth {code arg1 arg2} {
741 if {$code=="SQLITE_DROP_VIEW"} {
742 set ::authargs [list $arg1 $arg2]
743 return SQLITE_OK
744 }
745 return SQLITE_OK
746 }
747 catchsql {DROP VIEW v2}
748} {0 {}}
749do_test auth-1.110 {
750 set ::authargs
751} {v2 {}}
752do_test auth-1.111 {
753 execsql {SELECT name FROM sqlite_master}
754} {t2}
755
756
757do_test auth-1.112 {
758 proc auth {code arg1 arg2} {
759 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
760 return SQLITE_DENY
761 }
762 return SQLITE_OK
763 }
764 catchsql {
765 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
766 DROP VIEW v1
767 }
768} {1 {not authorized}}
769do_test auth-1.113 {
770 execsql {SELECT name FROM sqlite_temp_master}
771} {t1 v1}
772do_test auth-1.114 {
773 proc auth {code arg1 arg2} {
774 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
775 set ::authargs [list $arg1 $arg2]
776 return SQLITE_DENY
777 }
778 return SQLITE_OK
779 }
780 catchsql {DROP VIEW v1}
781} {1 {not authorized}}
782do_test auth-1.115 {
783 set ::authargs
784} {v1 {}}
785do_test auth-1.116 {
786 execsql {SELECT name FROM sqlite_temp_master}
787} {t1 v1}
788do_test auth-1.117 {
789 proc auth {code arg1 arg2} {
790 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
791 return SQLITE_IGNORE
792 }
793 return SQLITE_OK
794 }
795 catchsql {DROP VIEW v1}
796} {0 {}}
797do_test auth-1.118 {
798 execsql {SELECT name FROM sqlite_temp_master}
799} {t1 v1}
800do_test auth-1.119 {
801 proc auth {code arg1 arg2} {
802 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
803 set ::authargs [list $arg1 $arg2]
804 return SQLITE_IGNORE
805 }
806 return SQLITE_OK
807 }
808 catchsql {DROP VIEW v1}
809} {0 {}}
810do_test auth-1.120 {
811 set ::authargs
812} {v1 {}}
813do_test auth-1.121 {
814 execsql {SELECT name FROM sqlite_temp_master}
815} {t1 v1}
816do_test auth-1.122 {
817 proc auth {code arg1 arg2} {
818 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
819 set ::authargs [list $arg1 $arg2]
820 return SQLITE_OK
821 }
822 return SQLITE_OK
823 }
824 catchsql {DROP VIEW v1}
825} {0 {}}
826do_test auth-1.123 {
827 set ::authargs
828} {v1 {}}
829do_test auth-1.124 {
830 execsql {SELECT name FROM sqlite_temp_master}
831} {t1}
832
833do_test auth-1.125 {
834 proc auth {code arg1 arg2} {
835 if {$code=="SQLITE_CREATE_TRIGGER"} {
836 set ::authargs [list $arg1 $arg2]
837 return SQLITE_DENY
838 }
839 return SQLITE_OK
840 }
841 catchsql {
842 CREATE TRIGGER r2 DELETE on t2 BEGIN
843 SELECT NULL;
844 END;
845 }
846} {1 {not authorized}}
847do_test auth-1.126 {
848 set ::authargs
849} {r2 t2}
850do_test auth-1.127 {
851 execsql {SELECT name FROM sqlite_master}
852} {t2}
853do_test auth-1.128 {
854 proc auth {code arg1 arg2} {
855 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
856 return SQLITE_DENY
857 }
858 return SQLITE_OK
859 }
860 catchsql {
861 CREATE TRIGGER r2 DELETE on t2 BEGIN
862 SELECT NULL;
863 END;
864 }
865} {1 {not authorized}}
866do_test auth-1.129 {
867 execsql {SELECT name FROM sqlite_master}
868} {t2}
869do_test auth-1.130 {
870 proc auth {code arg1 arg2} {
871 if {$code=="SQLITE_CREATE_TRIGGER"} {
872 set ::authargs [list $arg1 $arg2]
873 return SQLITE_IGNORE
874 }
875 return SQLITE_OK
876 }
877 catchsql {
878 CREATE TRIGGER r2 DELETE on t2 BEGIN
879 SELECT NULL;
880 END;
881 }
882} {0 {}}
883do_test auth-1.131 {
884 set ::authargs
885} {r2 t2}
886do_test auth-1.132 {
887 execsql {SELECT name FROM sqlite_master}
888} {t2}
889do_test auth-1.133 {
890 proc auth {code arg1 arg2} {
891 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
892 return SQLITE_IGNORE
893 }
894 return SQLITE_OK
895 }
896 catchsql {
897 CREATE TRIGGER r2 DELETE on t2 BEGIN
898 SELECT NULL;
899 END;
900 }
901} {0 {}}
902do_test auth-1.134 {
903 execsql {SELECT name FROM sqlite_master}
904} {t2}
905do_test auth-1.135 {
906 proc auth {code arg1 arg2} {
907 if {$code=="SQLITE_CREATE_TRIGGER"} {
908 set ::authargs [list $arg1 $arg2]
909 return SQLITE_OK
910 }
911 return SQLITE_OK
912 }
913 catchsql {
914 CREATE TRIGGER r2 DELETE on t2 BEGIN
915 SELECT NULL;
916 END;
917 }
918} {0 {}}
919do_test auth-1.136 {
920 set ::authargs
921} {r2 t2}
922do_test auth-1.137 {
923 execsql {SELECT name FROM sqlite_master}
924} {t2 r2}
925
926do_test auth-1.138 {
927 proc auth {code arg1 arg2} {
928 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
929 set ::authargs [list $arg1 $arg2]
930 return SQLITE_DENY
931 }
932 return SQLITE_OK
933 }
934 catchsql {
935 CREATE TRIGGER r1 DELETE on t1 BEGIN
936 SELECT NULL;
937 END;
938 }
939} {1 {not authorized}}
940do_test auth-1.139 {
941 set ::authargs
942} {r1 t1}
943do_test auth-1.140 {
944 execsql {SELECT name FROM sqlite_temp_master}
945} {t1}
946do_test auth-1.141 {
947 proc auth {code arg1 arg2} {
948 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
949 return SQLITE_DENY
950 }
951 return SQLITE_OK
952 }
953 catchsql {
954 CREATE TRIGGER r1 DELETE on t1 BEGIN
955 SELECT NULL;
956 END;
957 }
958} {1 {not authorized}}
959do_test auth-1.142 {
960 execsql {SELECT name FROM sqlite_temp_master}
961} {t1}
962do_test auth-1.143 {
963 proc auth {code arg1 arg2} {
964 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
965 set ::authargs [list $arg1 $arg2]
966 return SQLITE_IGNORE
967 }
968 return SQLITE_OK
969 }
970 catchsql {
971 CREATE TRIGGER r1 DELETE on t1 BEGIN
972 SELECT NULL;
973 END;
974 }
975} {0 {}}
976do_test auth-1.144 {
977 set ::authargs
978} {r1 t1}
979do_test auth-1.145 {
980 execsql {SELECT name FROM sqlite_temp_master}
981} {t1}
982do_test auth-1.146 {
983 proc auth {code arg1 arg2} {
984 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
985 return SQLITE_IGNORE
986 }
987 return SQLITE_OK
988 }
989 catchsql {
990 CREATE TRIGGER r1 DELETE on t1 BEGIN
991 SELECT NULL;
992 END;
993 }
994} {0 {}}
995do_test auth-1.147 {
996 execsql {SELECT name FROM sqlite_temp_master}
997} {t1}
998do_test auth-1.148 {
999 proc auth {code arg1 arg2} {
1000 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
1001 set ::authargs [list $arg1 $arg2]
1002 return SQLITE_OK
1003 }
1004 return SQLITE_OK
1005 }
1006 catchsql {
1007 CREATE TRIGGER r1 DELETE on t1 BEGIN
1008 SELECT NULL;
1009 END;
1010 }
1011} {0 {}}
1012do_test auth-1.149 {
1013 set ::authargs
1014} {r1 t1}
1015do_test auth-1.150 {
1016 execsql {SELECT name FROM sqlite_temp_master}
1017} {t1 r1}
1018
1019do_test auth-1.151 {
1020 proc auth {code arg1 arg2} {
1021 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1022 return SQLITE_DENY
1023 }
1024 return SQLITE_OK
1025 }
1026 catchsql {DROP TRIGGER r2}
1027} {1 {not authorized}}
1028do_test auth-1.152 {
1029 execsql {SELECT name FROM sqlite_master}
1030} {t2 r2}
1031do_test auth-1.153 {
1032 proc auth {code arg1 arg2} {
1033 if {$code=="SQLITE_DROP_TRIGGER"} {
1034 set ::authargs [list $arg1 $arg2]
1035 return SQLITE_DENY
1036 }
1037 return SQLITE_OK
1038 }
1039 catchsql {DROP TRIGGER r2}
1040} {1 {not authorized}}
1041do_test auth-1.154 {
1042 set ::authargs
1043} {r2 t2}
1044do_test auth-1.155 {
1045 execsql {SELECT name FROM sqlite_master}
1046} {t2 r2}
1047do_test auth-1.156 {
1048 proc auth {code arg1 arg2} {
1049 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1050 return SQLITE_IGNORE
1051 }
1052 return SQLITE_OK
1053 }
1054 catchsql {DROP TRIGGER r2}
1055} {0 {}}
1056do_test auth-1.157 {
1057 execsql {SELECT name FROM sqlite_master}
1058} {t2 r2}
1059do_test auth-1.158 {
1060 proc auth {code arg1 arg2} {
1061 if {$code=="SQLITE_DROP_TRIGGER"} {
1062 set ::authargs [list $arg1 $arg2]
1063 return SQLITE_IGNORE
1064 }
1065 return SQLITE_OK
1066 }
1067 catchsql {DROP TRIGGER r2}
1068} {0 {}}
1069do_test auth-1.159 {
1070 set ::authargs
1071} {r2 t2}
1072do_test auth-1.160 {
1073 execsql {SELECT name FROM sqlite_master}
1074} {t2 r2}
1075do_test auth-1.161 {
1076 proc auth {code arg1 arg2} {
1077 if {$code=="SQLITE_DROP_TRIGGER"} {
1078 set ::authargs [list $arg1 $arg2]
1079 return SQLITE_OK
1080 }
1081 return SQLITE_OK
1082 }
1083 catchsql {DROP TRIGGER r2}
1084} {0 {}}
1085do_test auth-1.162 {
1086 set ::authargs
1087} {r2 t2}
1088do_test auth-1.163 {
1089 execsql {SELECT name FROM sqlite_master}
1090} {t2}
1091
1092do_test auth-1.164 {
1093 proc auth {code arg1 arg2} {
1094 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1095 return SQLITE_DENY
1096 }
1097 return SQLITE_OK
1098 }
1099 catchsql {DROP TRIGGER r1}
1100} {1 {not authorized}}
1101do_test auth-1.165 {
1102 execsql {SELECT name FROM sqlite_temp_master}
1103} {t1 r1}
1104do_test auth-1.166 {
1105 proc auth {code arg1 arg2} {
1106 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
1107 set ::authargs [list $arg1 $arg2]
1108 return SQLITE_DENY
1109 }
1110 return SQLITE_OK
1111 }
1112 catchsql {DROP TRIGGER r1}
1113} {1 {not authorized}}
1114do_test auth-1.167 {
1115 set ::authargs
1116} {r1 t1}
1117do_test auth-1.168 {
1118 execsql {SELECT name FROM sqlite_temp_master}
1119} {t1 r1}
1120do_test auth-1.169 {
1121 proc auth {code arg1 arg2} {
1122 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1123 return SQLITE_IGNORE
1124 }
1125 return SQLITE_OK
1126 }
1127 catchsql {DROP TRIGGER r1}
1128} {0 {}}
1129do_test auth-1.170 {
1130 execsql {SELECT name FROM sqlite_temp_master}
1131} {t1 r1}
1132do_test auth-1.171 {
1133 proc auth {code arg1 arg2} {
1134 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
1135 set ::authargs [list $arg1 $arg2]
1136 return SQLITE_IGNORE
1137 }
1138 return SQLITE_OK
1139 }
1140 catchsql {DROP TRIGGER r1}
1141} {0 {}}
1142do_test auth-1.172 {
1143 set ::authargs
1144} {r1 t1}
1145do_test auth-1.173 {
1146 execsql {SELECT name FROM sqlite_temp_master}
1147} {t1 r1}
1148do_test auth-1.174 {
1149 proc auth {code arg1 arg2} {
1150 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
1151 set ::authargs [list $arg1 $arg2]
1152 return SQLITE_OK
1153 }
1154 return SQLITE_OK
1155 }
1156 catchsql {DROP TRIGGER r1}
1157} {0 {}}
1158do_test auth-1.175 {
1159 set ::authargs
1160} {r1 t1}
1161do_test auth-1.176 {
1162 execsql {SELECT name FROM sqlite_temp_master}
1163} {t1}
1164
1165do_test auth-1.177 {
1166 proc auth {code arg1 arg2} {
1167 if {$code=="SQLITE_CREATE_INDEX"} {
1168 set ::authargs [list $arg1 $arg2]
1169 return SQLITE_DENY
1170 }
1171 return SQLITE_OK
1172 }
1173 catchsql {CREATE INDEX i2 ON t2(a)}
1174} {1 {not authorized}}
1175do_test auth-1.178 {
1176 set ::authargs
1177} {i2 t2}
1178do_test auth-1.179 {
1179 execsql {SELECT name FROM sqlite_master}
1180} {t2}
1181do_test auth-1.180 {
1182 proc auth {code arg1 arg2} {
1183 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1184 return SQLITE_DENY
1185 }
1186 return SQLITE_OK
1187 }
1188 catchsql {CREATE INDEX i2 ON t2(a)}
1189} {1 {not authorized}}
1190do_test auth-1.181 {
1191 execsql {SELECT name FROM sqlite_master}
1192} {t2}
1193do_test auth-1.182 {
1194 proc auth {code arg1 arg2} {
1195 if {$code=="SQLITE_CREATE_INDEX"} {
1196 set ::authargs [list $arg1 $arg2]
1197 return SQLITE_IGNORE
1198 }
1199 return SQLITE_OK
1200 }
1201 catchsql {CREATE INDEX i2 ON t2(b)}
1202} {0 {}}
1203do_test auth-1.183 {
1204 set ::authargs
1205} {i2 t2}
1206do_test auth-1.184 {
1207 execsql {SELECT name FROM sqlite_master}
1208} {t2}
1209do_test auth-1.185 {
1210 proc auth {code arg1 arg2} {
1211 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1212 return SQLITE_IGNORE
1213 }
1214 return SQLITE_OK
1215 }
1216 catchsql {CREATE INDEX i2 ON t2(b)}
1217} {0 {}}
1218do_test auth-1.186 {
1219 execsql {SELECT name FROM sqlite_master}
1220} {t2}
1221do_test auth-1.187 {
1222 proc auth {code arg1 arg2} {
1223 if {$code=="SQLITE_CREATE_INDEX"} {
1224 set ::authargs [list $arg1 $arg2]
1225 return SQLITE_OK
1226 }
1227 return SQLITE_OK
1228 }
1229 catchsql {CREATE INDEX i2 ON t2(a)}
1230} {0 {}}
1231do_test auth-1.188 {
1232 set ::authargs
1233} {i2 t2}
1234do_test auth-1.189 {
1235 execsql {SELECT name FROM sqlite_master}
1236} {t2 i2}
1237
1238do_test auth-1.190 {
1239 proc auth {code arg1 arg2} {
1240 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
1241 set ::authargs [list $arg1 $arg2]
1242 return SQLITE_DENY
1243 }
1244 return SQLITE_OK
1245 }
1246 catchsql {CREATE INDEX i1 ON t1(a)}
1247} {1 {not authorized}}
1248do_test auth-1.191 {
1249 set ::authargs
1250} {i1 t1}
1251do_test auth-1.192 {
1252 execsql {SELECT name FROM sqlite_temp_master}
1253} {t1}
1254do_test auth-1.193 {
1255 proc auth {code arg1 arg2} {
1256 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1257 return SQLITE_DENY
1258 }
1259 return SQLITE_OK
1260 }
1261 catchsql {CREATE INDEX i1 ON t1(b)}
1262} {1 {not authorized}}
1263do_test auth-1.194 {
1264 execsql {SELECT name FROM sqlite_temp_master}
1265} {t1}
1266do_test auth-1.195 {
1267 proc auth {code arg1 arg2} {
1268 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
1269 set ::authargs [list $arg1 $arg2]
1270 return SQLITE_IGNORE
1271 }
1272 return SQLITE_OK
1273 }
1274 catchsql {CREATE INDEX i1 ON t1(b)}
1275} {0 {}}
1276do_test auth-1.196 {
1277 set ::authargs
1278} {i1 t1}
1279do_test auth-1.197 {
1280 execsql {SELECT name FROM sqlite_temp_master}
1281} {t1}
1282do_test auth-1.198 {
1283 proc auth {code arg1 arg2} {
1284 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1285 return SQLITE_IGNORE
1286 }
1287 return SQLITE_OK
1288 }
1289 catchsql {CREATE INDEX i1 ON t1(c)}
1290} {0 {}}
1291do_test auth-1.199 {
1292 execsql {SELECT name FROM sqlite_temp_master}
1293} {t1}
1294do_test auth-1.200 {
1295 proc auth {code arg1 arg2} {
1296 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
1297 set ::authargs [list $arg1 $arg2]
1298 return SQLITE_OK
1299 }
1300 return SQLITE_OK
1301 }
1302 catchsql {CREATE INDEX i1 ON t1(a)}
1303} {0 {}}
1304do_test auth-1.201 {
1305 set ::authargs
1306} {i1 t1}
1307do_test auth-1.202 {
1308 execsql {SELECT name FROM sqlite_temp_master}
1309} {t1 i1}
1310
1311do_test auth-1.203 {
1312 proc auth {code arg1 arg2} {
1313 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1314 return SQLITE_DENY
1315 }
1316 return SQLITE_OK
1317 }
1318 catchsql {DROP INDEX i2}
1319} {1 {not authorized}}
1320do_test auth-1.204 {
1321 execsql {SELECT name FROM sqlite_master}
1322} {t2 i2}
1323do_test auth-1.205 {
1324 proc auth {code arg1 arg2} {
1325 if {$code=="SQLITE_DROP_INDEX"} {
1326 set ::authargs [list $arg1 $arg2]
1327 return SQLITE_DENY
1328 }
1329 return SQLITE_OK
1330 }
1331 catchsql {DROP INDEX i2}
1332} {1 {not authorized}}
1333do_test auth-1.206 {
1334 set ::authargs
1335} {i2 t2}
1336do_test auth-1.207 {
1337 execsql {SELECT name FROM sqlite_master}
1338} {t2 i2}
1339do_test auth-1.208 {
1340 proc auth {code arg1 arg2} {
1341 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1342 return SQLITE_IGNORE
1343 }
1344 return SQLITE_OK
1345 }
1346 catchsql {DROP INDEX i2}
1347} {0 {}}
1348do_test auth-1.209 {
1349 execsql {SELECT name FROM sqlite_master}
1350} {t2 i2}
1351do_test auth-1.210 {
1352 proc auth {code arg1 arg2} {
1353 if {$code=="SQLITE_DROP_INDEX"} {
1354 set ::authargs [list $arg1 $arg2]
1355 return SQLITE_IGNORE
1356 }
1357 return SQLITE_OK
1358 }
1359 catchsql {DROP INDEX i2}
1360} {0 {}}
1361do_test auth-1.211 {
1362 set ::authargs
1363} {i2 t2}
1364do_test auth-1.212 {
1365 execsql {SELECT name FROM sqlite_master}
1366} {t2 i2}
1367do_test auth-1.213 {
1368 proc auth {code arg1 arg2} {
1369 if {$code=="SQLITE_DROP_INDEX"} {
1370 set ::authargs [list $arg1 $arg2]
1371 return SQLITE_OK
1372 }
1373 return SQLITE_OK
1374 }
1375 catchsql {DROP INDEX i2}
1376} {0 {}}
1377do_test auth-1.214 {
1378 set ::authargs
1379} {i2 t2}
1380do_test auth-1.215 {
1381 execsql {SELECT name FROM sqlite_master}
1382} {t2}
1383
1384do_test auth-1.216 {
1385 proc auth {code arg1 arg2} {
1386 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1387 return SQLITE_DENY
1388 }
1389 return SQLITE_OK
1390 }
1391 catchsql {DROP INDEX i1}
1392} {1 {not authorized}}
1393do_test auth-1.217 {
1394 execsql {SELECT name FROM sqlite_temp_master}
1395} {t1 i1}
1396do_test auth-1.218 {
1397 proc auth {code arg1 arg2} {
1398 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
1399 set ::authargs [list $arg1 $arg2]
1400 return SQLITE_DENY
1401 }
1402 return SQLITE_OK
1403 }
1404 catchsql {DROP INDEX i1}
1405} {1 {not authorized}}
1406do_test auth-1.219 {
1407 set ::authargs
1408} {i1 t1}
1409do_test auth-1.220 {
1410 execsql {SELECT name FROM sqlite_temp_master}
1411} {t1 i1}
1412do_test auth-1.221 {
1413 proc auth {code arg1 arg2} {
1414 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1415 return SQLITE_IGNORE
1416 }
1417 return SQLITE_OK
1418 }
1419 catchsql {DROP INDEX i1}
1420} {0 {}}
1421do_test auth-1.222 {
1422 execsql {SELECT name FROM sqlite_temp_master}
1423} {t1 i1}
1424do_test auth-1.223 {
1425 proc auth {code arg1 arg2} {
1426 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
1427 set ::authargs [list $arg1 $arg2]
1428 return SQLITE_IGNORE
1429 }
1430 return SQLITE_OK
1431 }
1432 catchsql {DROP INDEX i1}
1433} {0 {}}
1434do_test auth-1.224 {
1435 set ::authargs
1436} {i1 t1}
1437do_test auth-1.225 {
1438 execsql {SELECT name FROM sqlite_temp_master}
1439} {t1 i1}
1440do_test auth-1.226 {
1441 proc auth {code arg1 arg2} {
1442 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
1443 set ::authargs [list $arg1 $arg2]
1444 return SQLITE_OK
1445 }
1446 return SQLITE_OK
1447 }
1448 catchsql {DROP INDEX i1}
1449} {0 {}}
1450do_test auth-1.227 {
1451 set ::authargs
1452} {i1 t1}
1453do_test auth-1.228 {
1454 execsql {SELECT name FROM sqlite_temp_master}
1455} {t1}
1456
1457do_test auth-1.229 {
1458 proc auth {code arg1 arg2} {
1459 if {$code=="SQLITE_PRAGMA"} {
1460 set ::authargs [list $arg1 $arg2]
1461 return SQLITE_DENY
1462 }
1463 return SQLITE_OK
1464 }
1465 catchsql {PRAGMA full_column_names=on}
1466} {1 {not authorized}}
1467do_test auth-1.230 {
1468 set ::authargs
1469} {full_column_names on}
1470do_test auth-1.231 {
1471 execsql2 {SELECT a FROM t2}
1472} {a 11 a 7}
1473do_test auth-1.232 {
1474 proc auth {code arg1 arg2} {
1475 if {$code=="SQLITE_PRAGMA"} {
1476 set ::authargs [list $arg1 $arg2]
1477 return SQLITE_IGNORE
1478 }
1479 return SQLITE_OK
1480 }
1481 catchsql {PRAGMA full_column_names=on}
1482} {0 {}}
1483do_test auth-1.233 {
1484 set ::authargs
1485} {full_column_names on}
1486do_test auth-1.234 {
1487 execsql2 {SELECT a FROM t2}
1488} {a 11 a 7}
1489do_test auth-1.235 {
1490 proc auth {code arg1 arg2} {
1491 if {$code=="SQLITE_PRAGMA"} {
1492 set ::authargs [list $arg1 $arg2]
1493 return SQLITE_OK
1494 }
1495 return SQLITE_OK
1496 }
1497 catchsql {PRAGMA full_column_names=on}
1498} {0 {}}
1499do_test auth-1.236 {
1500 execsql2 {SELECT a FROM t2}
1501} {t2.a 11 t2.a 7}
1502do_test auth-1.237 {
1503 proc auth {code arg1 arg2} {
1504 if {$code=="SQLITE_PRAGMA"} {
1505 set ::authargs [list $arg1 $arg2]
1506 return SQLITE_OK
1507 }
1508 return SQLITE_OK
1509 }
1510 catchsql {PRAGMA full_column_names=OFF}
1511} {0 {}}
1512do_test auth-1.238 {
1513 set ::authargs
1514} {full_column_names OFF}
1515do_test auth-1.239 {
1516 execsql2 {SELECT a FROM t2}
1517} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001518
drh2c3831c2003-01-14 13:48:20 +00001519do_test auth-1.240 {
1520 proc auth {code arg1 arg2} {
1521 if {$code=="SQLITE_TRANSACTION"} {
1522 set ::authargs [list $arg1 $arg2]
1523 return SQLITE_DENY
1524 }
1525 return SQLITE_OK
1526 }
1527 catchsql {BEGIN}
1528} {1 {not authorized}}
1529do_test auth-1.241 {
1530 set ::authargs
1531} {BEGIN {}}
1532do_test auth-1.242 {
1533 proc auth {code arg1 arg2} {
1534 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
1535 set ::authargs [list $arg1 $arg2]
1536 return SQLITE_DENY
1537 }
1538 return SQLITE_OK
1539 }
1540 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1541} {1 {not authorized}}
1542do_test auth-1.243 {
1543 set ::authargs
1544} {COMMIT {}}
1545do_test auth-1.244 {
1546 execsql {SELECT * FROM t2}
1547} {11 2 33 7 8 9 44 55 66}
1548do_test auth-1.245 {
1549 catchsql {ROLLBACK}
1550} {1 {not authorized}}
1551do_test auth-1.246 {
1552 set ::authargs
1553} {ROLLBACK {}}
1554do_test auth-1.247 {
1555 catchsql {END TRANSACTION}
1556} {1 {not authorized}}
1557do_test auth-1.248 {
1558 set ::authargs
1559} {COMMIT {}}
1560do_test auth-1.249 {
1561 sqlite_set_authorizer $::DB {}
1562 catchsql {ROLLBACK}
1563} {0 {}}
1564do_test auth-1.250 {
1565 execsql {SELECT * FROM t2}
1566} {11 2 33 7 8 9}
1567
1568do_test auth-2.1 {
1569 proc auth {code arg1 arg2} {
1570 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1571 return SQLITE_DENY
1572 }
1573 return SQLITE_OK
1574 }
1575 sqlite_set_authorizer $::DB ::auth
1576 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1577 catchsql {SELECT * FROM t3}
1578} {1 {access to t3.x is prohibited}}
1579do_test auth-2.1 {
1580 catchsql {SELECT y,z FROM t3}
1581} {0 {}}
1582do_test auth-2.2 {
1583 catchsql {SELECT ROWID,y,z FROM t3}
1584} {1 {access to t3.x is prohibited}}
1585do_test auth-2.3 {
1586 catchsql {SELECT OID,y,z FROM t3}
1587} {1 {access to t3.x is prohibited}}
1588do_test auth-2.4 {
1589 proc auth {code arg1 arg2} {
1590 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1591 return SQLITE_IGNORE
1592 }
1593 return SQLITE_OK
1594 }
1595 execsql {INSERT INTO t3 VALUES(44,55,66)}
1596 catchsql {SELECT * FROM t3}
1597} {0 {{} 55 66}}
1598do_test auth-2.5 {
1599 catchsql {SELECT rowid,y,z FROM t3}
1600} {0 {{} 55 66}}
1601do_test auth-2.6 {
1602 proc auth {code arg1 arg2} {
1603 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1604 return SQLITE_IGNORE
1605 }
1606 return SQLITE_OK
1607 }
1608 catchsql {SELECT * FROM t3}
1609} {0 {44 55 66}}
1610do_test auth-2.7 {
1611 catchsql {SELECT ROWID,y,z FROM t3}
1612} {0 {44 55 66}}
1613do_test auth-2.8 {
1614 proc auth {code arg1 arg2} {
1615 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1616 return SQLITE_IGNORE
1617 }
1618 return SQLITE_OK
1619 }
1620 catchsql {SELECT ROWID,b,c FROM t2}
1621} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001622do_test auth-2.9.1 {
drh2c3831c2003-01-14 13:48:20 +00001623 proc auth {code arg1 arg2} {
1624 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1625 return bogus
1626 }
1627 return SQLITE_OK
1628 }
1629 catchsql {SELECT ROWID,b,c FROM t2}
1630} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001631do_test auth-2.9.2 {
1632 db errorcode
1633} {21}
drh2c3831c2003-01-14 13:48:20 +00001634do_test auth-2.10 {
1635 proc auth {code arg1 arg2} {
1636 if {$code=="SQLITE_SELECT"} {
1637 return bogus
1638 }
1639 return SQLITE_OK
1640 }
1641 catchsql {SELECT ROWID,b,c FROM t2}
1642} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
1643do_test auth-2.11 {
1644 proc auth {code arg1 arg2} {
1645 if {$code=="SQLITE_READ" && $arg2=="a"} {
1646 return SQLITE_IGNORE
1647 }
1648 return SQLITE_OK
1649 }
1650 catchsql {SELECT * FROM t2, t3}
1651} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
1652do_test auth-2.11 {
1653 proc auth {code arg1 arg2} {
1654 if {$code=="SQLITE_READ" && $arg2=="x"} {
1655 return SQLITE_IGNORE
1656 }
1657 return SQLITE_OK
1658 }
1659 catchsql {SELECT * FROM t2, t3}
1660} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001661
drh027850b2003-04-16 20:24:52 +00001662# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1663#
1664do_test auth-3.1 {
1665 proc auth {code arg1 arg2} {
1666 return SQLITE_OK
1667 }
1668 execsql {
1669 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1670 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1671 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1672 END;
1673 UPDATE t2 SET a=a+1;
1674 SELECT * FROM tx;
1675 }
1676} {11 12 2 2 33 33 7 8 8 8 9 9}
1677do_test auth-3.2 {
1678 proc auth {code arg1 arg2} {
1679 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1680 return SQLITE_IGNORE
1681 }
1682 return SQLITE_OK
1683 }
1684 execsql {
1685 DELETE FROM tx;
1686 UPDATE t2 SET a=a+100;
1687 SELECT * FROM tx;
1688 }
1689} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1690
drh1962bda2003-01-12 19:33:52 +00001691} ;# End of the "if( db command exists )"
1692
1693finish_test