[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [ksecrets] /: Several things done here
From: Valentin Rusu <kde () rusu ! info>
Date: 2015-08-02 23:00:25
Message-ID: E1ZM2Ez-0000YA-OH () scm ! kde ! org
[Download RAW message or body]
Git commit dbec7570007c6052615a88088ccfe4dffc5e22bb by Valentin Rusu.
Committed on 02/08/2015 at 22:57.
Pushed by vrusu into branch 'master'.
Several things done here
Letting user specify the secrets file location
Renaming the ksecrets-crypt library to ksecrets_crypt
Removed the mkpath C library and replaced the logic with Qt code
M +1 -12 CMakeLists.txt
M +2 -1 autotests/api/CMakeLists.txt
M +1 -0 autotests/api/ksecretsservice-test.cpp
M +14 -24 src/api/ksecrets/CMakeLists.txt
M +2 -4 src/api/ksecrets/ksecretscollection.cpp
M +0 -1 src/api/ksecrets/ksecretscollection_p.h
M +0 -1 src/api/ksecrets/ksecretsitem_p.h
M +10 -4 src/runtime/ksecrets-crypt/CMakeLists.txt
M +15 -58 src/runtime/ksecrets-crypt/ksecrets-crypt.c
M +1 -1 src/runtime/pam-ksecrets/CMakeLists.txt
http://commits.kde.org/ksecrets/dbec7570007c6052615a88088ccfe4dffc5e22bb
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e417f1e..f5a48e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@ find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED
option(BUILD_TESTS "Build KSecrets with unit tests" ON)
-set(KF5_VERSION "5.12.0")
+set(KF5_VERSION "5.13.0")
include(KDEInstallDirs)
include(KDEFrameworkCompilerSettings)
include(KDECMakeSettings)
@@ -30,17 +30,6 @@ include(GenerateExportHeader)
include(ECMSetupVersion)
include(ECMGenerateHeaders)
-if(NOT kdelibs_SOURCE_DIR)
- find_package(KF5 ${KF5_VERSION} REQUIRED
- CoreAddons
- WidgetsAddons
- Service
- Config
- WindowSystem
- I18n
- )
-endif()
-
add_subdirectory(src)
diff --git a/autotests/api/CMakeLists.txt b/autotests/api/CMakeLists.txt
index b956669..910a0b8 100644
--- a/autotests/api/CMakeLists.txt
+++ b/autotests/api/CMakeLists.txt
@@ -1,10 +1,11 @@
include(ECMMarkAsTest)
-
include(ECMAddTests)
find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Test)
+include_directories(${CMAKE_SOURCE_DIR}/src/runtime/ksecrets-crypt)
+
if(NOT Qt5Test_FOUND)
message(STATUS "Qt5Test not found, autotests will not be built.")
return()
diff --git a/autotests/api/ksecretsservice-test.cpp b/autotests/api/ksecretsservice-test.cpp
index 00c1616..de29c3e 100644
--- a/autotests/api/ksecretsservice-test.cpp
+++ b/autotests/api/ksecretsservice-test.cpp
@@ -24,6 +24,7 @@
#include <ksecretscollection.h>
#include <ksecretsvalue.h>
#include <ksecretsitem.h>
+#include <ksecrets-crypt.h>
#include <QtTest/QTest>
#include <QDebug>
diff --git a/src/api/ksecrets/CMakeLists.txt b/src/api/ksecrets/CMakeLists.txt
index c96e682..79cdcac 100644
--- a/src/api/ksecrets/CMakeLists.txt
+++ b/src/api/ksecrets/CMakeLists.txt
@@ -10,6 +10,11 @@ ecm_setup_version(${KF5_VERSION} VARIABLE_PREFIX KSECRETS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/ksecrets_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5SecretsConfigVersion.cmake")
+set(KF5_DEP_VERSION "5.12.0")
+find_package(KF5I18n ${KF5_DEP_VERSION} REQUIRED)
+find_package(KF5CoreAddons ${KF5_DEP_VERSION} REQUIRED)
+find_package(KF5Service ${KF5_DEP_VERSION} REQUIRED)
+
# create a Config.cmake and a ConfigVersion.cmake file and install them
set(CMAKECONFIG_INSTALL_DIR "${CMAKECONFIG_INSTALL_PREFIX}/KF5Secrets")
@@ -41,13 +46,8 @@ endif()
set (ksecrets_SRCS
ksecretsservice.cpp
ksecretsitem.cpp
- # ksecretsserviceitemjobs.cpp
ksecretsvalue.cpp
ksecretscollection.cpp
- # ksecretsservicecollectionjobs.cpp
- # ksecretsservicecodec.cpp
- # dbusbackend.cpp
- # promptjob.cpp
)
add_library(KF5Secrets SHARED ${ksecrets_SRCS})
@@ -58,7 +58,6 @@ target_include_directories(KF5Secrets INTERFACE "$<INSTALL_INTERFACE:${INCLUDE_I
target_link_libraries(KF5Secrets PUBLIC
Qt5::Widgets
- Qt5::DBus
Qt5::Concurrent
KF5::I18n
KF5::CoreAddons
@@ -73,12 +72,13 @@ set_target_properties(KF5Secrets PROPERTIES VERSION ${KSECRETS_VERSION_STRING}
ecm_generate_headers(
KSecrets_HEADERS
HEADER_NAMES
+ KSecretsService
KSecretsCollection
+ KSecretsItem
+ KSecretsValue
REQUIRED_HEADERS KSecrets_HEADERS
)
-#install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/KSecrets DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)
-
install(TARGETS KF5Secrets EXPORT KF5SecretsTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES
@@ -87,20 +87,10 @@ install(FILES
DESTINATION ${INCLUDE_INSTALL_DIR}/KSecrets COMPONENT Devel
)
-# INSTALL(FILES
-# ksecretsservicecollection.h
-# ksecretsservicecollectionjobs.h
-# ksecretsserviceitem.h
-# ksecretsserviceitemjobs.h
-# ksecretsservicesecret.h
-# ksecretsservicedbustypes.h
-# ksecretsservicecodec.h
-# DESTINATION ${INCLUDE_INSTALL_DIR}/ksecretsservice COMPONENT Devel
-# )
-#
-# INSTALL(FILES
-# ksecretsservicedbustypes.h
-# ksecretsservicecodec.h
-# DESTINATION ${INCLUDE_INSTALL_DIR}/ksecretsservice/private COMPONENT Devel
-# )
+INSTALL(FILES
+ ksecretscollection.h
+ ksecretsitem.h
+ ksecretsvalue.h
+ DESTINATION ${INCLUDE_INSTALL_DIR}/ksecretsservice COMPONENT Devel
+)
diff --git a/src/api/ksecrets/ksecretscollection.cpp b/src/api/ksecrets/ksecretscollection.cpp
index 8954312..a579a31 100644
--- a/src/api/ksecrets/ksecretscollection.cpp
+++ b/src/api/ksecrets/ksecretscollection.cpp
@@ -156,10 +156,8 @@ void CollectionPrivate::setStatus(Collection::Status newStatus)
bool CollectionPrivate::isValid()
{
- // TODO figure out if something should be checked here
- // otherways, let this like this as it'll be overriden in the dbus related
- // class
- return false;
+ return (collectionStatus == Collection::NewlyCreated)
+ || (collectionStatus == Collection::FoundExisting);
}
QFuture<bool> Collection::isValid()
diff --git a/src/api/ksecrets/ksecretscollection_p.h b/src/api/ksecrets/ksecretscollection_p.h
index dec4c99..b989f08 100644
--- a/src/api/ksecrets/ksecretscollection_p.h
+++ b/src/api/ksecrets/ksecretscollection_p.h
@@ -24,7 +24,6 @@
#include "ksecretscollection.h"
-#include <QDBusObjectPath>
#include <QString>
#include <QDateTime>
diff --git a/src/api/ksecrets/ksecretsitem_p.h b/src/api/ksecrets/ksecretsitem_p.h
index 2556943..71e69f5 100644
--- a/src/api/ksecrets/ksecretsitem_p.h
+++ b/src/api/ksecrets/ksecretsitem_p.h
@@ -22,7 +22,6 @@
#define KSECRETSITEM_P_H
#include "ksecretsitem.h"
-#include <QDBusObjectPath>
#include <QSharedData>
namespace KSecrets {
diff --git a/src/runtime/ksecrets-crypt/CMakeLists.txt b/src/runtime/ksecrets-crypt/CMakeLists.txt
index f53979a..7d87137 100644
--- a/src/runtime/ksecrets-crypt/CMakeLists.txt
+++ b/src/runtime/ksecrets-crypt/CMakeLists.txt
@@ -7,9 +7,15 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_KSECRETS_CRYPT_FLAGS}")
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" )
find_package(LibGcrypt 1.6.0 REQUIRED)
-set(ksecrets-crypt_SRC
- ksecrets-crypt.c)
+set(KF5_DEP_VERSION "5.12.0")
+find_package(KF5Config ${KF5_DEP_VERSION} REQUIRED)
-add_library(ksecrets-crypt STATIC ${ksecrets-crypt_SRC})
-set_target_properties(ksecrets-crypt PROPERTIES PREFIX "")
+remove_definitions(-DQT_NO_CAST_FROM_ASCII)
+set(ksecrets_crypt_SRC
+ ksecrets-crypt.c
+ config.cpp)
+
+add_library(ksecrets_crypt STATIC ${ksecrets_crypt_SRC})
+target_link_libraries(ksecrets_crypt PRIVATE KF5::ConfigCore)
+set_target_properties(ksecrets_crypt PROPERTIES PREFIX "")
diff --git a/src/runtime/ksecrets-crypt/ksecrets-crypt.c b/src/runtime/ksecrets-crypt/ksecrets-crypt.c
index 7619f67..ee390cd 100644
--- a/src/runtime/ksecrets-crypt/ksecrets-crypt.c
+++ b/src/runtime/ksecrets-crypt/ksecrets-crypt.c
@@ -17,7 +17,6 @@
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
-
#include "ksecrets-crypt.h"
#include <unistd.h>
@@ -26,6 +25,7 @@
#include <libgen.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <linux/limits.h>
#include <pwd.h>
#include <string.h>
#include <keyutils.h>
@@ -33,7 +33,7 @@
#define GCRPYT_NO_DEPRECATED
#include <gcrypt.h>
-#define GCRYPT_VERSION "1.6.0"
+#define GCRYPT_REQUIRED_VERSION "1.6.0"
#define KSS_LOG_DEBUG (LOG_AUTH | LOG_DEBUG)
#define KSS_LOG_INFO (LOG_AUTH | LOG_INFO)
@@ -46,47 +46,12 @@
#define KSS_KEY_TYPE_ENCRYPT "ksecrets:encrypting"
#define KSS_KEY_TYPE_MAC "ksecrets:mac"
-int mkpath(char* path, struct passwd* user_info)
-{
- struct stat sb;
- char* slash;
- int done = 0;
-
- slash = path;
-
- while (!done) {
- slash += strspn(slash, "/");
- slash += strcspn(slash, "/");
-
- done = (*slash == '\0');
- *slash = '\0';
-
- if (stat(path, &sb)) {
- if (errno != ENOENT || (mkdir(path, 0777) && errno != EEXIST)) {
- syslog(LOG_ERR, "Couldn't create directory: %s because: %d-%s", path,
- errno, strerror(errno));
- return (-1);
- }
- else {
- if (chown(path, user_info->pw_uid, user_info->pw_gid) == -1) {
- syslog(LOG_INFO, "Couldn't change ownership of: %s", path);
- }
- }
- }
- else if (!S_ISDIR(sb.st_mode)) {
- return (-1);
- }
-
- *slash = '/';
- }
-
- return (0);
-}
+extern const char* prepare_secret_file_location(const char*);
bool kss_init_gcry()
{
syslog(KSS_LOG_DEBUG, "setting-up grypt library");
- if (!gcry_check_version(GCRYPT_VERSION)) {
+ if (!gcry_check_version(GCRYPT_REQUIRED_VERSION)) {
syslog(KSS_LOG_ERR, "kwalletd: libcrypt version is too old");
return false;
}
@@ -103,8 +68,6 @@ bool kss_init_gcry()
return true;
}
-const char* secrets_file_path();
-
/**
* This function reads the crypting salt from the main ksecrets data file
* If the file is not present, then it is created. This case should happen
@@ -114,8 +77,6 @@ const char* secrets_file_path();
* first usage.
*
* NOTE This function has code from pam-kwallet
- * TODO adapt this code to enable configuration of the salt file path from the
- * PAM module command line
*/
bool kss_get_salt(const char* username, char** salt)
{
@@ -131,19 +92,19 @@ bool kss_get_salt(const char* username, char** salt)
return false;
}
- /* FIXME this path should be configurable in a future version */
- char* fixpath = secrets_file_path();
- char* path = (char*)malloc(
- strlen(user_info->pw_dir) + strlen(fixpath) + 2); /* 2 == / and \0 */
- sprintf(path, "%s/%s", user_info->pw_dir, fixpath);
-
struct stat info;
+ if (stat(user_info->pw_dir, &info) != 0) {
+ syslog(KSS_LOG_ERR, "pam_kwallet: Cannot stat user directory");
+ return false;
+ }
+
+ const char* path = prepare_secret_file_location(user_info->pw_dir);
+
*salt = NULL;
if (stat(path, &info) != 0 || info.st_size == 0) {
unlink(path); /* in case the file already exists and it has size of 0 */
- const char* dir = dirname(path);
- mkpath(dir, user_info); /* create the path in case it does not exists */
+ const char* dir = dirname((char*)path);
*salt = gcry_random_bytes(KSECRETS_SALTSIZE, GCRY_STRONG_RANDOM);
FILE* fd = fopen(path, "w");
@@ -200,7 +161,7 @@ bool kss_derive_keys(const char* user_name, const char* password,
if (!kss_init_gcry())
return false;
- const char* salt;
+ char* salt;
salt = 0;
if (!kss_get_salt(user_name, &salt))
return false;
@@ -252,7 +213,7 @@ bool kss_store_keys(const char* encryption_key, const char* mac_key)
bool kss_keys_already_there()
{
- struct key* key;
+ key_serial_t key;
key = request_key(KSS_KEY_TYPE_ENCRYPT, 0, 0, KEY_SPEC_SESSION_KEYRING);
if (-1 == key) {
syslog(KSS_LOG_DEBUG, "request_key failed with errno %d", errno);
@@ -290,13 +251,9 @@ bool kss_can_change_password()
return true;
}
-bool kss_change_password(const char* password)
+bool kss_change_password(const char* new_password)
{
syslog(LOG_INFO, "kss_change_password");
return true;
}
-const char* secrets_file_path()
-{
- return ".local/share/ksecretsd/ksecrets.data";
-}
diff --git a/src/runtime/pam-ksecrets/CMakeLists.txt b/src/runtime/pam-ksecrets/CMakeLists.txt
index d591c4e..b1e8a50 100644
--- a/src/runtime/pam-ksecrets/CMakeLists.txt
+++ b/src/runtime/pam-ksecrets/CMakeLists.txt
@@ -20,7 +20,7 @@ set(pam_ksecret_SRC
add_library(pam_ksecrets SHARED ${pam_ksecret_SRC})
set_target_properties(pam_ksecrets PROPERTIES PREFIX "")
target_link_libraries(pam_ksecrets
- ksecrets-crypt
+ ksecrets_crypt
${LIBGCRYPT_LIBRARIES}
${PAM_LIBRARIES}
keyutils)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic