From kde-commits Fri Aug 07 19:57:14 2015 From: Valentin Rusu Date: Fri, 07 Aug 2015 19:57:14 +0000 To: kde-commits Subject: [ksecrets] src/runtime/ksecrets_backend: Backend open logic in place Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=143897744508579 Git commit c7d72fb2a7422737cd169fa8252f472d63bab689 by Valentin Rusu. Committed on 06/08/2015 at 22:26. Pushed by vrusu into branch 'master'. Backend open logic in place M +1 -1 src/runtime/ksecrets_backend/CMakeLists.txt M +58 -0 src/runtime/ksecrets_backend/ksecrets_backend.cpp M +16 -10 src/runtime/ksecrets_backend/ksecrets_backend.h M +8 -3 src/runtime/ksecrets_backend/ksecrets_backend_p.h http://commits.kde.org/ksecrets/c7d72fb2a7422737cd169fa8252f472d63bab689 diff --git a/src/runtime/ksecrets_backend/CMakeLists.txt b/src/runtime/ksec= rets_backend/CMakeLists.txt index 105271d..9c9c806 100644 --- a/src/runtime/ksecrets_backend/CMakeLists.txt +++ b/src/runtime/ksecrets_backend/CMakeLists.txt @@ -6,7 +6,7 @@ set(ksecrets_backend_SRC ksecrets_backend.cpp) = add_library(ksecrets_backend SHARED ${ksecrets_backend_SRC}) -target_link_libraries(ksecrets_backend) +target_link_libraries(ksecrets_backend pthread) target_compile_features(ksecrets_backend PRIVATE cxx_range_for) set_target_properties(ksecrets_backend PROPERTIES PREFIX "") = diff --git a/src/runtime/ksecrets_backend/ksecrets_backend.cpp b/src/runtim= e/ksecrets_backend/ksecrets_backend.cpp index a75dbde..876614e 100644 --- a/src/runtime/ksecrets_backend/ksecrets_backend.cpp +++ b/src/runtime/ksecrets_backend/ksecrets_backend.cpp @@ -22,4 +22,62 @@ #include "ksecrets_backend.h" #include "ksecrets_backend_p.h" = +#include +#include +#include = +KSecretsBackendPrivate::KSecretsBackendPrivate(KSecretsBackend* b) + : b_(b) +{ +} + +KSecretsBackend::KSecretsBackend() + : d(new KSecretsBackendPrivate(this)) +{ +} + +KSecretsBackend::~KSecretsBackend() =3D default; + +std::future KSecretsBackend::open( + std::string&& path, bool readonly /* =3Dtrue */) noexcept +{ + // sanity checks + if (path.empty()) { + return std::async(std::launch::deferred, []() { + return OpenResult{ OpenResult::OpenStatus::NoPathGiven, 0 }; + }); + } + + struct stat buf; + if (stat(path.c_str(), &buf) !=3D 0) { + auto err =3D errno; + return std::async(std::launch::deferred, [err]() { + return OpenResult{ OpenResult::OpenStatus::SystemError, errno = }; + }); + } + + // now we can proceed + auto localThis =3D this; + if (!readonly) { + return std::async(std::launch::async, + [localThis, path]() { return localThis->d->lock_open(path); }); + } + else { + return std::async(std::launch::deferred, + [localThis, path]() { return localThis->d->open(path); }); + } +} + +KSecretsBackend::OpenResult KSecretsBackendPrivate::lock_open( + const std::string& path) +{ + // TODO + return { KSecretsBackend::OpenResult::OpenStatus::Good, 0}; +} + +KSecretsBackend::OpenResult KSecretsBackendPrivate::open( + const std::string& path) +{ + // TODO + return { KSecretsBackend::OpenResult::OpenStatus::Good, 0}; +} diff --git a/src/runtime/ksecrets_backend/ksecrets_backend.h b/src/runtime/= ksecrets_backend/ksecrets_backend.h index 22b2441..fa6b9ef 100644 --- a/src/runtime/ksecrets_backend/ksecrets_backend.h +++ b/src/runtime/ksecrets_backend/ksecrets_backend.h @@ -27,6 +27,8 @@ #include #include = +class KSecretsBackendPrivate; + /** * Secrets storage for KSecrets Service. * @@ -75,7 +77,6 @@ * would be destroyed, releasing the file, upon block exit. */ class KSecretsBackend { - class KSecretsBackendPrivate; class ItemPrivate; class CollectionPrivate; = @@ -218,16 +219,21 @@ public: */ KSecretsBackend(); KSecretsBackend(const KSecretsBackend&) =3D delete; - virtual ~KSecretsBackend() =3D default; - - enum class OpenStatus { - Good, - NoPathGiven, - FileLocked, - FileNotFound, - PermissionDeniedByTheSystem + virtual ~KSecretsBackend(); + + struct OpenResult { + enum class OpenStatus { + Good, + NoPathGiven, + FileLocked, + SystemError // @see + }; + + OpenStatus status_; + int errno_; }; - std::future open( + + std::future open( std::string&&, bool readOnly =3D true) noexcept; std::vector dirCollections() noexcept; /* diff --git a/src/runtime/ksecrets_backend/ksecrets_backend_p.h b/src/runtim= e/ksecrets_backend/ksecrets_backend_p.h index 0f8be59..156a9f1 100644 --- a/src/runtime/ksecrets_backend/ksecrets_backend_p.h +++ b/src/runtime/ksecrets_backend/ksecrets_backend_p.h @@ -21,12 +21,17 @@ #ifndef KSECRETSBACKEND_P_H #define KSECRETSBACKEND_P_H = -class KSecretsBackend; +#include "ksecrets_backend.h" = class KSecretsBackendPrivate { - KSecretsBackendPrivate(KSecretsBackend*); -}; +public: + KSecretsBackendPrivate() =3D delete; + explicit KSecretsBackendPrivate(KSecretsBackend*); = + KSecretsBackend::OpenResult lock_open(const std::string&); + KSecretsBackend::OpenResult open(const std::string&); = + KSecretsBackend* b_; +}; = #endif