diff options
-rw-r--r-- | CHANGELOG | 25 | ||||
-rw-r--r-- | client/src/leap/soledad/client/__init__.py | 24 | ||||
-rw-r--r-- | client/src/leap/soledad/client/sqlcipher.py | 5 | ||||
-rw-r--r-- | client/src/leap/soledad/client/target.py | 3 | ||||
-rw-r--r-- | common/MANIFEST.in | 4 | ||||
-rw-r--r-- | common/setup.py | 5 | ||||
-rw-r--r-- | common/src/leap/soledad/common/couch.py | 8 | ||||
-rw-r--r-- | server/pkg/soledad | 27 | ||||
-rw-r--r-- | server/src/leap/soledad/server/__init__.py | 5 |
9 files changed, 77 insertions, 29 deletions
@@ -1,3 +1,28 @@ +0.6.5 Apr 09 2015: +Server: + o Remove unneeded parameters from CouchServerState initialization. Closes + #6833. + +0.6.4 Jan 23 2015: +Common: + o Bail out if cdocs/ dir does not exist. Closes: #6671 + +0.6.3 Dec 16 2014: +Client: + o Fix deferred encryption/decryption parameters (#6500). + +0.6.2 Dec 11 2014: +Client: + o Fix incorrect ssl context setup. + +0.6.1 Dec 08 2014: +Client: + o Use TLS v1 in soledad client. Fixes partially #6437 + +Server: + o Run daemon as user soledad (#6436). + o Avoid use of SSLv3 (#6437). + 0.6.0 Jul 18, 2014: Client: o Close all connections after syncing. Fixes #5518. diff --git a/client/src/leap/soledad/client/__init__.py b/client/src/leap/soledad/client/__init__.py index 586e3389..07255406 100644 --- a/client/src/leap/soledad/client/__init__.py +++ b/client/src/leap/soledad/client/__init__.py @@ -224,7 +224,7 @@ class Soledad(object): def __init__(self, uuid, passphrase, secrets_path, local_db_path, server_url, cert_file, - auth_token=None, secret_id=None, defer_encryption=False): + auth_token=None, secret_id=None, defer_encryption=True): """ Initialize configuration, cryptographic keys and dbs. @@ -1333,9 +1333,25 @@ class VerifiedHTTPSConnection(httplib.HTTPSConnection): self.sock = sock self._tunnel() - self.sock = ssl.wrap_socket(sock, - ca_certs=SOLEDAD_CERT, - cert_reqs=ssl.CERT_REQUIRED) + highest_supported = ssl.PROTOCOL_SSLv23 + + try: + # needs python 2.7.9+ + # negotiate the best available version, + # but explicitely disabled bad ones. + ctx = ssl.SSLContext(highest_supported) + ctx.options |= ssl.OP_NO_SSLv2 + ctx.options |= ssl.OP_NO_SSLv3 + + ctx.load_verify_locations(cafile=SOLEDAD_CERT) + ctx.verify_mode = ssl.CERT_REQUIRED + self.sock = ctx.wrap_socket(sock) + + except AttributeError: + self.sock = ssl.wrap_socket( + sock, ca_certs=SOLEDAD_CERT, cert_reqs=ssl.CERT_REQUIRED, + ssl_version=highest_supported) + match_hostname(self.sock.getpeercert(), self.host) diff --git a/client/src/leap/soledad/client/sqlcipher.py b/client/src/leap/soledad/client/sqlcipher.py index 2df9606e..fded2119 100644 --- a/client/src/leap/soledad/client/sqlcipher.py +++ b/client/src/leap/soledad/client/sqlcipher.py @@ -452,6 +452,11 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase): # XXX could mark the critical section here... try: + if defer_decryption and not self.defer_encryption: + logger.warning("Can't defer decryption without first having " + "created a sync db. Falling back to normal " + "syncing mode.") + defer_decryption = False res = syncer.sync(autocreate=autocreate, defer_decryption=defer_decryption) diff --git a/client/src/leap/soledad/client/target.py b/client/src/leap/soledad/client/target.py index 70e4d3a2..1eb84e64 100644 --- a/client/src/leap/soledad/client/target.py +++ b/client/src/leap/soledad/client/target.py @@ -28,12 +28,10 @@ import logging import re import urllib import threading -import urlparse from collections import defaultdict from time import sleep from uuid import uuid4 -from contextlib import contextmanager import simplejson as json from taskthread import TimerTask @@ -44,7 +42,6 @@ from u1db.remote.http_client import _encode_query_parameter, HTTPClientBase from zope.proxy import ProxyBase from zope.proxy import sameProxiedObjects, setProxiedObject -from leap.soledad.common import soledad_assert from leap.soledad.common.document import SoledadDocument from leap.soledad.client.auth import TokenBasedAuth from leap.soledad.client.crypto import is_symmetrically_encrypted diff --git a/common/MANIFEST.in b/common/MANIFEST.in index 7f6148ef..a26a12a6 100644 --- a/common/MANIFEST.in +++ b/common/MANIFEST.in @@ -2,3 +2,7 @@ include pkg/* include versioneer.py include LICENSE include CHANGELOG + +# What do we want the ddocs folder in the source package for? -- kali +# it should be enough with having the compiled stuff. +recursive-include src/leap/soledad/common/ddocs * diff --git a/common/setup.py b/common/setup.py index 6ee166ef..365006b2 100644 --- a/common/setup.py +++ b/common/setup.py @@ -155,6 +155,11 @@ def build_ddocs_py(basedir=None, with_src=True): dest_prefix = join(basedir, *dest_common_path) ddocs_prefix = join(prefix, 'ddocs') + + if not isdir(ddocs_prefix): + print "No ddocs/ folder, bailing out..." + return + ddocs = {} # design docs are represented by subdirectories of `ddocs_prefix` diff --git a/common/src/leap/soledad/common/couch.py b/common/src/leap/soledad/common/couch.py index 5658f4ce..b38b5b96 100644 --- a/common/src/leap/soledad/common/couch.py +++ b/common/src/leap/soledad/common/couch.py @@ -1529,20 +1529,14 @@ class CouchServerState(ServerState): Inteface of the WSGI server with the CouchDB backend. """ - def __init__(self, couch_url, shared_db_name, tokens_db_name): + def __init__(self, couch_url): """ Initialize the couch server state. :param couch_url: The URL for the couch database. :type couch_url: str - :param shared_db_name: The name of the shared database. - :type shared_db_name: str - :param tokens_db_name: The name of the tokens database. - :type tokens_db_name: str """ self._couch_url = couch_url - self._shared_db_name = shared_db_name - self._tokens_db_name = tokens_db_name def open_database(self, dbname): """ diff --git a/server/pkg/soledad b/server/pkg/soledad index 841233d1..ccb3e9b0 100644 --- a/server/pkg/soledad +++ b/server/pkg/soledad @@ -19,6 +19,9 @@ CERT_PATH=/etc/leap/soledad-server.pem PRIVKEY_PATH=/etc/leap/soledad-server.key TWISTD_PATH=/usr/bin/twistd HOME=/var/lib/soledad/ +SSL_METHOD=SSLv23_METHOD +USER=soledad +GROUP=soledad [ -r /etc/default/soledad ] && . /etc/default/soledad @@ -27,36 +30,38 @@ test -r /etc/leap/ || exit 0 . /lib/lsb/init-functions -case "$1" in +case "${1}" in start) echo -n "Starting soledad: twistd" - start-stop-daemon --start --quiet --exec $TWISTD_PATH -- \ - --pidfile=$PIDFILE \ - --logfile=$LOGFILE \ + start-stop-daemon --start --quiet \ + --user=${USER} --group=${GROUP} \ + --exec ${TWISTD_PATH} -- \ + --pidfile=${PIDFILE} \ + --logfile=${LOGFILE} \ web \ - --wsgi=$OBJ \ - --port=ssl:$HTTPS_PORT:privateKey=$PRIVKEY_PATH:certKey=$CERT_PATH + --wsgi=${OBJ} \ + --port=ssl:${HTTPS_PORT}:privateKey=${PRIVKEY_PATH}:certKey=${CERT_PATH}:sslmethod=${SSL_METHOD} echo "." ;; stop) echo -n "Stopping soledad: twistd" start-stop-daemon --stop --quiet \ - --pidfile $PIDFILE + --pidfile ${PIDFILE} echo "." ;; restart) - $0 stop - $0 start + ${0} stop + ${0} start ;; force-reload) - $0 restart + ${0} restart ;; status) - status_of_proc -p $PIDFILE $TWISTD_PATH soledad && exit 0 || exit $? + status_of_proc -p ${PIDFILE} ${TWISTD_PATH} soledad && exit 0 || exit ${?} ;; *) diff --git a/server/src/leap/soledad/server/__init__.py b/server/src/leap/soledad/server/__init__.py index cd006f51..adb5b561 100644 --- a/server/src/leap/soledad/server/__init__.py +++ b/server/src/leap/soledad/server/__init__.py @@ -296,10 +296,7 @@ def load_configuration(file_path): def application(environ, start_response): conf = load_configuration('/etc/leap/soledad-server.conf') - state = CouchServerState( - conf['couch_url'], - SoledadApp.SHARED_DB_NAME, - SoledadTokenAuthMiddleware.TOKENS_DB) + state = CouchServerState(conf['couch_url']) # WSGI application that may be used by `twistd -web` application = GzipMiddleware( SoledadTokenAuthMiddleware(SoledadApp(state))) |