From: drh Date: Fri, 12 Feb 2010 19:46:26 +0000 (+0000) Subject: Enhancements to the secure_delete pragma to make it easier to use. X-Git-Tag: version-3.7.2~614 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af034ed68576b075e162201d1ab6492f05c6a40d;p=thirdparty%2Fsqlite.git Enhancements to the secure_delete pragma to make it easier to use. FossilOrigin-Name: 2bb38bb96ff6b9fb91dd1cf214041cf113ac5508 --- diff --git a/manifest b/manifest index 5362b914fa..b55b24d0ab 100644 --- a/manifest +++ b/manifest @@ -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----- diff --git a/manifest.uuid b/manifest.uuid index 3b3867c3c6..a314500523 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f72f8a870a0fc98a9f2b564ffafe7946bbce506e \ No newline at end of file +2bb38bb96ff6b9fb91dd1cf214041cf113ac5508 \ No newline at end of file diff --git a/src/attach.c b/src/attach.c index df9be1f3a3..984d62fce7 100644 --- a/src/attach.c +++ b/src/attach.c @@ -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; diff --git a/src/btree.c b/src/btree.c index e445a2f854..68f2907203 100644 --- a/src/btree.c +++ b/src/btree.c @@ -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; diff --git a/src/pragma.c b/src/pragma.c index 37ac623a13..bcc85cbb77 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -431,6 +431,12 @@ void sqlite3Pragma( if( zRight ){ b = getBoolean(zRight); } + if( pId2->n==0 && b>=0 ){ + int ii; + for(ii=0; iinDb; ii++){ + sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b); + } + } b = sqlite3BtreeSecureDelete(pBt, b); returnSingleInt(pParse, "secure_delete", b); }else diff --git a/test/securedel.test b/test/securedel.test new file mode 100644 index 0000000000..c965069eba --- /dev/null +++ b/test/securedel.test @@ -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