1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-02-28 00:36:33 +00:00

Add a method to detect out of date binary extension modules

This commit is contained in:
Jonas Borgström 2014-03-18 22:04:08 +01:00
parent e398d5f632
commit 92c333c071
5 changed files with 23 additions and 2 deletions

View file

@ -16,7 +16,7 @@
from attic.helpers import Error, location_validator, format_time, \ from attic.helpers import Error, location_validator, format_time, \
format_file_mode, ExcludePattern, exclude_path, adjust_patterns, to_localtime, \ format_file_mode, ExcludePattern, exclude_path, adjust_patterns, to_localtime, \
get_cache_dir, get_keys_dir, format_timedelta, prune_within, prune_split, \ get_cache_dir, get_keys_dir, format_timedelta, prune_within, prune_split, \
Manifest, remove_surrogates, update_excludes, format_archive Manifest, remove_surrogates, update_excludes, format_archive, check_extension_modules
from attic.remote import RepositoryServer, RemoteRepository from attic.remote import RepositoryServer, RemoteRepository
@ -399,6 +399,7 @@ def preprocess_args(self, args):
return args return args
def run(self, args=None): def run(self, args=None):
check_extension_modules()
keys_dir = get_keys_dir() keys_dir = get_keys_dir()
if not os.path.exists(keys_dir): if not os.path.exists(keys_dir):
os.makedirs(keys_dir) os.makedirs(keys_dir)

View file

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
API_VERSION = 1
from libc.stdlib cimport free from libc.stdlib cimport free
cdef extern from "_chunker.c": cdef extern from "_chunker.c":

View file

@ -3,10 +3,11 @@
This could be replaced by PyCrypto or something similar when the performance This could be replaced by PyCrypto or something similar when the performance
of their PBKDF2 implementation is comparable to the OpenSSL version. of their PBKDF2 implementation is comparable to the OpenSSL version.
""" """
from libc.string cimport memcpy from libc.string cimport memcpy
from libc.stdlib cimport malloc, free from libc.stdlib cimport malloc, free
API_VERSION = 1
cdef extern from "openssl/rand.h": cdef extern from "openssl/rand.h":
int RAND_bytes(unsigned char *buf,int num) int RAND_bytes(unsigned char *buf,int num)

View file

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
API_VERSION = 1
cdef extern from "_hashindex.c": cdef extern from "_hashindex.c":
ctypedef struct HashIndex: ctypedef struct HashIndex:

View file

@ -13,6 +13,10 @@
from operator import attrgetter from operator import attrgetter
import fcntl import fcntl
import attic.hashindex
import attic.chunker
import attic.crypto
class Error(Exception): class Error(Exception):
"""Error base class""" """Error base class"""
@ -23,6 +27,10 @@ def get_message(self):
return 'Error: ' + type(self).__doc__.format(*self.args) return 'Error: ' + type(self).__doc__.format(*self.args)
class ExtensionModuleError(Error):
"""The Attic binary extension modules does not seem to be properly installed"""
class UpgradableLock: class UpgradableLock:
class LockUpgradeFailed(Error): class LockUpgradeFailed(Error):
@ -52,6 +60,13 @@ def release(self):
self.fd.close() self.fd.close()
def check_extension_modules():
if (attic.hashindex.API_VERSION != 1 or
attic.chunker.API_VERSION != 1 or
attic.crypto.API_VERSION != 1):
raise ExtensionModuleError
class Manifest: class Manifest:
MANIFEST_ID = b'\0' * 32 MANIFEST_ID = b'\0' * 32