1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-05 15:55:57 +03:00

Authorization callback on the ALTER TABLE ADD COLUMN command.

Ticket #1479. (CVS 3043)

FossilOrigin-Name: 461f586973431438bb074aa3077f705e9b1b80da
This commit is contained in:
drh
2006-01-31 14:28:44 +00:00
parent 77e96d142a
commit 81f2ccdce9
4 changed files with 84 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
C Remove\ssupport\sfor\sthe\snon-standard\sON\sCONFLICT\sclause\son\sCREATE\sINDEX.\nTicket\s#1486.\s\sThe\sON\sCONFLICT\sclause\shas\snever\sworked\son\sCREATE\sINDEX\sso\nremoving\sit\sshould\snot\sbreak\sanything.\s(CVS\s3042) C Authorization\scallback\son\sthe\sALTER\sTABLE\sADD\sCOLUMN\scommand.\nTicket\s#1479.\s(CVS\s3043)
D 2006-01-30T23:04:51 D 2006-01-31T14:28:45
F Makefile.in e936c6fc3134838318aa0335a85041e6da31f6ee F Makefile.in e936c6fc3134838318aa0335a85041e6da31f6ee
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -30,7 +30,7 @@ F sqlite.pc.in 30552343140c53304c2a658c080fbe810cd09ca2
F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
F sqlite3.def f756049b1bf3e8442baf6862db393ca423225262 F sqlite3.def f756049b1bf3e8442baf6862db393ca423225262
F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
F src/alter.c 90b779cf00489535cab6490df6dc050f40e4e874 F src/alter.c faf98b04050d674d06df21bcf23ded5bbff7b5b7
F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a
F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0 F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0
F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2 F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2
@@ -110,7 +110,7 @@ F test/attach.test 036315207c477211470168bf121b1c493f781515
F test/attach2.test 0e6a7c54343c85dd877a1e86073a05176043ed40 F test/attach2.test 0e6a7c54343c85dd877a1e86073a05176043ed40
F test/attach3.test 63013383adc4380af69779f34f4af19bd49f7cbe F test/attach3.test 63013383adc4380af69779f34f4af19bd49f7cbe
F test/attachmalloc.test cdb26c42850f04698377ccec05f5fa89d987837c F test/attachmalloc.test cdb26c42850f04698377ccec05f5fa89d987837c
F test/auth.test 0e8d4fd60bec027adb0abf7874051f8b90d9c6b6 F test/auth.test 9776ab43de94801f0fa6787b3f3e803686ffa0ff
F test/autoinc.test 60005a676e3e4e17dfa9dbd08aa0b76587ff97e3 F test/autoinc.test 60005a676e3e4e17dfa9dbd08aa0b76587ff97e3
F test/autovacuum.test 0dd22b0e1fe2013abe03e2ef5000bb3b9c1b6666 F test/autovacuum.test 0dd22b0e1fe2013abe03e2ef5000bb3b9c1b6666
F test/autovacuum_crash.test 05a63b8805b20cfba7ace82856ce4ccdda075a31 F test/autovacuum_crash.test 05a63b8805b20cfba7ace82856ce4ccdda075a31
@@ -349,7 +349,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P 34dff874a2bf8331be87310809ba11d813fadb7d P 669bcf5ab694359485ab30913d8d9e4926f41789
R 84abbe4f77fbc0f3fa4d51788062882f R 4b5ade492de8c6b62c2b554228989dab
U drh U drh
Z 6f1708d289c33d1a9960e6ad7dfc0be1 Z 0fb072b4d2cf3aad6fe401cc0c34a782

View File

@@ -1 +1 @@
669bcf5ab694359485ab30913d8d9e4926f41789 461f586973431438bb074aa3077f705e9b1b80da

View File

@@ -12,7 +12,7 @@
** This file contains C code routines that used to generate VDBE code ** This file contains C code routines that used to generate VDBE code
** that implements the ALTER TABLE command. ** that implements the ALTER TABLE command.
** **
** $Id: alter.c,v 1.18 2006/01/18 16:51:35 danielk1977 Exp $ ** $Id: alter.c,v 1.19 2006/01/31 14:28:45 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -407,6 +407,13 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
pTab = sqlite3FindTable(pParse->db, zTab, zDb); pTab = sqlite3FindTable(pParse->db, zTab, zDb);
assert( pTab ); assert( pTab );
#ifndef SQLITE_OMIT_AUTHORIZATION
/* Invoke the authorization callback. */
if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
return;
}
#endif
/* If the default value for the new column was specified with a /* If the default value for the new column was specified with a
** literal NULL, then set pDflt to 0. This simplifies checking ** literal NULL, then set pDflt to 0. This simplifies checking
** for an SQL NULL default below. ** for an SQL NULL default below.

View File

@@ -12,7 +12,7 @@
# focus of this script is testing the ATTACH and DETACH commands # focus of this script is testing the ATTACH and DETACH commands
# and related functionality. # and related functionality.
# #
# $Id: auth.test,v 1.33 2006/01/17 09:35:02 danielk1977 Exp $ # $Id: auth.test,v 1.34 2006/01/31 14:28:46 drh Exp $
# #
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
@@ -1995,6 +1995,73 @@ ifcapable analyze {
} 2 } 2
} ;# ifcapable analyze } ;# ifcapable analyze
# Authorization for ALTER TABLE ADD COLUMN.
# These tests are omitted if the library
# was built without ALTER TABLE support.
ifcapable {altertable} {
do_test auth-1.300 {
execsql {CREATE TABLE t5(x)}
proc auth {code arg1 arg2 arg3 arg4} {
if {$code=="SQLITE_ALTER_TABLE"} {
set ::authargs [list $arg1 $arg2 $arg3 $arg4]
return SQLITE_OK
}
return SQLITE_OK
}
catchsql {
ALTER TABLE t5 ADD COLUMN new_col_1;
}
} {0 {}}
do_test auth-1.301 {
set x [execsql {SELECT sql FROM sqlite_master WHERE name='t5'}]
regexp new_col_1 $x
} {1}
do_test auth-1.302 {
set authargs
} {main t5 {} {}}
do_test auth-1.303 {
proc auth {code arg1 arg2 arg3 arg4} {
if {$code=="SQLITE_ALTER_TABLE"} {
set ::authargs [list $arg1 $arg2 $arg3 $arg4]
return SQLITE_IGNORE
}
return SQLITE_OK
}
catchsql {
ALTER TABLE t5 ADD COLUMN new_col_2;
}
} {0 {}}
do_test auth-1.304 {
set x [execsql {SELECT sql FROM sqlite_master WHERE name='t5'}]
regexp new_col_2 $x
} {0}
do_test auth-1.305 {
set authargs
} {main t5 {} {}}
do_test auth-1.306 {
proc auth {code arg1 arg2 arg3 arg4} {
if {$code=="SQLITE_ALTER_TABLE"} {
set ::authargs [list $arg1 $arg2 $arg3 $arg4]
return SQLITE_DENY
}
return SQLITE_OK
}
catchsql {
ALTER TABLE t5 ADD COLUMN new_col_3
}
} {1 {not authorized}}
do_test auth-1.307 {
set x [execsql {SELECT sql FROM sqlite_temp_master WHERE type='t5'}]
regexp new_col_3 $x
} {0}
do_test auth-1.308 {
set authargs
} {main t5 {} {}}
execsql {DROP TABLE t5}
} ;# ifcapable altertable
do_test auth-2.1 { do_test auth-2.1 {
proc auth {code arg1 arg2 arg3 arg4} { proc auth {code arg1 arg2 arg3 arg4} {
if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} { if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {