diff -Nru kldap-16.04.3/.arcconfig kldap-16.12.3/.arcconfig --- kldap-16.04.3/.arcconfig 2016-06-15 04:39:11.000000000 +0000 +++ kldap-16.12.3/.arcconfig 2017-02-14 12:30:10.000000000 +0000 @@ -1,4 +1,3 @@ { - "phabricator.uri" : "https://phabricator.kde.org/project/profile/34/", - "history.immutable" : true + "phabricator.uri": "https://phabricator.kde.org/project/profile/34/" } diff -Nru kldap-16.04.3/CMakeLists.txt kldap-16.12.3/CMakeLists.txt --- kldap-16.04.3/CMakeLists.txt 2016-06-15 04:39:11.000000000 +0000 +++ kldap-16.12.3/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -3,7 +3,8 @@ project(KLdap) # ECM setup -find_package(ECM 5.19.0 CONFIG REQUIRED) +set(KF5_VERSION "5.28.0") +find_package(ECM ${KF5_VERSION} CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${KLdap_SOURCE_DIR}/cmake ${ECM_MODULE_PATH}) include(GenerateExportHeader) @@ -17,8 +18,17 @@ include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(ECMQtDeclareLoggingCategory) -set(KF5_VERSION "5.19.0") -set(KLDAP_LIB_VERSION "5.2.3") +set(PIM_VERSION "5.4.3") + +set(KLDAP_LIB_VERSION ${PIM_VERSION}) +set(MBOXLIB_VERSION "5.4.3") + +find_package(KF5KIO ${KF5_VERSION} CONFIG REQUIRED) +find_package(KF5I18n ${KF5_VERSION} CONFIG REQUIRED) +find_package(KF5DocTools ${KF5_VERSION} CONFIG REQUIRED) +find_package(KF5Mbox ${MBOXLIB_VERSION} CONFIG REQUIRED) +add_definitions("-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII") + ecm_setup_version(${KLDAP_LIB_VERSION} VARIABLE_PREFIX KLDAP VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kldap_version.h" @@ -79,9 +89,11 @@ ########### Targets ########### add_subdirectory(cmake) add_subdirectory(src) - +add_subdirectory(kioslave) if(BUILD_TESTING) add_subdirectory(autotests) endif() +install( FILES kldap.renamecategories kldap.categories DESTINATION ${KDE_INSTALL_CONFDIR} ) + feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff -Nru kldap-16.04.3/debian/changelog kldap-16.12.3/debian/changelog --- kldap-16.04.3/debian/changelog 2016-09-30 04:33:11.000000000 +0000 +++ kldap-16.12.3/debian/changelog 2017-05-01 19:26:36.000000000 +0000 @@ -1,3 +1,21 @@ +kldap (16.12.3-0ubuntu1) artful; urgency=medium + + [ José Manuel Santamaría Lema ] + * Update Vcs-Git fields to use https:// instead of git:// + * Pass '-fno-keep-inline-functions' to gcc in the acc test in order to + avoid possible spurious test failures. + * New upstream release (16.12.3) + + [ Rik Mills ] + * New upstream release (16.12.0) + * Update build deps to use new KF5 style names + * New upstream release (16.12.1) + + [ Darin Miller ] + * New upstream release (16.12.2) + + -- José Manuel Santamaría Lema Mon, 01 May 2017 20:26:36 +0100 + kldap (16.04.3-0ubuntu1) yakkety; urgency=medium [ Scarlett Clark ] @@ -15,6 +33,13 @@ [ Clive Johnston ] * New upstream release (16.04.2) * New upstream release (16.04.3) + * Adding new build dep kio-dev + + [ Rik Mills ] + * New build depends + * Re-add build depend on kio-dev + * More build depends + * Add new kio-ldap package -- José Manuel Santamaría Lema Fri, 30 Sep 2016 06:33:11 +0200 @@ -27,9 +52,13 @@ kldap (15.12.1-0ubuntu1) xenial; urgency=medium + [ Scarlett Clark ] * Debian merge, No remaining changes. * New upstream release. + [ Clive Johnston ] + * Fixing install file + -- Scarlett Clark Wed, 09 Mar 2016 10:49:26 +0100 kldap (15.12.0-1) experimental; urgency=medium diff -Nru kldap-16.04.3/debian/control kldap-16.12.3/debian/control --- kldap-16.04.3/debian/control 2016-09-30 04:33:11.000000000 +0000 +++ kldap-16.12.3/debian/control 2017-05-01 19:26:36.000000000 +0000 @@ -5,10 +5,13 @@ Uploaders: Maximiliano Curia Build-Depends: cmake (>= 2.8.12~), debhelper (>= 9), - extra-cmake-modules (>= 5.24.0~), - libkf5completion-dev (>= 5.24.0~), - libkf5i18n-dev (>= 5.24.0~), - libkf5widgetsaddons-dev (>= 5.24.0~), + extra-cmake-modules (>= 5.31.0~), + libkf5completion-dev (>= 5.31.0~), + libkf5doctools-dev (>= 5.31.0~), + libkf5i18n-dev (>= 5.31.0~), + libkf5kio-dev (>= 5.31.0~), + libkf5mbox-dev (>= 16.12.3~), + libkf5widgetsaddons-dev (>= 5.31.0~), libldap2-dev, libsasl2-dev, pkg-kde-tools (>> 0.15.15), @@ -16,7 +19,20 @@ Standards-Version: 3.9.6 Homepage: https://projects.kde.org/projects/kde/pim/kldap Vcs-Browser: https://code.launchpad.net/~kubuntu-packagers/kubuntu-packaging/+git/kldap -Vcs-Git: git://git.launchpad.net/~kubuntu-packagers/kubuntu-packaging/+git/kldap +Vcs-Git: https://git.launchpad.net/~kubuntu-packagers/kubuntu-packaging/+git/kldap + +Package: kio-ldap +Architecture: any +Multi-Arch: no +Depends: ${misc:Depends}, ${shlibs:Depends} +Replaces: kdepimlibs-kio-plugins, kf5-kdepimlibs-kio-plugins +Breaks: kdepimlibs-kio-plugins, kf5-kdepimlibs-kio-plugins +Description: library for accessing LDAP - development files + This is a library for accessing LDAP with a convenient Qt style C++ API. + LDAP (Lightweight Directory Access Protocol) is an application protocol + for querying and modifying directory services running over TCP/IP. + . + This package contains the KIO slave. Package: libkf5ldap-dev Section: libdevel @@ -25,7 +41,7 @@ Depends: libkf5ldap5 (= ${binary:Version}), libldap2-dev, libsasl2-dev, - qtbase5-dev, + qtbase5-dev (>= 5.6.1~), ${misc:Depends} Description: library for accessing LDAP - development files This is a library for accessing LDAP with a convenient Qt style C++ API. diff -Nru kldap-16.04.3/debian/kio-ldap.install kldap-16.12.3/debian/kio-ldap.install --- kldap-16.04.3/debian/kio-ldap.install 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/debian/kio-ldap.install 2017-05-01 19:26:36.000000000 +0000 @@ -0,0 +1,7 @@ +etc/xdg/kldap.categories +etc/xdg/kldap.renamecategories +usr/lib/*/qt5/plugins/kf5/kio/ldap.so +usr/share/doc/HTML/en/kioslave5/ldap/index.cache.bz2 +usr/share/doc/HTML/en/kioslave5/ldap/index.docbook +usr/share/kservices5/ldap.protocol +usr/share/kservices5/ldaps.protocol diff -Nru kldap-16.04.3/debian/libkf5ldap5.install kldap-16.12.3/debian/libkf5ldap5.install --- kldap-16.04.3/debian/libkf5ldap5.install 2016-09-30 04:33:11.000000000 +0000 +++ kldap-16.12.3/debian/libkf5ldap5.install 2017-05-01 19:26:36.000000000 +0000 @@ -1,2 +1,2 @@ -usr/lib/*/libKF5Ldap.so.5.* usr/lib/*/libKF5Ldap.so.5 +usr/lib/*/libKF5Ldap.so.5.* diff -Nru kldap-16.04.3/debian/libkf5ldap-dev.acc.in kldap-16.12.3/debian/libkf5ldap-dev.acc.in --- kldap-16.04.3/debian/libkf5ldap-dev.acc.in 2016-09-30 04:33:11.000000000 +0000 +++ kldap-16.12.3/debian/libkf5ldap-dev.acc.in 2017-05-01 19:26:36.000000000 +0000 @@ -1,4 +1,4 @@ - + @@ -15,6 +15,7 @@ -fPIC + -fno-keep-inline-functions - + \ No newline at end of file diff -Nru kldap-16.04.3/kioslave/CMakeLists.txt kldap-16.12.3/kioslave/CMakeLists.txt --- kldap-16.04.3/kioslave/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,4 @@ +add_definitions("-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII") +add_subdirectory(src) +add_subdirectory(doc) + diff -Nru kldap-16.04.3/kioslave/doc/CMakeLists.txt kldap-16.12.3/kioslave/doc/CMakeLists.txt --- kldap-16.04.3/kioslave/doc/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/doc/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1 @@ +add_subdirectory(ldap) diff -Nru kldap-16.04.3/kioslave/doc/ldap/CMakeLists.txt kldap-16.12.3/kioslave/doc/ldap/CMakeLists.txt --- kldap-16.04.3/kioslave/doc/ldap/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/doc/ldap/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,3 @@ +########### install files ############### +kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kioslave5/ldap) + diff -Nru kldap-16.04.3/kioslave/doc/ldap/index.docbook kldap-16.12.3/kioslave/doc/ldap/index.docbook --- kldap-16.04.3/kioslave/doc/ldap/index.docbook 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/doc/ldap/index.docbook 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,30 @@ + + + +]> + +
+ldap + + +&Lauri.Watts; &Lauri.Watts.mail; + + + + +ldap is the lightweight directory access +protocol. It provides access to an X.500 directory, or to a stand-alone +LDAP server. + +You can use the ldap kioslave as follows: + +ldap://host:port/ou=People,o=where,c=de??sub +for a subtree-query + +or +ldap://host:port/cn=MM,ou=People,o=where,c=de??base +for a complete branch. + +
diff -Nru kldap-16.04.3/kioslave/kdepimlibs-kioslave.categories kldap-16.12.3/kioslave/kdepimlibs-kioslave.categories --- kldap-16.04.3/kioslave/kdepimlibs-kioslave.categories 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/kdepimlibs-kioslave.categories 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,5 @@ +log_kldap kioslave (kldap) +log_sieve kioslave (sieve) +log_smtp kioslave (smtp) +log_pop3 kioslave (pop3) + diff -Nru kldap-16.04.3/kioslave/.krazy kldap-16.12.3/kioslave/.krazy --- kldap-16.04.3/kioslave/.krazy 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/.krazy 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1 @@ +SKIP /tests/ diff -Nru kldap-16.04.3/kioslave/.reviewboardrc kldap-16.12.3/kioslave/.reviewboardrc --- kldap-16.04.3/kioslave/.reviewboardrc 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/.reviewboardrc 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,5 @@ +REVIEWBOARD_URL = "https://git.reviewboard.kde.org" +#REPOSITORY = "git://anongit.kde.org/kioslave" +BRANCH = "master" +TARGET_GROUPS = "kdepimlibs" +TARGET_PEOPLE = "mlaurent" diff -Nru kldap-16.04.3/kioslave/src/CMakeLists.txt kldap-16.12.3/kioslave/src/CMakeLists.txt --- kldap-16.04.3/kioslave/src/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,2 @@ +remove_definitions(-DQT_NO_CAST_FROM_BYTEARRAY) +add_subdirectory(ldap) diff -Nru kldap-16.04.3/kioslave/src/common.h kldap-16.12.3/kioslave/src/common.h --- kldap-16.04.3/kioslave/src/common.h 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/common.h 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,50 @@ +/* This file is part of the KDE project + Copyright (C) 2008 Jarosław Staniek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef _KIOSLAVE_COMMON_H +#define _KIOSLAVE_COMMON_H + +#include +#include +#include + +extern "C" { +#include +} + +inline bool initSASL() +{ +#ifdef Q_OS_WIN32 //krazy:exclude=cpp + QByteArray libInstallPath(QFile::encodeName(QDir::toNativeSeparators(KGlobal::dirs()->installPath("lib") + QLatin1String("sasl2")))); + QByteArray configPath(QFile::encodeName(QDir::toNativeSeparators(KGlobal::dirs()->installPath("config") + QLatin1String("sasl2")))); + if (sasl_set_path(SASL_PATH_TYPE_PLUGIN, libInstallPath.data()) != SASL_OK || + sasl_set_path(SASL_PATH_TYPE_CONFIG, configPath.data()) != SASL_OK) { + fprintf(stderr, "SASL path initialization failed!\n"); + return false; + } +#endif + + if (sasl_client_init(NULL) != SASL_OK) { + fprintf(stderr, "SASL library initialization failed!\n"); + return false; + } + return true; +} + +#endif diff -Nru kldap-16.04.3/kioslave/src/ldap/CMakeLists.txt kldap-16.12.3/kioslave/src/ldap/CMakeLists.txt --- kldap-16.04.3/kioslave/src/ldap/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/ldap/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,14 @@ + +set(kio_ldap_PART_SRCS kio_ldap.cpp) +ecm_qt_declare_logging_category(kio_ldap_PART_SRCS HEADER kldap_debug.h IDENTIFIER KLDAP_LOG CATEGORY_NAME org.kde.pim.kldap) + +add_library(kio_ldap MODULE ${kio_ldap_PART_SRCS}) + +target_link_libraries(kio_ldap KF5::KIOCore KF5::I18n KF5::Ldap KF5::Mbox) +set_target_properties(kio_ldap PROPERTIES OUTPUT_NAME "ldap") +install(TARGETS kio_ldap DESTINATION ${KDE_INSTALL_PLUGINDIR}/kf5/kio) + + +########### install files ############### + +install( FILES ldap.protocol ldaps.protocol DESTINATION ${KDE_INSTALL_KSERVICES5DIR} ) diff -Nru kldap-16.04.3/kioslave/src/ldap/kio_ldap.cpp kldap-16.12.3/kioslave/src/ldap/kio_ldap.cpp --- kldap-16.04.3/kioslave/src/ldap/kio_ldap.cpp 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/ldap/kio_ldap.cpp 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,819 @@ +/* + Copyright (c) 2004-2007 Szombathelyi György + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include "kio_ldap.h" +#include "kldap_debug.h" + +#include +#include + +#include +#include +#include + +#include +#include +#include + +using namespace KIO; +using namespace KLDAP; + +extern "C" { + int Q_DECL_EXPORT kdemain(int argc, char **argv); +} + +/** + * The main program. + */ +int kdemain(int argc, char **argv) +{ + QCoreApplication app(argc, argv); // needed for QSocketNotifier + app.setApplicationName(QStringLiteral("kio_ldap")); + + qCDebug(KLDAP_LOG) << "Starting kio_ldap instance"; + + if (argc != 4) { + qCritical() << "Usage kio_ldap protocol pool app" << endl; + return -1; + } + + // let the protocol class do its work + LDAPProtocol slave(argv[1], argv[2], argv[3]); + slave.dispatchLoop(); + + qCDebug(KLDAP_LOG) << "Done"; + return 0; +} + +/** + * Initialize the ldap slave + */ +LDAPProtocol::LDAPProtocol(const QByteArray &protocol, const QByteArray &pool, + const QByteArray &app) + : SlaveBase(protocol, pool, app) +{ + mConnected = false; + mOp.setConnection(mConn); + qCDebug(KLDAP_LOG) << "LDAPProtocol::LDAPProtocol (" << protocol << ")"; +} + +LDAPProtocol::~LDAPProtocol() +{ + closeConnection(); +} + +void LDAPProtocol::LDAPErr(int err) +{ + + QString extramsg; + if (mConnected) { + if (err == KLDAP_SUCCESS) { + err = mConn.ldapErrorCode(); + } + if (err != KLDAP_SUCCESS) { + extramsg = i18n("\nAdditional info: ") + mConn.ldapErrorString(); + } + } + if (err == KLDAP_SUCCESS) { + return; + } + + qDebug() << "error code: " << err << " msg: " << LdapConnection::errorString(err) << + extramsg << "'" << endl; + QString msg; + msg = mServer.url().toDisplayString(); + if (!extramsg.isEmpty()) { + msg += extramsg; + } + + /* FIXME: No need to close on all errors */ + closeConnection(); + + switch (err) { + /* FIXME: is it worth mapping the following error codes to kio errors? + + LDAP_OPERATIONS_ERROR + LDAP_STRONG_AUTH_REQUIRED + LDAP_PROTOCOL_ERROR + LDAP_TIMELIMIT_EXCEEDED + LDAP_SIZELIMIT_EXCEEDED + LDAP_COMPARE_FALSE + LDAP_COMPARE_TRUE + LDAP_PARTIAL_RESULTS + LDAP_NO_SUCH_ATTRIBUTE + LDAP_UNDEFINED_TYPE + LDAP_INAPPROPRIATE_MATCHING + LDAP_CONSTRAINT_VIOLATION + LDAP_INVALID_SYNTAX + LDAP_NO_SUCH_OBJECT + LDAP_ALIAS_PROBLEM + LDAP_INVALID_DN_SYNTAX + LDAP_IS_LEAF + LDAP_ALIAS_DEREF_PROBLEM + LDAP_INAPPROPRIATE_AUTH + LDAP_BUSY + LDAP_UNAVAILABLE + LDAP_UNWILLING_TO_PERFORM + LDAP_LOOP_DETECT + LDAP_NAMING_VIOLATION + LDAP_OBJECT_CLASS_VIOLATION + LDAP_NOT_ALLOWED_ON_NONLEAF + LDAP_NOT_ALLOWED_ON_RDN + LDAP_NO_OBJECT_CLASS_MODS + LDAP_OTHER + LDAP_LOCAL_ERROR + LDAP_ENCODING_ERROR + LDAP_DECODING_ERROR + LDAP_FILTER_ERROR + */ + case KLDAP_AUTH_UNKNOWN: + case KLDAP_INVALID_CREDENTIALS: + case KLDAP_STRONG_AUTH_NOT_SUPPORTED: + error(ERR_COULD_NOT_AUTHENTICATE, msg); + break; + case KLDAP_ALREADY_EXISTS: + error(ERR_FILE_ALREADY_EXIST, msg); + break; + case KLDAP_INSUFFICIENT_ACCESS: + error(ERR_ACCESS_DENIED, msg); + break; + case KLDAP_CONNECT_ERROR: + case KLDAP_SERVER_DOWN: + error(ERR_COULD_NOT_CONNECT, msg); + break; + case KLDAP_TIMEOUT: + error(ERR_SERVER_TIMEOUT, msg); + break; + case KLDAP_PARAM_ERROR: + error(ERR_INTERNAL, msg); + break; + case KLDAP_NO_MEMORY: + error(ERR_OUT_OF_MEMORY, msg); + break; + + default: + error(ERR_SLAVE_DEFINED, + i18n("LDAP server returned the error: %1 %2\nThe LDAP URL was: %3", + LdapConnection::errorString(err), extramsg, mServer.url().toDisplayString())); + } +} + +void LDAPProtocol::controlsFromMetaData(LdapControls &serverctrls, + LdapControls &clientctrls) +{ + QString oid; + bool critical; + QByteArray value; + int i = 0; + while (hasMetaData(QStringLiteral("SERVER_CTRL%1").arg(i))) { + QByteArray val = metaData(QStringLiteral("SERVER_CTRL%1").arg(i)).toUtf8(); + Ldif::splitControl(val, oid, critical, value); + qCDebug(KLDAP_LOG) << "server ctrl #" << i << " value: " << val << + " oid: " << oid << " critical: " << critical << " value: " << + QString::fromUtf8(value, value.size()) << endl; + LdapControl ctrl(oid, val, critical); + serverctrls.append(ctrl); + i++; + } + i = 0; + while (hasMetaData(QStringLiteral("CLIENT_CTRL%1").arg(i))) { + QByteArray val = metaData(QStringLiteral("CLIENT_CTRL%1").arg(i)).toUtf8(); + Ldif::splitControl(val, oid, critical, value); + qCDebug(KLDAP_LOG) << "client ctrl #" << i << " value: " << val << + " oid: " << oid << " critical: " << critical << " value: " << + QString::fromUtf8(value, value.size()) << endl; + LdapControl ctrl(oid, val, critical); + clientctrls.append(ctrl); + i++; + } + +} + +void LDAPProtocol::LDAPEntry2UDSEntry(const LdapDN &dn, UDSEntry &entry, + const LdapUrl &usrc, bool dir) +{ + int pos; + entry.clear(); + QString name = dn.toString(); + if ((pos = name.indexOf(QLatin1Char(','))) > 0) { + name = name.left(pos); + } + if ((pos = name.indexOf(QLatin1Char('='))) > 0) { + name.remove(0, pos + 1); + } + name.replace(QLatin1Char(' '), QLatin1String("_")); + if (!dir) { + name += QLatin1String(".ldif"); + } + entry.insert(KIO::UDSEntry::UDS_NAME, name); + + // the file type + entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, dir ? S_IFDIR : S_IFREG); + + // the mimetype + if (!dir) { + entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, QStringLiteral("text/plain")); + } + + entry.insert(KIO::UDSEntry::UDS_ACCESS, dir ? 0500 : 0400); + + // the url + LdapUrl url = usrc; + url.setPath(QLatin1Char('/') + dn.toString()); + url.setScope(dir ? LdapUrl::One : LdapUrl::Base); + entry.insert(KIO::UDSEntry::UDS_URL, url.toDisplayString()); +} + +void LDAPProtocol::changeCheck(const LdapUrl &url) +{ + LdapServer server; + server.setUrl(url); + + if (mConnected) { + if (server.host() != mServer.host() || + server.port() != mServer.port() || + server.baseDn() != mServer.baseDn() || + server.user() != mServer.user() || + server.bindDn() != mServer.bindDn() || + server.realm() != mServer.realm() || + server.password() != mServer.password() || + server.timeLimit() != mServer.timeLimit() || + server.sizeLimit() != mServer.sizeLimit() || + server.version() != mServer.version() || + server.security() != mServer.security() || + server.auth() != mServer.auth() || + server.mech() != mServer.mech()) { + + closeConnection(); + mServer = server; + openConnection(); + } + } else { + mServer = server; + openConnection(); + } +} + +void LDAPProtocol::setHost(const QString &host, quint16 port, + const QString &user, const QString &password) +{ + if (mServer.host() != host || + mServer.port() != port || + mServer.user() != user || + mServer.password() != password) { + closeConnection(); + } + + mServer.host() = host; + if (port > 0) { + mServer.setPort(port); + } else { + struct servent *pse; + if ((pse = getservbyname(mProtocol, "tcp")) == NULL) { + if (mProtocol == "ldaps") { + mServer.setPort(636); + } else { + mServer.setPort(389); + } + } else { + mServer.setPort(ntohs(pse->s_port)); + } + } + mServer.setUser(user); + mServer.setPassword(password); + + qCDebug(KLDAP_LOG) << "setHost: " << host << " port: " << port << " user: " << + user << " pass: [protected]" << endl; +} + +void LDAPProtocol::openConnection() +{ + if (mConnected) { + return; + } + + mConn.setServer(mServer); + if (mConn.connect() != 0) { + error(ERR_COULD_NOT_CONNECT, mConn.connectionError()); + return; + } + + mConnected = true; + + AuthInfo info; + info.url.setScheme(QLatin1String(mProtocol)); + info.url.setHost(mServer.host()); + info.url.setPort(mServer.port()); + info.url.setUserName(mServer.user()); + info.caption = i18n("LDAP Login"); + info.comment = QString::fromLatin1(mProtocol) + QLatin1String("://") + mServer.host() + QLatin1Char(':') + + QString::number(mServer.port()); + info.commentLabel = i18n("site:"); + info.username = mServer.auth() == LdapServer::SASL ? mServer.user() : mServer.bindDn(); + info.password = mServer.password(); + info.keepPassword = true; + bool cached = checkCachedAuthentication(info); + + bool firstauth = true; + int retval; + + while (true) { + retval = mOp.bind_s(); + if (retval == 0) { + qCDebug(KLDAP_LOG) << "connected!"; + connected(); + return; + } + if (retval == KLDAP_INVALID_CREDENTIALS || + retval == KLDAP_INSUFFICIENT_ACCESS || + retval == KLDAP_INAPPROPRIATE_AUTH || + retval == KLDAP_UNWILLING_TO_PERFORM) { + + if (firstauth && cached) { + if (mServer.auth() == LdapServer::SASL) { + mServer.setUser(info.username); + } else { + mServer.setBindDn(info.username); + } + mServer.setPassword(info.password); + mConn.setServer(mServer); + cached = false; + } else { + bool ok = firstauth ? + openPasswordDialog(info) : + openPasswordDialog(info, i18n("Invalid authorization information.")); + if (!ok) { + error(ERR_USER_CANCELED, i18n("LDAP connection canceled.")); + closeConnection(); + return; + } + if (mServer.auth() == LdapServer::SASL) { + mServer.setUser(info.username); + } else { + mServer.setBindDn(info.username); + } + mServer.setPassword(info.password); + firstauth = false; + mConn.setServer(mServer); + } + + } else { + LDAPErr(retval); + closeConnection(); + return; + } + } +} + +void LDAPProtocol::closeConnection() +{ + if (mConnected) { + mConn.close(); + } + mConnected = false; + + qCDebug(KLDAP_LOG) << "connection closed!"; +} + +/** + * Get the information contained in the URL. + */ +void LDAPProtocol::get(const QUrl &_url) +{ + qCDebug(KLDAP_LOG) << "get(" << _url << ")"; + + LdapUrl usrc(_url); + int ret, id; + + changeCheck(usrc); + if (!mConnected) { + finished(); + return; + } + + LdapControls serverctrls, clientctrls; + controlsFromMetaData(serverctrls, clientctrls); + if (mServer.pageSize()) { + LdapControls ctrls = serverctrls; + ctrls.append(LdapControl::createPageControl(mServer.pageSize())); + qCDebug(KLDAP_LOG) << "page size: " << mServer.pageSize(); + mOp.setServerControls(ctrls); + } else { + mOp.setServerControls(serverctrls); + } + mOp.setClientControls(clientctrls); + + if ((id = mOp.search(usrc.dn(), usrc.scope(), usrc.filter(), usrc.attributes())) == -1) { + LDAPErr(); + return; + } + + // tell the mimetype + mimeType(QStringLiteral("text/plain")); + // collect the result + //QByteArray result; + filesize_t processed_size = 0; + + while (true) { + ret = mOp.waitForResult(id, -1); + if (ret == -1 || mConn.ldapErrorCode() != KLDAP_SUCCESS) { + LDAPErr(); + return; + } + qCDebug(KLDAP_LOG) << " ldap_result: " << ret; + if (ret == LdapOperation::RES_SEARCH_RESULT) { + + if (mServer.pageSize()) { + QByteArray cookie; + int estsize = -1; + for (int i = 0; i < mOp.controls().count(); ++i) { + qCDebug(KLDAP_LOG) << " control oid: " << mOp.controls().at(i).oid(); + estsize = mOp.controls().at(i).parsePageControl(cookie); + if (estsize != -1) { + break; + } + } + qCDebug(KLDAP_LOG) << " estimated size: " << estsize; + if (estsize != -1 && !cookie.isEmpty()) { + LdapControls ctrls; + ctrls = serverctrls; + qCDebug(KLDAP_LOG) << "page size: " << mServer.pageSize() << " estimated size: " << estsize; + ctrls.append(LdapControl::createPageControl(mServer.pageSize(), cookie)); + mOp.setServerControls(ctrls); + if ((id = mOp.search(usrc.dn(), usrc.scope(), usrc.filter(), usrc.attributes())) == -1) { + LDAPErr(); + return; + } + continue; + } + } + break; + } + if (ret != LdapOperation::RES_SEARCH_ENTRY) { + continue; + } + + QByteArray entry = mOp.object().toString().toUtf8() + '\n'; + processed_size += entry.size(); + data(entry); + processedSize(processed_size); + } + + totalSize(processed_size); + + // tell we are finished + data(QByteArray()); + finished(); +} + +/** + * Test if the url contains a directory or a file. + */ +void LDAPProtocol::stat(const QUrl &_url) +{ + qCDebug(KLDAP_LOG) << "stat(" << _url << ")"; + + QStringList att, saveatt; + LdapUrl usrc(_url); + int ret, id; + + changeCheck(usrc); + if (!mConnected) { + finished(); + return; + } + + // look how many entries match + saveatt = usrc.attributes(); + att.append(QStringLiteral("dn")); + + if ((id = mOp.search(usrc.dn(), usrc.scope(), usrc.filter(), att)) == -1) { + LDAPErr(); + return; + } + + qCDebug(KLDAP_LOG) << "stat() getting result"; + do { + ret = mOp.waitForResult(id, -1); + if (ret == -1 || mConn.ldapErrorCode() != KLDAP_SUCCESS) { + LDAPErr(); + return; + } + if (ret == LdapOperation::RES_SEARCH_RESULT) { + error(ERR_DOES_NOT_EXIST, _url.toDisplayString()); + return; + } + } while (ret != LdapOperation::RES_SEARCH_ENTRY); + + mOp.abandon(id); + + usrc.setAttributes(saveatt); + + UDSEntry uds; + bool critical; + LDAPEntry2UDSEntry(usrc.dn(), uds, usrc, usrc.extension(QStringLiteral("x-dir"), critical) != QLatin1String("base")); + + statEntry(uds); + // we are done + finished(); +} + +/** + * Deletes one entry; + */ +void LDAPProtocol::del(const QUrl &_url, bool) +{ + qCDebug(KLDAP_LOG) << "del(" << _url << ")"; + + LdapUrl usrc(_url); + int id, ret; + + changeCheck(usrc); + if (!mConnected) { + finished(); + return; + } + + LdapControls serverctrls, clientctrls; + controlsFromMetaData(serverctrls, clientctrls); + mOp.setServerControls(serverctrls); + mOp.setClientControls(clientctrls); + + qCDebug(KLDAP_LOG) << " del: " << usrc.dn().toString().toUtf8(); + + if ((id = mOp.del(usrc.dn())) == -1) { + LDAPErr(); + return; + } + ret = mOp.waitForResult(id, -1); + if (ret == -1 || mConn.ldapErrorCode() != KLDAP_SUCCESS) { + LDAPErr(); + return; + } + + finished(); +} + +void LDAPProtocol::put(const QUrl &_url, int, KIO::JobFlags flags) +{ + qCDebug(KLDAP_LOG) << "put(" << _url << ")"; + + LdapUrl usrc(_url); + + changeCheck(usrc); + if (!mConnected) { + finished(); + return; + } + + LdapControls serverctrls, clientctrls; + controlsFromMetaData(serverctrls, clientctrls); + mOp.setServerControls(serverctrls); + mOp.setClientControls(clientctrls); + + LdapObject addObject; + LdapOperation::ModOps modops; + QByteArray buffer; + int result = 0; + Ldif::ParseValue ret; + Ldif ldif; + ret = Ldif::MoreData; + int ldaperr; + + do { + if (ret == Ldif::MoreData) { + dataReq(); // Request for data + result = readData(buffer); + ldif.setLdif(buffer); + } + if (result < 0) { + //error + return; + } + if (result == 0) { + qCDebug(KLDAP_LOG) << "EOF!"; + ldif.endLdif(); + } + do { + + ret = ldif.nextItem(); + qCDebug(KLDAP_LOG) << "nextitem: " << ret; + + switch (ret) { + case Ldif::None: + case Ldif::NewEntry: + case Ldif::MoreData: + break; + case Ldif::EndEntry: + ldaperr = KLDAP_SUCCESS; + switch (ldif.entryType()) { + case Ldif::Entry_None: + error(ERR_INTERNAL, i18n("The Ldif parser failed.")); + return; + case Ldif::Entry_Del: + qCDebug(KLDAP_LOG) << "kio_ldap_del"; + ldaperr = mOp.del_s(ldif.dn()); + break; + case Ldif::Entry_Modrdn: + qCDebug(KLDAP_LOG) << "kio_ldap_modrdn olddn:" << ldif.dn().toString() << + " newRdn: " << ldif.newRdn() << + " newSuperior: " << ldif.newSuperior() << + " deloldrdn: " << ldif.delOldRdn() << endl; + ldaperr = mOp.rename_s(ldif.dn(), ldif.newRdn(), + ldif.newSuperior(), ldif.delOldRdn()); + break; + case Ldif::Entry_Mod: + qCDebug(KLDAP_LOG) << "kio_ldap_mod"; + ldaperr = mOp.modify_s(ldif.dn(), modops); + modops.clear(); + break; + case Ldif::Entry_Add: + qCDebug(KLDAP_LOG) << "kio_ldap_add " << ldif.dn().toString(); + addObject.setDn(ldif.dn()); + ldaperr = mOp.add_s(addObject); + if (ldaperr == KLDAP_ALREADY_EXISTS && (flags & KIO::Overwrite)) { + qCDebug(KLDAP_LOG) << ldif.dn().toString() << " already exists, delete first"; + ldaperr = mOp.del_s(ldif.dn()); + if (ldaperr == KLDAP_SUCCESS) { + ldaperr = mOp.add_s(addObject); + } + } + addObject.clear(); + break; + } + if (ldaperr != KLDAP_SUCCESS) { + qCDebug(KLDAP_LOG) << "put ldap error: " << ldaperr; + LDAPErr(ldaperr); + return; + } + break; + case Ldif::Item: + switch (ldif.entryType()) { + case Ldif::Entry_Mod: { + LdapOperation::ModOp op; + op.type = LdapOperation::Mod_None; + switch (ldif.modType()) { + case Ldif::Mod_None: + op.type = LdapOperation::Mod_None; + break; + case Ldif::Mod_Add: + op.type = LdapOperation::Mod_Add; + break; + case Ldif::Mod_Replace: + op.type = LdapOperation::Mod_Replace; + break; + case Ldif::Mod_Del: + op.type = LdapOperation::Mod_Del; + break; + } + op.attr = ldif.attr(); + if (!ldif.value().isNull()) { + op.values.append(ldif.value()); + } + modops.append(op); + break; + } + case Ldif::Entry_Add: + if (ldif.value().size() > 0) { + addObject.addValue(ldif.attr(), ldif.value()); + } + break; + default: + error(ERR_INTERNAL, i18n("The Ldif parser failed.")); + return; + } + break; + case Ldif::Control: { + LdapControl control; + control.setControl(ldif.oid(), ldif.value(), ldif.isCritical()); + serverctrls.append(control); + mOp.setServerControls(serverctrls); + break; + } + case Ldif::Err: + error(ERR_SLAVE_DEFINED, + i18n("Invalid Ldif file in line %1.", ldif.lineNumber())); + return; + } + } while (ret != Ldif::MoreData); + } while (result > 0); + + finished(); +} + +/** + * List the contents of a directory. + */ +void LDAPProtocol::listDir(const QUrl &_url) +{ + int ret, ret2, id, id2; + unsigned long total = 0; + QStringList att, saveatt; + LdapUrl usrc(_url), usrc2; + bool critical = true; + bool isSub = (usrc.extension(QStringLiteral("x-dir"), critical) == QLatin1String("sub")); + +//Reactivate it + //qCDebug(KLDAP_LOG) << "listDir(" << _url << ")"; + + changeCheck(usrc); + if (!mConnected) { + finished(); + return; + } + usrc2 = usrc; + + saveatt = usrc.attributes(); + // look up the entries + if (isSub) { + att.append(QStringLiteral("dn")); + usrc.setAttributes(att); + } + if (_url.query().isEmpty()) { + usrc.setScope(LdapUrl::One); + } + + if ((id = mOp.search(usrc.dn(), usrc.scope(), usrc.filter(), usrc.attributes())) == -1) { + LDAPErr(); + return; + } + + usrc.setAttributes(QStringList() << QLatin1String("")); + usrc.setExtension(QStringLiteral("x-dir"), QStringLiteral("base")); + // publish the results + UDSEntry uds; + + while (true) { + ret = mOp.waitForResult(id, -1); + if (ret == -1 || mConn.ldapErrorCode() != KLDAP_SUCCESS) { + LDAPErr(); + return; + } + if (ret == LdapOperation::RES_SEARCH_RESULT) { + break; + } + if (ret != LdapOperation::RES_SEARCH_ENTRY) { + continue; + } + qCDebug(KLDAP_LOG) << " ldap_result: " << ret; + + total++; + uds.clear(); + + LDAPEntry2UDSEntry(mOp.object().dn(), uds, usrc); + listEntry(uds); +// processedSize( total ); + qCDebug(KLDAP_LOG) << " total: " << total << " " << usrc.toDisplayString(); + + // publish the sub-directories (if dirmode==sub) + if (isSub) { + LdapDN dn = mOp.object().dn(); + usrc2.setDn(dn); + usrc2.setScope(LdapUrl::One); + usrc2.setAttributes(saveatt); + usrc2.setFilter(usrc.filter()); + qCDebug(KLDAP_LOG) << "search2 " << dn.toString(); + if ((id2 = mOp.search(dn, LdapUrl::One, QString(), att)) != -1) { + while (true) { + qCDebug(KLDAP_LOG) << " next result "; + ret2 = mOp.waitForResult(id2, -1); + if (ret2 == -1 || ret2 == LdapOperation::RES_SEARCH_RESULT) { + break; + } + if (ret2 == LdapOperation::RES_SEARCH_ENTRY) { + LDAPEntry2UDSEntry(dn, uds, usrc2, true); + listEntry(uds); + total++; + mOp.abandon(id2); + break; + } + } + } + } + } + +// totalSize( total ); + + uds.clear(); + // we are done + finished(); +} diff -Nru kldap-16.04.3/kioslave/src/ldap/kio_ldap.h kldap-16.12.3/kioslave/src/ldap/kio_ldap.h --- kldap-16.04.3/kioslave/src/ldap/kio_ldap.h 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/ldap/kio_ldap.h 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,70 @@ +/* + Copyright (c) 2004-2007 Szombathelyi György + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef __LDAP_H__ +#define __LDAP_H__ + +#include +#include + +#include +#include +#include +#include +#include +#include + +class LDAPProtocol : public KIO::SlaveBase +{ +public: + LDAPProtocol(const QByteArray &protocol, const QByteArray &pool, const QByteArray &app); + virtual ~LDAPProtocol(); + + virtual void setHost(const QString &host, quint16 port, + const QString &user, const QString &pass) Q_DECL_OVERRIDE; + + void openConnection() Q_DECL_OVERRIDE; + void closeConnection() Q_DECL_OVERRIDE; + + void get(const QUrl &url) Q_DECL_OVERRIDE; + void stat(const QUrl &url) Q_DECL_OVERRIDE; + void listDir(const QUrl &url) Q_DECL_OVERRIDE; + void del(const QUrl &url, bool isfile) Q_DECL_OVERRIDE; + void put(const QUrl &url, int permissions, KIO::JobFlags flags) Q_DECL_OVERRIDE; + +private: + + KLDAP::LdapConnection mConn; + KLDAP::LdapOperation mOp; + KLDAP::LdapServer mServer; + bool mConnected; + + void controlsFromMetaData(KLDAP::LdapControls &serverctrls, + KLDAP::LdapControls &clientctrls); + void LDAPEntry2UDSEntry(const KLDAP::LdapDN &dn, KIO::UDSEntry &entry, + const KLDAP::LdapUrl &usrc, bool dir = false); + int asyncSearch(KLDAP::LdapUrl &usrc, const QByteArray &cookie = ""); + + void LDAPErr(int err = KLDAP_SUCCESS); + void changeCheck(const KLDAP::LdapUrl &url); +}; + +#endif diff -Nru kldap-16.04.3/kioslave/src/ldap/ldap.protocol kldap-16.12.3/kioslave/src/ldap/ldap.protocol --- kldap-16.04.3/kioslave/src/ldap/ldap.protocol 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/ldap/ldap.protocol 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,17 @@ +[Protocol] +exec=kf5/kio/ldap +protocol=ldap +input=none +output=filesystem +listing=Name, +reading=true +source=true +writing=true +#makedir=true +deleting=true +#linking=true +#moving=true +mimetype=text/plain +determineMimetypeFromExtension=false +X-DocPath=kioslave5/ldap/index.html +Icon=office-address-book diff -Nru kldap-16.04.3/kioslave/src/ldap/ldaps.protocol kldap-16.12.3/kioslave/src/ldap/ldaps.protocol --- kldap-16.04.3/kioslave/src/ldap/ldaps.protocol 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/ldap/ldaps.protocol 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,17 @@ +[Protocol] +exec=kf5/kio/ldap +protocol=ldaps +input=none +output=filesystem +listing=Name, +reading=true +source=true +writing=true +#makedir=true +deleting=true +#linking=true +#moving=true +mimetype=text/plain +determineMimetypeFromExtension=false +X-DocPath=kioslave5/ldap/index.html +Icon=office-address-book diff -Nru kldap-16.04.3/kioslave/src/ldap/Messages.sh kldap-16.12.3/kioslave/src/ldap/Messages.sh --- kldap-16.04.3/kioslave/src/ldap/Messages.sh 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kioslave/src/ldap/Messages.sh 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,2 @@ +#! /usr/bin/env bash +$XGETTEXT *.cpp -o $podir/kio_ldap.pot diff -Nru kldap-16.04.3/kldap.categories kldap-16.12.3/kldap.categories --- kldap-16.04.3/kldap.categories 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kldap.categories 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,3 @@ +org.kde.pim.kldap kioslave (kldap) +org.kde.pim.ldap kldaplib (kldap) + diff -Nru kldap-16.04.3/kldap.renamecategories kldap-16.12.3/kldap.renamecategories --- kldap-16.04.3/kldap.renamecategories 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/kldap.renamecategories 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1 @@ +log_kldap org.kde.pim.kldap diff -Nru kldap-16.04.3/Mainpage.dox kldap-16.12.3/Mainpage.dox --- kldap-16.04.3/Mainpage.dox 2016-06-15 04:39:11.000000000 +0000 +++ kldap-16.12.3/Mainpage.dox 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -/*! - * @mainpage kldap - an LDAP access API for KDE. - * - * @section purpose Purpose - * - * LIBKLDAP - * - * @section desc Description - * - * Allows LDAP accessing with a convenient Qt style C++ API. - * - * @authors György Szombathelyi \ - * - * @maintainers György Szombathelyi \ - * - * @licenses - * @lgpl - */ - -// DOXYGEN_PROJECTNAME=KLDAP Library -// DOXYGEN_REFERENCES = kdecore kdeui -// DOXYGEN_EXCLUDE = scripts diff -Nru kldap-16.04.3/metainfo.yaml kldap-16.12.3/metainfo.yaml --- kldap-16.04.3/metainfo.yaml 2016-06-15 04:39:11.000000000 +0000 +++ kldap-16.12.3/metainfo.yaml 2017-02-14 12:30:10.000000000 +0000 @@ -1,5 +1,5 @@ maintainer: mlaurent -description: LDap support library +description: LDAP support library tier: 3 type: functional platforms: @@ -12,3 +12,7 @@ cmake: "KF5::Ldap" cmakename: KF5Ldap +public_lib: true +group: kdepim +platforms: + - name: Linux diff -Nru kldap-16.04.3/README.md kldap-16.12.3/README.md --- kldap-16.04.3/README.md 1970-01-01 00:00:00.000000000 +0000 +++ kldap-16.12.3/README.md 2017-02-14 12:30:10.000000000 +0000 @@ -0,0 +1,3 @@ +# KLDAP # + +Allows LDAP accessing with a convenient Qt style C++ API. diff -Nru kldap-16.04.3/src/CMakeLists.txt kldap-16.12.3/src/CMakeLists.txt --- kldap-16.04.3/src/CMakeLists.txt 2016-06-15 04:39:11.000000000 +0000 +++ kldap-16.12.3/src/CMakeLists.txt 2017-02-14 12:30:10.000000000 +0000 @@ -53,7 +53,7 @@ ldapstructureproxymodel.cpp ldapattributeproxymodel.cpp ) -ecm_qt_declare_logging_category(kldap_LIB_SRCS HEADER ldap_debug.h IDENTIFIER LDAP_LOG CATEGORY_NAME log_ldap) +ecm_qt_declare_logging_category(kldap_LIB_SRCS HEADER ldap_debug.h IDENTIFIER LDAP_LOG CATEGORY_NAME org.kde.pim.ldap) add_library(KF5Ldap ${kldap_LIB_SRCS})