]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
allow readonly access when write permission denied (CVS 131)
authordrh <drh@noemail.net>
Thu, 17 Aug 2000 09:49:59 +0000 (09:49 +0000)
committerdrh <drh@noemail.net>
Thu, 17 Aug 2000 09:49:59 +0000 (09:49 +0000)
FossilOrigin-Name: 897b4bc0e92a2c7534d4fa9453a7f8f863fce67a

manifest
manifest.uuid
src/dbbe.c
src/dbbe.h
src/shell.c
src/tclsqlite.c
test/dbbe.test
www/changes.tcl

index 53f7b5d18c20a9b0cfd1a11a4deab4d3fed07720..b3b44ccd92a901df09fc89b7bbd08341bfaf4096 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C bug\sfix\s(CVS\s130)
-D 2000-08-09T17:17:25
+C allow\sreadonly\saccess\swhen\swrite\spermission\sdenied\s(CVS\s131)
+D 2000-08-17T09:50:00
 F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
 F Makefile.in 670aa9413cb2cdcded23b328a9e255c845c41a1e
 F README 51f6a4e7408b34afa5bc1c0485f61b6a4efb6958
@@ -7,19 +7,19 @@ F configure 51063d594190fa085f909cefc9427241088bec4f x
 F configure.in a04f02ba61ed09a00e862b4f78b91b06a559e0b5
 F doc/lemon.html e233a3e97a779c7a87e1bc4528c664a58e49dd47
 F src/build.c 4d90e9e94750ca80249fc7958c617021d8bb7a50
-F src/dbbe.c 5c69d68fe8d9461e56d066f9a7f693636c02d0c7
-F src/dbbe.h 8718b718b36d37584e9bbdfccec10588fa91271f
+F src/dbbe.c 226daaf8c095ceb4aff48cad188dad90643f9867
+F src/dbbe.h 6337132f904e72ecb28b07390021c241397e4cbf
 F src/delete.c 4d491eaf61b515516749c7ed68fa3b2ee8a09065
 F src/expr.c 2fa63f086707176d09092e71832f9bbdc6a8ac85
 F src/insert.c f146f149ad2422a1dc3bfa7a1651a25940f98958
 F src/main.c ba16b81890d962821bb90f0a4de9a29b0e495eb2
 F src/parse.y 5d199034de5d29ebedb42c1c51f34db4df40cbe5
 F src/select.c d382e96c2221d08367cc87976f2b574537c9de97
-F src/shell.c cd560887be6fb9cfa477fce7ba60716139189271
+F src/shell.c 0aabf9e5e89fc8ac7a56de7f05255ed6864170f2
 F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
 F src/sqlite.h 82ae53028e27919250f886ff9d7c4927de81978a
 F src/sqliteInt.h f6d1e139b3bfa4ceff2136684e19d76b53178ec0
-F src/tclsqlite.c b1ae6abd50d8b0e2470cc49b5e1d03329a68dd75
+F src/tclsqlite.c 89dc4ba2b521f3e919d6d7aaa4cc1c2aba8e16f3
 F src/tokenize.c 097bec5843d4a0fb4509e036fee93bac080c5e73
 F src/update.c 51b9ef7434b15e31096155da920302e9db0d27fc
 F src/util.c b75b33e6bd5d47898bb7ed9fdd0dea4fe7c19b00
@@ -28,7 +28,7 @@ F src/vdbe.h 6c5653241633c583549c2d8097394ab52550eb63
 F src/where.c 420f666a38b405cd58bd7af832ed99f1dbc7d336
 F test/all.test 0950c135cab7e60c07bd745ccfad1476211e5bd7
 F test/copy.test b77a1214bd7756f2849d5c4fa6e715c0ff0c34eb
-F test/dbbe.test 0a8e4293cf816e590dcbb01be4cd4e8f7f95bdc8
+F test/dbbe.test c6079572516aeb2739a35fd272b105c45c30cc76
 F test/delete.test 402ee3ccb6e544582d24c573ef70b34d09583ae7
 F test/expr.test 09b55ccf81cb8cc2f9cd83d592a2ba187ee48ba8
 F test/in.test 2c560c0f55fb777029fd9bb5378f2997582aa603
@@ -60,7 +60,7 @@ F www/arch.fig 4e26e9dca3c49724fc8f554c695ddea9f2413156
 F www/arch.png c4d908b79065a72e7dcf19317f36d1324c550e87
 F www/arch.tcl 4f6a9afecc099a27bba17b4f8cc9561abc15dc40
 F www/c_interface.tcl 29593cf77025bab137b7ba64b9459eb5eb6b4873
-F www/changes.tcl 93793b1f28248282fcd3c953f46c78ee7c5819f0
+F www/changes.tcl ebea5c4eeeb210d118d002a2fbc84c8fba5af7e2
 F www/crosscompile.tcl 19734ce7f18b16ff2ed8479412abf8aca56e1dcc
 F www/fileformat.tcl cfb7fba80b7275555281ba2f256c00734bcdd1c9
 F www/index.tcl 421bcabc6839eb00698b75b169caa8a559454515
@@ -69,7 +69,7 @@ F www/mingw.tcl fc5f4ba9d336b6e8c97347cc6496d6162461ef60
 F www/opcode.tcl cb3a1abf8b7b9be9f3a228d097d6bf8b742c2b6f
 F www/sqlite.tcl cb0d23d8f061a80543928755ec7775da6e4f362f
 F www/vdbe.tcl bcbfc33bcdd0ebad95eab31286adb9e1bc289520
-P 2b3511eca7e562ef2428cec2f7eeca1d26b6c1c8
-R feae1ba062714e41beac70a905f9d7a4
+P e8882dac2306afbc7bffdaa93c9a7fc45fdbd8e1
+R 84cf4ce23b5394480238cc25bd273361
 U drh
-Z 9ca7c4666791da386e3fb1b846e0d62e
+Z 4e8cb91c77f87e4664b844fede982b96
index 1554b72d37e2e9ae2e1749d21cfe08a6f85e96a3..57adeab56f0cd0c10086c1a94338516e8478e32d 100644 (file)
@@ -1 +1 @@
-e8882dac2306afbc7bffdaa93c9a7fc45fdbd8e1
\ No newline at end of file
+897b4bc0e92a2c7534d4fa9453a7f8f863fce67a
\ No newline at end of file
index e34ffd91d69af8d819527ddc6b462f349fb5463d..b9271ad678b23b178b75b00dde9fe10d50d6a721 100644 (file)
@@ -30,7 +30,7 @@
 ** relatively simple to convert to a different database such
 ** as NDBM, SDBM, or BerkeleyDB.
 **
-** $Id: dbbe.c,v 1.18 2000/08/02 12:26:29 drh Exp $
+** $Id: dbbe.c,v 1.19 2000/08/17 09:50:00 drh Exp $
 */
 #include "sqliteInt.h"
 #include <gdbm.h>
@@ -372,6 +372,8 @@ int sqliteDbbeOpenCursor(
         /* Trying to read a non-existant file.  This is OK.  All the
         ** reads will return empty, which is what we want. */
         rc = SQLITE_OK;   
+      }else if( pBe->write==0 ){
+        rc = SQLITE_READONLY;
       }else if( access(zFile,W_OK|R_OK) ){
         rc = SQLITE_PERM;
       }else{
@@ -413,11 +415,13 @@ void sqliteDbbeDropTable(Dbbe *pBe, const char *zTable){
 /*
 ** Reorganize a table to reduce search times and disk usage.
 */
-void sqliteDbbeReorganizeTable(Dbbe *pBe, const char *zTable){
+int sqliteDbbeReorganizeTable(Dbbe *pBe, const char *zTable){
   DbbeCursor *pCrsr;
+  int rc;
 
-  if( sqliteDbbeOpenCursor(pBe, zTable, 1, &pCrsr)!=SQLITE_OK ){
-    return;
+  rc = sqliteDbbeOpenCursor(pBe, zTable, 1, &pCrsr);
+  if( rc!=SQLITE_OK ){
+    return rc;
   }
   if( pCrsr && pCrsr->pFile && pCrsr->pFile->dbf ){
     gdbm_reorganize(pCrsr->pFile->dbf);
@@ -425,6 +429,7 @@ void sqliteDbbeReorganizeTable(Dbbe *pBe, const char *zTable){
   if( pCrsr ){
     sqliteDbbeCloseCursor(pCrsr);
   }
+  return SQLITE_OK;
 }
 
 /*
index 8ccb53f18f9c7e1f402d30c57cbbb35af58d8029..329cef3c5c9a422e64eaede69fb1607afc5f3e70 100644 (file)
@@ -28,7 +28,7 @@
 ** This library was originally designed to support the following
 ** backends: GDBM, NDBM, SDBM, Berkeley DB.
 **
-** $Id: dbbe.h,v 1.6 2000/06/21 13:59:11 drh Exp $
+** $Id: dbbe.h,v 1.7 2000/08/17 09:50:00 drh Exp $
 */
 #ifndef _SQLITE_DBBE_H_
 #define _SQLITE_DBBE_H_
@@ -79,7 +79,7 @@ int sqliteDbbeOpenCursor(Dbbe*, const char *zName, int writeable, DbbeCursor**);
 void sqliteDbbeDropTable(Dbbe*, const char *zTableName);
 
 /* Reorganize a table to speed access or reduce its disk usage */
-void sqliteDbbeReorganizeTable(Dbbe*, const char *zTableName);
+int sqliteDbbeReorganizeTable(Dbbe*, const char *zTableName);
 
 /* Close a cursor */
 void sqliteDbbeCloseCursor(DbbeCursor*);
index 629d1008385181f096f6ed1f1d87e47f3badb588..6dcdccce7b3cfa9d0374c6a8c15930495e0f14ca 100644 (file)
@@ -24,7 +24,7 @@
 ** This file contains code to implement the "sqlite" command line
 ** utility for accessing SQLite databases.
 **
-** $Id: shell.c,v 1.20 2000/08/08 20:19:09 drh Exp $
+** $Id: shell.c,v 1.21 2000/08/17 09:50:00 drh Exp $
 */
 #include <stdlib.h>
 #include <string.h>
@@ -659,12 +659,17 @@ int main(int argc, char **argv){
   }
   data.db = db = sqlite_open(argv[1], 0666, &zErrMsg);
   if( db==0 ){
-    if( zErrMsg ){
-      fprintf(stderr,"Unable to open database \"%s\": %s\n", argv[1], zErrMsg);
+    data.db = db = sqlite_open(argv[1], 0444, &zErrMsg);
+    if( db==0 ){
+      if( zErrMsg ){
+        fprintf(stderr,"Unable to open database \"%s\": %s\n", argv[1],zErrMsg);
+      }else{
+        fprintf(stderr,"Unable to open database %s\n", argv[1]);
+      }
+      exit(1);
     }else{
-      fprintf(stderr,"Unable to open database %s\n", argv[1]);
+      printf("Database \"%s\" opened READ ONLY!\n", argv[1]);
     }
-    exit(1);
   }
   data.out = stdout;
   if( argc==3 ){
index dc9894c71e8a10dfc649d8713b16f2055439ad80..11221a76938a6d0ea4f8ddd05943fb4cf742005d 100644 (file)
@@ -23,7 +23,7 @@
 *************************************************************************
 ** A TCL Interface to SQLite
 **
-** $Id: tclsqlite.c,v 1.7 2000/08/04 14:56:25 drh Exp $
+** $Id: tclsqlite.c,v 1.8 2000/08/17 09:50:00 drh Exp $
 */
 #include "sqlite.h"
 #include <tcl.h>
@@ -329,6 +329,7 @@ static int DbMain(void *cd, Tcl_Interp *interp, int argc, char **argv){
 */
 int Sqlite_Init(Tcl_Interp *interp){
   Tcl_CreateCommand(interp, "sqlite", DbMain, 0, 0);
+  Tcl_PkgProvide(interp, "sqlite", "1.0");
   return TCL_OK;
 }
 int Sqlite_SafeInit(Tcl_Interp *interp){
index d7c2700e275e64912374f137c6d9f8aa03f8eb40..3c9104e63f4e2addf417199276fd885bbf38d9bd 100644 (file)
@@ -23,7 +23,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is exercising the code in dbbe.c.
 #
-# $Id: dbbe.test,v 1.2 2000/06/08 15:10:48 drh Exp $
+# $Id: dbbe.test,v 1.3 2000/08/17 09:50:00 drh Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -130,7 +130,7 @@ do_test dbbe-3.1 {
   sqlite db testdb 0444
   set v [catch {execsql {INSERT INTO t1 VALUES(1)}} msg]
   lappend v $msg
-} {1 {write permission denied for table t1}}
+} {1 {table t1 is readonly}}
 
 
 finish_test
index 0ca4c7293ba90edb923d203af79dd9d70182d4de..f5ffc41b6579285838f8db648603897dabc741bf 100644 (file)
@@ -17,6 +17,12 @@ proc chng {date desc} {
   puts "<DD><P><UL>$desc</UL></P></DD>"
 }
 
+chng {2000 Aug 17} {
+<li>Change the <b>sqlite</b> program so that it can read
+    databases for which it lacks write permission.  (It used to
+    refuse all access if it could not write.)</li>
+}
+
 chng {2000 Aug 9} {
 <li>Treat carriage returns as white space.</li>
 }