diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..2c39e95 --- /dev/null +++ b/README.en.md @@ -0,0 +1,54 @@ +# PDO SQLCipher + +A driver for implementing [PDO](http://php.net/manual/en/book.pdo.php) (PHP Data Objects) interface for [SQLCipher](http://sqlcipher.net) without replacing genuine PDO SQLite or the system version of [SQLite](http://www.sqlite.org/). It's based on PDO SQLite source code and created by simply replacing names and inserting SQLCipher code (instead of dynamic linking with SQLite libraries). + +A detachment of this kind allows granting access to encrypted databases only to applications that obviously need it, without fear of data loss or slowing down other applications. + +## Assembling + +To assemble this extension, run `build.sh` script. After successful assembly, all the necessary files will be placed in the directory named `release`: + +* `sqlcipher` - console client (equivalent of `sqlite3` client) +* `pdo_sqlcipher.so` - php extension (equivalent of `pdo_sqlite.so` extension) + +If assembling is performed under Debain, the following dev packages may be required (in addition to standard): + +* `libicu-dev` +* `libreadline-dev` +* `libssl-dev` +* `php5-dev` +* `tcl-dev` + +If assembling is performed under RHEL, the following dev packages may be required (in addition to standard): + +* `libicu-devel` +* `readline-devel` +* `openssl-devel` +* `php-devel` +* `tcl-devel` + +If assembling is performed under FreeBSD, `lang/tcl-wrapper` port installation may be required (to support `tclsh`). + +Assembling script was tested under Debian Wheezy (PHP 5.4.4-14) and FreeBSD 9.1 (PHP 5.4.13) + +## Installation + +Install this extension by copying files from the `release` directory: + +* `sqlcipher` to the `/usr/local/bin/` directory +* `pdo_sqlcipher.so` to the directory of php modules (depends on specific distro): + * Debian: `/usr/lib/php5/20100525/` + * RHEL: `/usr/lib64/php/modules/` + * FreeBSD: `/usr/local/lib/php/20100525/` + +And enable the php extension: + +``` +extension=pdo_sqlcipher.so +``` + +* Debian: `/etc/php5/conf.d/pdo_sqlcipher.ini` +* RHEL: `/etc/php.d/pdo_sqlcipher.ini` +* FreeBSD: `/usr/local/etc/php/extensions.ini` + +You can find an example of extension usage in `example.php` file within the repository. diff --git a/README.md b/README.md index 2c39e95..0e11c8c 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,19 @@ # PDO SQLCipher -A driver for implementing [PDO](http://php.net/manual/en/book.pdo.php) (PHP Data Objects) interface for [SQLCipher](http://sqlcipher.net) without replacing genuine PDO SQLite or the system version of [SQLite](http://www.sqlite.org/). It's based on PDO SQLite source code and created by simply replacing names and inserting SQLCipher code (instead of dynamic linking with SQLite libraries). +[English version](https://github.com/abbat/pdo_sqlcipher/blob/master/README.en.md) -A detachment of this kind allows granting access to encrypted databases only to applications that obviously need it, without fear of data loss or slowing down other applications. +Драйвер, реализующий интерфейс [PDO](http://php.net/manual/en/book.pdo.php) (PHP Data Objects) для [SQLCipher](http://sqlcipher.net) без замещения оригинальной версии PDO SQLite или системной версии [SQLite](http://www.sqlite.org/). Основан на оригинальном коде PDO SQLite путем простого замещения имен и встраиванием кода SQLCipher (вместо динамической линковки с библиотеками SQLite). -## Assembling +Подобное разделение позволяет работать с шифрованными базами только тем приложениям, которые в этом явно нуждаются не опасаясь потери данных или замедления работы остальных приложений. -To assemble this extension, run `build.sh` script. After successful assembly, all the necessary files will be placed in the directory named `release`: +## Сборка -* `sqlcipher` - console client (equivalent of `sqlite3` client) -* `pdo_sqlcipher.so` - php extension (equivalent of `pdo_sqlite.so` extension) +Для сборки расширения запустите скрипт `build.sh`. После успешной сборки необходимые файлы будут помещены в директорию `release`: -If assembling is performed under Debain, the following dev packages may be required (in addition to standard): +* `sqlcipher` - консольный клиент (аналогичный клиенту `sqlite3`) +* `pdo_sqlcipher.so` - расширение php (аналогичное расширению `pdo_sqlite.so`) + +Для сборки под Debain могут потребоваться (помимо стандартных) следующие dev пакеты: * `libicu-dev` * `libreadline-dev` @@ -19,7 +21,7 @@ If assembling is performed under Debain, the following dev packages may be requi * `php5-dev` * `tcl-dev` -If assembling is performed under RHEL, the following dev packages may be required (in addition to standard): +Для сборки под RHEL могут потребоваться (помимо стандартных) следующие dev пакеты: * `libicu-devel` * `readline-devel` @@ -27,21 +29,21 @@ If assembling is performed under RHEL, the following dev packages may be require * `php-devel` * `tcl-devel` -If assembling is performed under FreeBSD, `lang/tcl-wrapper` port installation may be required (to support `tclsh`). +Для сборки под FreeBSD может потребоваться установка порта `lang/tcl-wrapper` (для поддержки `tclsh`). -Assembling script was tested under Debian Wheezy (PHP 5.4.4-14) and FreeBSD 9.1 (PHP 5.4.13) +Скрипт сборки протестирован на Debian Wheezy (PHP 5.4.4-14) и FreeBSD 9.1 (PHP 5.4.13) -## Installation +## Установка -Install this extension by copying files from the `release` directory: +Для установки расширения скопируйте файлы из директории `release`: -* `sqlcipher` to the `/usr/local/bin/` directory -* `pdo_sqlcipher.so` to the directory of php modules (depends on specific distro): +* `sqlcipher` в директорию `/usr/local/bin/` +* `pdo_sqlcipher.so` в директорию модулей php (зависит от дистрибутива): * Debian: `/usr/lib/php5/20100525/` * RHEL: `/usr/lib64/php/modules/` * FreeBSD: `/usr/local/lib/php/20100525/` -And enable the php extension: +И подключите расширение php: ``` extension=pdo_sqlcipher.so @@ -51,4 +53,4 @@ extension=pdo_sqlcipher.so * RHEL: `/etc/php.d/pdo_sqlcipher.ini` * FreeBSD: `/usr/local/etc/php/extensions.ini` -You can find an example of extension usage in `example.php` file within the repository. +Пример использования расширения можно найти в файле `example.php` репозитория. diff --git a/build-debian.sh b/build-debian.sh new file mode 100755 index 0000000..7186780 --- /dev/null +++ b/build-debian.sh @@ -0,0 +1,311 @@ +#!/bin/sh + +# +# SQLite3 compile options +# + +CFLAGS=" \ + -DSQLITE_HAS_CODEC \ + -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \ + -DSQLITE_ENABLE_COLUMN_METADATA \ + -DSQLITE_ENABLE_STAT3 \ + -DSQLITE_ENABLE_RTREE \ + -DSQLITE_ENABLE_FTS3 \ + -DSQLITE_ENABLE_FTS3_PARENTHESIS \ + -DSQLITE_ENABLE_FTS4 \ + -DSQLITE_SECURE_DELETE \ + -DSQLITE_ENABLE_ICU \ + -DSQLITE_SOUNDEX \ + -DSQLITE_DEFAULT_FOREIGN_KEYS=1 \ + -I. -I/usr/local/include" + +LDFLAGS="-lcrypto -licuuc -licui18n -L/usr/local/lib" + + +PHP_CONFIG=$(which php-config) + +if [ "x${PHP_CONFIG}" = "x" ]; then + echo "Error: php-config not found" + exit 1 +fi + +PHP_VER=$(${PHP_CONFIG} --version ) +PHP_API=$(${PHP_CONFIG} --phpapi ) +# There is prolly a better way to do this (getting the proper source pkg name): +PHP_DEB_VER="$(dpkg-query -W -f='${Version}' php5)" +PHP_SRC=php5-${PHP_DEB_VER%*-*} + +if [ "x${PHP_VER}" = "x" ]; then + echo "Error: unknown php version" + exit 1 +fi + +if [ ! -f "${PHP_SRC}" ]; then + apt-get source php5 + if [ $? -ne 0 ]; then + # sources.list not defined source packages + echo "Cannot get the php source package, please add a 'source' line to /etc/apt/sources.list" + exit $? + fi +fi + + +# +# Get SQLCipher source code and make SQLite Amalgamation +# + +SQLCIPHER_SRC="sqlcipher.git" + +if [ ! -d "${SQLCIPHER_SRC}" ]; then + git clone "git://github.com/sqlcipher/sqlcipher.git" "${SQLCIPHER_SRC}" + if [ $? -ne 0 ]; then + exit $? + fi +fi + +if [ ! -f "${SQLCIPHER_SRC}/sqlite3.c" ]; then + cd "${SQLCIPHER_SRC}" + + make distclean + + # subject to change (see http://www.sqlite.org/compile.html) + ./configure \ + --disable-shared \ + --enable-tempstore=yes \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" + if [ $? -ne 0 ]; then + exit $? + fi + + make + if [ $? -ne 0 ]; then + exit $? + fi + + cd .. +fi + +# +# Clone pdo_sqlite sources for pdo_sqlcipher +# + +BUILD_DIR="build" + +if [ -d "${BUILD_DIR}" ]; then + rm -rf "${BUILD_DIR}" + if [ $? -ne 0 ]; then + exit $? + fi +fi + +mkdir -p "${BUILD_DIR}" +if [ $? -ne 0 ]; then + exit $? +fi + +PDO_SQLITE="${PHP_SRC}/ext/pdo_sqlite" + +cp "${PDO_SQLITE}/"*.c "${PDO_SQLITE}"/*.h "${BUILD_DIR}/" +if [ $? -ne 0 ]; then + exit $? +fi + +# magic :) +for FILE in "${BUILD_DIR}"/* +do + cat "${FILE}" | \ + sed -e 's/sqlite/sqlcipher/g' | \ + sed -e 's/SQLite/SQLCipher/g' | \ + sed -e 's/PDO_SQLITE/PDO_SQLCIPHER/g' > \ + "${FILE}.tmp" + if [ $? -ne 0 ]; then + exit $? + fi + + NEW_FILE=$(echo ${FILE} | sed 's/sqlite/sqlcipher/') + + mv "${FILE}.tmp" "${NEW_FILE}" + if [ $? -ne 0 ]; then + exit $? + fi + + if [ "${NEW_FILE}" != "${FILE}" ]; then + rm -f "${FILE}" + if [ $? -ne 0 ]; then + exit $? + fi + fi +done + +# magic for sqlite3 api sources +cp "${SQLCIPHER_SRC}/sqlite3.c" "${BUILD_DIR}/sqlcipher3.c" +if [ $? -ne 0 ]; then + exit $? +fi + +cp "${SQLCIPHER_SRC}/sqlite3.h" "${BUILD_DIR}/sqlcipher3.h" +if [ $? -ne 0 ]; then + exit $? +fi + +for FILE in "${BUILD_DIR}"/sqlcipher3.* +do + sed -ie 's/sqlite3/sqlcipher3/g' "${FILE}" + if [ $? -ne 0 ]; then + exit $? + fi + + sed -rie 's/(".*)sqlcipher3(.*")/\1sqlite3\2/g' "${FILE}" + if [ $? -ne 0 ]; then + exit $? + fi +done + +# +# Build pdo_sqlcipher +# + +cp "config.m4" "${BUILD_DIR}/config.m4" +if [ $? -ne 0 ]; then + exit $? +fi + +cd "${BUILD_DIR}" + +phpize --clean +if [ $? -ne 0 ]; then + exit $? +fi + +phpize +if [ $? -ne 0 ]; then + exit $? +fi + +./configure \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" +if [ $? -ne 0 ]; then + exit $? +fi + +make +if [ $? -ne 0 ]; then + exit $? +fi + +cd .. + +# +# Copy binaries +# + +RELEASE_DIR="release" + +if [ -d "${RELEASE_DIR}" ]; then + rm -rf "${RELEASE_DIR}" + if [ $? -ne 0 ]; then + exit $? + fi +fi + +mkdir -p "${RELEASE_DIR}" +if [ $? -ne 0 ]; then + exit $? +fi + +# pdo_sqlite.so +cp "${BUILD_DIR}/modules/pdo_sqlcipher.so" "${RELEASE_DIR}/pdo_sqlcipher.so" +if [ $? -ne 0 ]; then + exit $? +fi + +strip "${RELEASE_DIR}/pdo_sqlcipher.so" +if [ $? -ne 0 ]; then + exit $? +fi + +chmod 0644 "${RELEASE_DIR}/pdo_sqlcipher.so" +if [ $? -ne 0 ]; then + exit $? +fi + +# sqlcipher static binary +cp "${SQLCIPHER_SRC}/sqlcipher" "${RELEASE_DIR}/sqlcipher" +if [ $? -ne 0 ]; then + exit $? +fi + +strip "${RELEASE_DIR}/sqlcipher" +if [ $? -ne 0 ]; then + exit $? +fi + +# +# Clean +# + +#rm -rf ${PHP_SRC} +#rm -rf ${SQLCIPHER_SRC} +#rm -rf ${BUILD_DIR} +#rm -f ${PHP_TGZ} + + +## Create the .deb package + +LIBICU="$(dpkg-query -W -f='${Package}\n' libicu* | grep -v '\-')" +LIBICU_VER="$(dpkg-query -W -f='${Version}' $LIBICU)" + +sed -i "s/_PHP_DEB_VER/$PHP_DEB_VER/g;s/_PHP_VER/$PHP_VER/g;s/_PHP_API/$PHP_API/g;s/_LIBICU_VER/$LIBICU_VER/g;s/_LIBICU/$LIBICU/g" package/DEBIAN/control + +mkdir -p package/usr/bin +if [ $? -ne 0 ]; then + exit $? +fi + +mkdir -p package/usr/lib/php5/${PHP_API} +if [ $? -ne 0 ]; then + exit $? +fi + +cp "${RELEASE_DIR}/pdo_sqlcipher.so" package/usr/lib/php5/${PHP_API}/ +if [ $? -ne 0 ]; then + exit $? +fi + +cp "${RELEASE_DIR}/sqlcipher" package/usr/bin/ +if [ $? -ne 0 ]; then + exit $? +fi + +cd package + +md5deep -rl etc usr > DEBIAN/md5sums +if [ $? -ne 0 ]; then + exit $? +fi + +cd .. + +fakeroot dpkg-deb -z9 -b package +if [ $? -ne 0 ]; then + exit $? +fi + +mv package.deb php5-sqlcipher.deb +if [ $? -ne 0 ]; then + exit $? +fi + +# http://lintian.debian.org/tags.html +lintian php5-sqlcipher.deb +if [ $? -ne 0 ]; then + exit $? +fi + +# clean +rm -rf package/usr/bin +rm -rf package/usr/lib +rm -f package/DEBIAN/md5sums + diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..2156f3a --- /dev/null +++ b/build.sh @@ -0,0 +1,269 @@ +#!/bin/sh + +# +# SQLite3 compile options +# + +CFLAGS=" \ + -DSQLITE_HAS_CODEC \ + -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \ + -DSQLITE_ENABLE_COLUMN_METADATA \ + -DSQLITE_ENABLE_STAT3 \ + -DSQLITE_ENABLE_RTREE \ + -DSQLITE_ENABLE_FTS3 \ + -DSQLITE_ENABLE_FTS3_PARENTHESIS \ + -DSQLITE_ENABLE_FTS4 \ + -DSQLITE_SECURE_DELETE \ + -DSQLITE_ENABLE_ICU \ + -DSQLITE_SOUNDEX \ + -DSQLITE_DEFAULT_FOREIGN_KEYS=1 \ + -I. -I/usr/local/include" + +LDFLAGS="-lcrypto -licuuc -licui18n -L/usr/local/lib" + +# fix FreeBSD include +UNAME=$(uname) +if [ "x${UNAME}" = "xFreeBSD" ]; then + CFLAGS="${CFLAGS} -include /usr/include/sys/stat.h" +fi + +# +# Get PHP source code (installed version) +# + +PHP_CONFIG=$(which php-config) + +if [ "x${PHP_CONFIG}" = "x" ]; then + echo "Error: php-config not found" + exit 1 +fi + +# 5.3.3-7+squeeze13 +PHP_VER=$(${PHP_CONFIG} --version | cut -d '-' -f 1) + +if [ "x${PHP_VER}" = "x" ]; then + echo "Error: unknown php version" + exit 1 +fi + +PHP_SRC="php-${PHP_VER}" +PHP_TGZ="${PHP_SRC}.tar.gz" + +if [ ! -f "${PHP_TGZ}" ]; then + wget "http://museum.php.net/php5/${PHP_TGZ}" + if [ $? -ne 0 ]; then + # newest version? + wget -O "${PHP_TGZ}" "http://ru2.php.net/get/${PHP_TGZ}/from/this/mirror" + if [ $? -ne 0 ]; then + exit $? + fi + fi +fi + +if [ ! -d "${PHP_SRC}" ]; then + tar -xf "${PHP_TGZ}" -C ./ + if [ $? -ne 0 ]; then + exit $? + fi +fi + +# +# Get SQLCipher source code and make SQLite Amalgamation +# + +SQLCIPHER_SRC="sqlcipher.git" + +if [ ! -d "${SQLCIPHER_SRC}" ]; then + git clone "git://github.com/sqlcipher/sqlcipher.git" "${SQLCIPHER_SRC}" + if [ $? -ne 0 ]; then + exit $? + fi +fi + +if [ ! -f "${SQLCIPHER_SRC}/sqlite3.c" ]; then + cd "${SQLCIPHER_SRC}" + + make distclean + + # subject to change (see http://www.sqlite.org/compile.html) + ./configure \ + --disable-shared \ + --enable-tempstore=yes \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" + if [ $? -ne 0 ]; then + exit $? + fi + + make + if [ $? -ne 0 ]; then + exit $? + fi + + cd .. +fi + +# +# Clone pdo_sqlite sources for pdo_sqlcipher +# + +BUILD_DIR="build" + +if [ -d "${BUILD_DIR}" ]; then + rm -rf "${BUILD_DIR}" + if [ $? -ne 0 ]; then + exit $? + fi +fi + +mkdir -p "${BUILD_DIR}" +if [ $? -ne 0 ]; then + exit $? +fi + +PDO_SQLITE="${PHP_SRC}/ext/pdo_sqlite" + +cp "${PDO_SQLITE}/"*.c "${PDO_SQLITE}"/*.h "${BUILD_DIR}/" +if [ $? -ne 0 ]; then + exit $? +fi + +# magic :) +for FILE in "${BUILD_DIR}"/* +do + cat "${FILE}" | \ + sed -e 's/sqlite/sqlcipher/g' | \ + sed -e 's/SQLite/SQLCipher/g' | \ + sed -e 's/PDO_SQLITE/PDO_SQLCIPHER/g' > \ + "${FILE}.tmp" + if [ $? -ne 0 ]; then + exit $? + fi + + NEW_FILE=$(echo ${FILE} | sed 's/sqlite/sqlcipher/') + + mv "${FILE}.tmp" "${NEW_FILE}" + if [ $? -ne 0 ]; then + exit $? + fi + + if [ "${NEW_FILE}" != "${FILE}" ]; then + rm -f "${FILE}" + if [ $? -ne 0 ]; then + exit $? + fi + fi +done + +# magic for sqlite3 api sources +cp "${SQLCIPHER_SRC}/sqlite3.c" "${BUILD_DIR}/sqlcipher3.c" +if [ $? -ne 0 ]; then + exit $? +fi + +cp "${SQLCIPHER_SRC}/sqlite3.h" "${BUILD_DIR}/sqlcipher3.h" +if [ $? -ne 0 ]; then + exit $? +fi + +for FILE in "${BUILD_DIR}"/sqlcipher3.* +do + sed -ie 's/sqlite3/sqlcipher3/g' "${FILE}" + if [ $? -ne 0 ]; then + exit $? + fi + + sed -rie 's/(".*)sqlcipher3(.*")/\1sqlite3\2/g' "${FILE}" + if [ $? -ne 0 ]; then + exit $? + fi +done + +# +# Build pdo_sqlcipher +# + +cp "config.m4" "${BUILD_DIR}/config.m4" +if [ $? -ne 0 ]; then + exit $? +fi + +cd "${BUILD_DIR}" + +phpize --clean +if [ $? -ne 0 ]; then + exit $? +fi + +phpize +if [ $? -ne 0 ]; then + exit $? +fi + +./configure \ + CFLAGS="${CFLAGS}" \ + LDFLAGS="${LDFLAGS}" +if [ $? -ne 0 ]; then + exit $? +fi + +make +if [ $? -ne 0 ]; then + exit $? +fi + +cd .. + +# +# Copy binaries +# + +RELEASE_DIR="release" + +if [ -d "${RELEASE_DIR}" ]; then + rm -rf "${RELEASE_DIR}" + if [ $? -ne 0 ]; then + exit $? + fi +fi + +mkdir -p "${RELEASE_DIR}" +if [ $? -ne 0 ]; then + exit $? +fi + +# pdo_sqlite.so +cp "${BUILD_DIR}/modules/pdo_sqlcipher.so" "${RELEASE_DIR}/pdo_sqlcipher.so" +if [ $? -ne 0 ]; then + exit $? +fi + +strip "${RELEASE_DIR}/pdo_sqlcipher.so" +if [ $? -ne 0 ]; then + exit $? +fi + +chmod 0644 "${RELEASE_DIR}/pdo_sqlcipher.so" +if [ $? -ne 0 ]; then + exit $? +fi + +# sqlcipher static binary +cp "${SQLCIPHER_SRC}/sqlcipher" "${RELEASE_DIR}/sqlcipher" +if [ $? -ne 0 ]; then + exit $? +fi + +strip "${RELEASE_DIR}/sqlcipher" +if [ $? -ne 0 ]; then + exit $? +fi + +# +# Clean +# + +rm -rf ${PHP_SRC} +rm -rf ${SQLCIPHER_SRC} +rm -rf ${BUILD_DIR} +rm -f ${PHP_TGZ} diff --git a/config.m4 b/config.m4 index 83dd3fe..8f0d50a 100644 --- a/config.m4 +++ b/config.m4 @@ -1,45 +1,38 @@ dnl $Id$ dnl config.m4 for extension pdo_sqlcipher dnl vim:et:sw=2:ts=2: + PHP_ARG_ENABLE(pdo_sqlcipher, whether to enable pdo_sqlcipher support, [ --enable-pdo_sqlcipher Enable pdo_sqlcipher support]) + if test "$PHP_PDO_SQLCIPHER" != "no"; then + if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.]) fi + AC_MSG_CHECKING([for PDO includes]) if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then pdo_inc_path=$abs_srcdir/ext elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then pdo_inc_path=$abs_srcdir/ext - elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then - pdo_inc_path=$phpincludedir/ext elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then pdo_inc_path=$prefix/include/php/ext elif test -f $prefix/include/php5/ext/pdo/php_pdo_driver.h; then pdo_inc_path=$prefix/include/php5/ext elif test -f $prefix/include/php/5.5/php/ext/pdo/php_pdo_driver.h; then pdo_inc_path=$prefix/include/php/5.5/php/ext - elif test -f $prefix/include/php/5.6/php/ext/pdo/php_pdo_driver.h; then - pdo_inc_path=$prefix/include/php/5.6/php/ext else AC_MSG_ERROR([Cannot find php_pdo_driver.h.]) fi AC_MSG_RESULT($pdo_inc_path) - php_pdo_sqlcipher_sources_core="pdo_sqlite.c sqlite_driver.c sqlite_statement.c sqlite3.c" - dnl Detect PHP 8.4’s DSN parser unit and compile it if present - AC_MSG_CHECKING([for sqlite_sql_parser.c (PHP 8.4 DSN parser)]) - if test -f "$abs_srcdir/sqlite_sql_parser.c"; then - AC_MSG_RESULT([yes]) - php_pdo_sqlcipher_sources_core="$php_pdo_sqlcipher_sources_core sqlite_sql_parser.c" - else - AC_MSG_RESULT([no]) - fi - PHP_NEW_EXTENSION(pdo_sqlite, $php_pdo_sqlcipher_sources_core, $ext_shared,,-I$pdo_inc_path) + php_pdo_sqlcipher_sources_core="pdo_sqlcipher.c sqlcipher_driver.c sqlcipher_statement.c sqlcipher3.c" + + PHP_NEW_EXTENSION(pdo_sqlcipher, $php_pdo_sqlcipher_sources_core, $ext_shared,,-I$pdo_inc_path) ifdef([PHP_ADD_EXTENSION_DEP], [ - PHP_ADD_EXTENSION_DEP(pdo_sqlite, pdo) + PHP_ADD_EXTENSION_DEP(pdo_sqlcipher, pdo) ]) fi diff --git a/example.php b/example.php new file mode 100644 index 0000000..fe67899 --- /dev/null +++ b/example.php @@ -0,0 +1,95 @@ +getMessage() . PHP_EOL); + } + + return $pdo; +} + +// +// Create new example database with one table +// (it can be done through sqlcipher command line client) +// + +$sql = "PRAGMA key = '$password'; +PRAGMA encoding = \"UTF-8\"; +PRAGMA auto_vacuum = 2; +PRAGMA incremental_vacuum(10); + +CREATE TABLE `test` ( + `id` INTEGER NOT NULL PRIMARY KEY, + `value` TEXT NOT NULL +);"; + +$pdo = getPDO($database); + +if ($pdo->exec($sql) === false) { + $error = $pdo->errorInfo(); + die($error[0] . ": " . $error[2] . PHP_EOL); +} + +// +// Use example database +// + +// set encryption key before any sql command +$sql = "PRAGMA key = '$password'"; +$pdo = getPDO($database); + +if ($pdo->exec($sql) === false) { + $error = $pdo->errorInfo(); + die($error[0] . ": " . $error[2] . PHP_EOL); +} + +// insert rows +$sql = "INSERT INTO `test` VALUES (1, 'value1'); +INSERT INTO `test` VALUES (2, 'value2'); +INSERT INTO `test` VALUES (3, 'value3');"; + +if ($pdo->exec($sql) === false) { + $error = $pdo->errorInfo(); + die($error[0] . ": " . $error[2] . PHP_EOL); +} + +// select rows +$result = $pdo->query("SELECT * FROM `test`"); + +if ($result === false) { + $error = $pdo->errorInfo(); + die($error[0] . ": " . $error[2] . PHP_EOL); +} + +foreach ($result as $row) { + print_r($row); +} + +// alter table +$sql = "ALTER TABLE `test` RENAME TO `test2`"; + +if ($pdo->exec($sql) === false) { + $error = $pdo->errorInfo(); + die($error[0] . ": " . $error[2] . PHP_EOL); +} + +// select rows +$result = $pdo->query("SELECT * FROM `test2`"); + +if ($result === false) { + $error = $pdo->errorInfo(); + die($error[0] . ": " . $error[2] . PHP_EOL); +} + +foreach ($result as $row) { + print_r($row); +} diff --git a/package/DEBIAN/conffiles b/package/DEBIAN/conffiles new file mode 100644 index 0000000..ee67535 --- /dev/null +++ b/package/DEBIAN/conffiles @@ -0,0 +1 @@ +/etc/php5/conf.d/pdo_sqlcipher.ini diff --git a/package/DEBIAN/control b/package/DEBIAN/control new file mode 100644 index 0000000..601d193 --- /dev/null +++ b/package/DEBIAN/control @@ -0,0 +1,12 @@ +Package: php5-sqlcipher +Version: _PHP_VER +Architecture: amd64 +Maintainer: Anton Batenev +Installed-Size: 350 +Depends: libc6 (>= 2.13-38), libssl1.0.0 (>= 1.0.1e-2), _LIBICU (>= _LIBICU_VER), phpapi-_PHP_API, php5-common (= _PHP_DEB_VER) +Section: php +Priority: optional +Homepage: https://github.com/abbat/pdo_sqlcipher +Description: sqlcipher module for PHP 5 + SQLCipher is an SQLite extension that provides transparent + 256-bit AES encryption of database files. diff --git a/package/etc/php5/conf.d/pdo_sqlcipher.ini b/package/etc/php5/conf.d/pdo_sqlcipher.ini new file mode 100644 index 0000000..324bfa4 --- /dev/null +++ b/package/etc/php5/conf.d/pdo_sqlcipher.ini @@ -0,0 +1 @@ +extension=pdo_sqlcipher.so diff --git a/package/usr/share/doc/php5-sqlcipher/copyright b/package/usr/share/doc/php5-sqlcipher/copyright new file mode 100644 index 0000000..600762d --- /dev/null +++ b/package/usr/share/doc/php5-sqlcipher/copyright @@ -0,0 +1,4 @@ +This package was debianized by Anton Batenev + +pdo_sqlite under PHP License (http://www.php.net/license/3_0.txt) +sqlcipher under BSD-style open source license (http://sqlcipher.net/license) diff --git a/package/usr/share/lintian/overrides/php5-sqlcipher b/package/usr/share/lintian/overrides/php5-sqlcipher new file mode 100644 index 0000000..bac25c2 --- /dev/null +++ b/package/usr/share/lintian/overrides/php5-sqlcipher @@ -0,0 +1,7 @@ +php5-sqlcipher: debian-changelog-file-missing +php5-sqlcipher: hardening-no-relro +php5-sqlcipher: copyright-without-copyright-notice +php5-sqlcipher: binary-or-shlib-defines-rpath +php5-sqlcipher: embedded-library +php5-sqlcipher: hardening-no-fortify-functions +php5-sqlcipher: binary-without-manpage