[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [ksecrets] src/runtime/ksecrets_backend: Backend open logic in place
From: Valentin Rusu <kde () rusu ! info>
Date: 2015-08-07 19:57:14
Message-ID: E1ZNnlS-0002yB-CF () scm ! kde ! org
[Download RAW message or body]
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/ksecrets_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/runtime/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 <future>
+#include <thread>
+#include <sys/stat.h>
+KSecretsBackendPrivate::KSecretsBackendPrivate(KSecretsBackend* b)
+ : b_(b)
+{
+}
+
+KSecretsBackend::KSecretsBackend()
+ : d(new KSecretsBackendPrivate(this))
+{
+}
+
+KSecretsBackend::~KSecretsBackend() = default;
+
+std::future<KSecretsBackend::OpenResult> KSecretsBackend::open(
+ std::string&& path, bool readonly /* =true */) 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) != 0) {
+ auto err = errno;
+ return std::async(std::launch::deferred, [err]() {
+ return OpenResult{ OpenResult::OpenStatus::SystemError, errno };
+ });
+ }
+
+ // now we can proceed
+ auto localThis = 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 <vector>
#include <future>
+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&) = delete;
- virtual ~KSecretsBackend() = 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<OpenStatus> open(
+
+ std::future<OpenResult> open(
std::string&&, bool readOnly = true) noexcept;
std::vector<std::string> dirCollections() noexcept;
/*
diff --git a/src/runtime/ksecrets_backend/ksecrets_backend_p.h b/src/runtime/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() = delete;
+ explicit KSecretsBackendPrivate(KSecretsBackend*);
+ KSecretsBackend::OpenResult lock_open(const std::string&);
+ KSecretsBackend::OpenResult open(const std::string&);
+ KSecretsBackend* b_;
+};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic