allow readonly access when write permission denied (CVS 131)

FossilOrigin-Name: 897b4bc0e92a2c7534d4fa9453a7f8f863fce67a
This commit is contained in:
drh 2000-08-17 09:49:59 +00:00
parent 30cab80923
commit 167a4b1c90
8 changed files with 43 additions and 26 deletions

View File

@ -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

View File

@ -1 +1 @@
e8882dac2306afbc7bffdaa93c9a7fc45fdbd8e1
897b4bc0e92a2c7534d4fa9453a7f8f863fce67a

View 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;
}
/*

View 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*);

View 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>
@ -658,6 +658,8 @@ int main(int argc, char **argv){
exit(1);
}
data.db = db = sqlite_open(argv[1], 0666, &zErrMsg);
if( db==0 ){
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);
@ -665,6 +667,9 @@ int main(int argc, char **argv){
fprintf(stderr,"Unable to open database %s\n", argv[1]);
}
exit(1);
}else{
printf("Database \"%s\" opened READ ONLY!\n", argv[1]);
}
}
data.out = stdout;
if( argc==3 ){

View 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){

View 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

View 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>
}