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