Chris Hillery has proposed merging 
lp:~zorba-coders/zorba/sqlite-with-file-access into lp:zorba/sqlite-module.

Commit message:
Add SQLITE_WITH_FILE_ACCESS to prevent filesystem access. Defaults to same 
value as ZORBA_WITH_FILE_ACCESS when built inside Zorba, or "ON" when built 
stand-alone.

Requested reviews:
  Chris Hillery (ceejatec)
  Luis Rodriguez Gonzalez (kuraru)

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/sqlite-with-file-access/+merge/144641
-- 
https://code.launchpad.net/~zorba-coders/zorba/sqlite-with-file-access/+merge/144641
Your team Zorba Coders is subscribed to branch lp:zorba/sqlite-module.
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2012-11-20 16:41:36 +0000
+++ CMakeLists.txt	2013-01-24 06:18:21 +0000
@@ -42,6 +42,18 @@
 
   IF (SQLITE_FOUND)
     MESSAGE (STATUS "Found SQLite --" ${SQLITE_LIBRARIES})
+
+    # Set SQLITE_WITH_FILE_ACCESS - by default will be the same value as
+    # ZORBA_WITH_FILE ACCESS when built inside Zorba, or "ON" if built
+    # stand-alone.
+    IF (DEFINED ZORBA_WITH_FILE_ACCESS)
+      SET (_file_access ${ZORBA_WITH_FILE_ACCESS})
+    ELSE (DEFINED ZORBA_WITH_FILE_ACCESS)
+      SET (_file_access ON)
+    ENDIF (DEFINED ZORBA_WITH_FILE_ACCESS)
+    SET(SQLITE_WITH_FILE_ACCESS ${_file_access} CACHE BOOL
+      "Allow filesystem-based SQLite databases")
+
     INCLUDE_DIRECTORIES (${SQLITE_INCLUDE_DIR})  
 
     ADD_SUBDIRECTORY("src")

=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt	2012-11-20 16:41:36 +0000
+++ src/CMakeLists.txt	2013-01-24 06:18:21 +0000
@@ -12,7 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/sqlite_module.xq.src")
+CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake"
+  "${CMAKE_CURRENT_BINARY_DIR}/sqlite_module/config.h")
+INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")
   
 DECLARE_ZORBA_MODULE (
   URI "http://www.zorba-xquery.com/modules/sqlite";

=== added file 'src/config.h.cmake'
--- src/config.h.cmake	1970-01-01 00:00:00 +0000
+++ src/config.h.cmake	2013-01-24 06:18:21 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2013 The FLWOR Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// This header is configured by the SQLite module's build process
+// -- DO NOT EDIT!
+
+#ifndef ZORBA_SQLITE_CONFIG_H
+#define ZORBA_SQLITE_CONFIG_H
+
+#cmakedefine SQLITE_WITH_FILE_ACCESS
+
+#endif /* ZORBA_SQLITE_CONFIG_H */

=== modified file 'src/sqlite_module.xq'
--- src/sqlite_module.xq	2013-01-09 15:07:19 +0000
+++ src/sqlite_module.xq	2013-01-24 06:18:21 +0000
@@ -37,7 +37,9 @@
  :
  : @return the SQLite database object as xs:anyURI.
  :
- : @error s:SQLI0001 if the databse name doesn't exist or it couldn't be opened.
+ : @error s:SQLI0001 if the database name doesn't exist or it couldn't be opened.
+ : @error s:SQLI0008 if a non-in-memory database is requested and the module
+ :     is built without filesystem access
  : @error s:SQLI9999 if there was an internal error inside SQLite library.
  :)
 declare %an:sequential function s:connect(

=== modified file 'src/sqlite_module.xq.src/sqlite_module.cpp'
--- src/sqlite_module.xq.src/sqlite_module.cpp	2013-01-09 15:07:19 +0000
+++ src/sqlite_module.xq.src/sqlite_module.cpp	2013-01-24 06:18:21 +0000
@@ -31,6 +31,7 @@
 #include <stdio.h>
 
 #include "sqlite_module.h"
+#include <sqlite_module/config.h>
 
 namespace zorba { namespace sqlite {
 
@@ -566,6 +567,12 @@
     {
       return "Parameter passed is not a valid value";
     }
+#ifndef SQLITE_WITH_FILE_ACCESS
+    else if(error == "SQLI0008")
+    {
+      return "Only in-memory databases are allowed (Module built without filesystem access)";
+    }
+#endif /* not SQLITE_WITH_FILE_ACCESS */
     else if(error == "SQLI9999")
     {
       return "Internal error ocurred";
@@ -909,6 +916,12 @@
     lDbName = lItemName.getStringValue().str();
     if(lDbName == "")
       lDbName = std::string(":memory:");
+
+#ifndef SQLITE_WITH_FILE_ACCESS
+    if (lDbName != ":memory:") {
+      throwError("SQLI0008", getErrorMessage("SQLI0008"));
+    }
+#endif /* not SQLITE_WITH_FILE_ACCESS */
     lRc = sqlite3_open_v2(lDbName.c_str(), &lSqldb, lOptions.getOptionsAsInt(), NULL);
     // Store the UUID for this connection and return it
     lStrUUID = createUUID();

-- 
Mailing list: https://launchpad.net/~zorba-coders
Post to     : zorba-coders@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zorba-coders
More help   : https://help.launchpad.net/ListHelp

Reply via email to