]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhancements to the secure_delete pragma to make it easier to use.
authordrh <drh@noemail.net>
Fri, 12 Feb 2010 19:46:26 +0000 (19:46 +0000)
committerdrh <drh@noemail.net>
Fri, 12 Feb 2010 19:46:26 +0000 (19:46 +0000)
FossilOrigin-Name: 2bb38bb96ff6b9fb91dd1cf214041cf113ac5508

manifest
manifest.uuid
src/attach.c
src/btree.c
src/pragma.c
test/securedel.test [new file with mode: 0644]

index 5362b914faedc79136505a1ec7134ccb99208b50..b55b24d0abf2ed292bc6d0f9488b54e815a6ae0c 100644 (file)
--- 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-----
index 3b3867c3c672c20adc7cc11318e484fa0d0347bc..a314500523beccbf89e475024ddfad4ec414a70c 100644 (file)
@@ -1 +1 @@
-f72f8a870a0fc98a9f2b564ffafe7946bbce506e
\ No newline at end of file
+2bb38bb96ff6b9fb91dd1cf214041cf113ac5508
\ No newline at end of file
index df9be1f3a3f6dde9acaa0489841a70f5c39e534a..984d62fce714c900ff7b55328ba23336dc1d5336 100644 (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;
index e445a2f8549905123e8aab86230525a35fc404ef..68f290720356a3183b55e63e89d132e9c5068465 100644 (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;
index 37ac623a13acdb12e9ead536ffb82fb6923481c3..bcc85cbb7742b4ef416a9b32b720865ae19c5bde 100644 (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
diff --git a/test/securedel.test b/test/securedel.test
new file mode 100644 (file)
index 0000000..c965069
--- /dev/null
@@ -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