Enhancements to the secure_delete pragma to make it easier to use.

FossilOrigin-Name: 2bb38bb96ff6b9fb91dd1cf214041cf113ac5508
This commit is contained in:
drh 2010-02-12 19:46:26 +00:00
parent 5b47efa662
commit af034ed685
6 changed files with 95 additions and 12 deletions

View File

@ -1,8 +1,8 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
C All\sthe\ssecure-delete\ssetting\sto\sbe\schanged\sat\srun-time\susing\sa\spragma.\nThe\sSQLITE_SECURE_DELETE\scompile-time\soption\sdetermines\sthe\sdefault\ssetting.
D 2010-02-12T18:18:39
C Enhancements\sto\sthe\ssecure_delete\spragma\sto\smake\sit\seasier\sto\suse.
D 2010-02-12T19:46:27
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -106,12 +106,12 @@ F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
F src/alter.c 92ba938565d7cc6bfe92aad6cc90c00800ff21d3
F src/analyze.c 55155f05ee9ab4ce33b7a4d19c449053f8935200
F src/attach.c 0ba38b38252a34bb9721de35514a1d14058a8e49
F src/attach.c a6b5e97c84c46c731aad064c413e40e12cb718b7
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
F src/backup.c 744e98359dfc79fed43e8dec911e33e108b06aae
F src/bitvec.c 06ad2c36a9c3819c0b9cbffec7b15f58d5d834e0
F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff
F src/btree.c 25078c9bba2ed69f1c929e19fe71659d55511f99
F src/btree.c c9ee3c30fbf21ebb4f45c244bd47d7999e6f2704
F src/btree.h 0e193b7e90f1d78b79c79474040e3d66a553a4fa
F src/btreeInt.h 71ed5e7f009caf17b7dc304350b3cb64b5970135
F src/build.c 81412e0f3cabd0cc7a71a1644c46d9ccad9613f5
@ -159,7 +159,7 @@ F src/parse.y ace5c7a125d9f2a410e431ee3209034105045f7e
F src/pcache.c 815bcb3cf0e14b23212efd3f4981f667a5fd633e
F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
F src/pcache1.c 2bb2261190b42a348038f5b1c285c8cef415fcc8
F src/pragma.c c0591d6f77be6b281f5cb68031c9aab0a7bf50a4
F src/pragma.c 55cfa9daa145075cdb928dfce53e55665d6ad709
F src/prepare.c d4cd38ccfb51f1424d0e61d4878a810b7e1ebb60
F src/printf.c 2c2702dc4955394dae554b7c45f45656eb42de7f
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
@ -550,6 +550,7 @@ F test/savepoint5.test 0735db177e0ebbaedc39812c8d065075d563c4fd
F test/savepoint6.test 2df1d093e59e78d688c64eb20e0457aaea7d08f9
F test/schema.test 23a2909d2b1f8494d28d355c1254f075b0af8ffc
F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5
F test/securedel.test 328d2921c0ca49bdd3352e516b0377fc07143254
F test/select1.test f67ca2dfc05df41c7b86eb32ca409b427a5f43b0
F test/select2.test 9735da20ccd41e42bf2b4c19fd939141b591adae
F test/select3.test 2ce595f8fb8e2ac10071d3b4e424cadd4634a054
@ -789,14 +790,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P 14ab536a96f81595ab8c3dcd4b72075f1a827c8b
R 8c56002353eb719f638bc73e0f805265
P f72f8a870a0fc98a9f2b564ffafe7946bbce506e
R b61a1284585a029b8ec102ac4156fb15
U drh
Z 9e25690ce3b9770e58f6c8fa7d210a05
Z d9b19f603d580b3226157728109cbbd5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFLdZuDoxKgR168RlERAnGTAKCGoy1G06Shul4IKI+EICeUa82BwACeLCUf
+FBQFqONYf4Ztpufoz0uTZE=
=Tyh+
iD8DBQFLdbAVoxKgR168RlERAj5YAJ42YouMVbChw0/Wmuc1J2A6U9XZigCeJm/S
8JFH6+GHy+lsobZdTvVyj/I=
=Aq2n
-----END PGP SIGNATURE-----

View File

@ -1 +1 @@
f72f8a870a0fc98a9f2b564ffafe7946bbce506e
2bb38bb96ff6b9fb91dd1cf214041cf113ac5508

View File

@ -144,6 +144,8 @@ static void attachFunc(
pPager = sqlite3BtreePager(aNew->pBt);
sqlite3PagerLockingMode(pPager, db->dfltLockMode);
sqlite3PagerJournalMode(pPager, db->dfltJournalMode);
sqlite3BtreeSecureDelete(aNew->pBt,
sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) );
}
aNew->zName = sqlite3DbStrDup(db, zName);
aNew->safety_level = 3;

View File

@ -2172,6 +2172,7 @@ int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
*/
int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
int b;
if( p==0 ) return 0;
sqlite3BtreeEnter(p);
if( newFlag>=0 ){
p->pBt->secureDelete = (newFlag!=0) ? 1 : 0;

View File

@ -431,6 +431,12 @@ void sqlite3Pragma(
if( zRight ){
b = getBoolean(zRight);
}
if( pId2->n==0 && b>=0 ){
int ii;
for(ii=0; ii<db->nDb; ii++){
sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b);
}
}
b = sqlite3BtreeSecureDelete(pBt, b);
returnSingleInt(pParse, "secure_delete", b);
}else

73
test/securedel.test Normal file
View File

@ -0,0 +1,73 @@
# 2010 January 12
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#*************************************************************************
#
# Tests for the secure_delete pragma.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
unset -nocomplain DEFAULT_SECDEL
set DEFAULT_SECDEL 0
ifcapable secure_delete {
set DEFAULT_SECDEL 1
}
do_test securedel-1.0 {
db eval {PRAGMA secure_delete;}
} $DEFAULT_SECDEL
file delete -force test2.db test2.db-journal
do_test securedel-1.1 {
db eval {
ATTACH 'test2.db' AS db2;
PRAGMA main.secure_delete=ON;
PRAGMA db2.secure_delete;
}
} [list 1 $DEFAULT_SECDEL]
do_test securedel-1.2 {
db eval {
PRAGMA main.secure_delete=OFF;
PRAGMA db2.secure_delete;
}
} [list 0 $DEFAULT_SECDEL]
do_test securedel-1.3 {
db eval {
PRAGMA secure_delete=OFF;
PRAGMA db2.secure_delete;
}
} {0 0}
do_test securedel-1.4 {
breakpoint
db eval {
PRAGMA secure_delete=ON;
PRAGMA db2.secure_delete;
}
} {1 1}
do_test securedel-2.1 {
db eval {
DETACH db2;
ATTACH 'test2.db' AS db2;
PRAGMA db2.secure_delete;
}
} 1
do_test securedel-2.2 {
db eval {
DETACH db2;
PRAGMA main.secure_delete=OFF;
ATTACH 'test2.db' AS db2;
PRAGMA db2.secure_delete;
}
} {0 0}
finish_test