[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