[git] GPGME - branch, master, updated. gpgme-1.7.1-22-g3509cf2

by Andre Heinecke cvs at cvs.gnupg.org
Fri Nov 4 12:42:16 CET 2016


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, master has been updated
       via  3509cf2f9846360848b6c08d36cbca18373c935e (commit)
       via  512de91f9a8da8f491e09653eb4b5bdd0a027198 (commit)
       via  4d3f33d0e9d960df2c34fb4d215987ab4d36111c (commit)
       via  23979b9be5a6028e3e9cafc3aff632bc720b81f2 (commit)
      from  df08a0ca3f029b06b7e3a6bd63330df5cb96585a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3509cf2f9846360848b6c08d36cbca18373c935e
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Nov 4 12:33:57 2016 +0100

    cpp: Add API for swdb queries
    
    * lang/cpp/src/swdbresult.cpp,
     lang/cpp/src/swdbresult.h (SwdbResult): New.
    * lang/cpp/src/Makefile.am: Update accordingly.

diff --git a/NEWS b/NEWS
index 4d2a110..1cf401e 100644
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,7 @@ Noteworthy changes in version 1.7.2 (unreleased)
  qt: DN::Attribute               NEW.
  cpp: EngineInfo::Version::Version(const char*) NEW.
  cpp: EngineInfo::Version::Version()            NEW.
+ cpp: SwdbResult                                NEW.
 
 
 Noteworthy changes in version 1.7.1 (2016-10-18)
diff --git a/lang/cpp/src/Makefile.am b/lang/cpp/src/Makefile.am
index 8ea99f5..608d2d9 100644
--- a/lang/cpp/src/Makefile.am
+++ b/lang/cpp/src/Makefile.am
@@ -33,7 +33,7 @@ main_sources = \
     gpgsetownertrusteditinteractor.cpp gpgsignkeyeditinteractor.cpp \
     gpgadduserideditinteractor.cpp defaultassuantransaction.cpp \
     scdgetinfoassuantransaction.cpp gpgagentgetinfoassuantransaction.cpp \
-    vfsmountresult.cpp configuration.cpp tofuinfo.cpp
+    vfsmountresult.cpp configuration.cpp tofuinfo.cpp swdbresult.cpp
 
 gpgmepp_headers = \
     configuration.h context.h data.h decryptionresult.h \
@@ -45,7 +45,7 @@ gpgmepp_headers = \
     importresult.h keygenerationresult.h key.h keylistresult.h \
     notation.h result.h scdgetinfoassuantransaction.h signingresult.h \
     trustitem.h verificationresult.h vfsmountresult.h gpgmepp_export.h \
-    tofuinfo.h
+    tofuinfo.h swdbresult.h
 
 private_gpgmepp_headers = \
     result_p.h context_p.h util.h callbacks.h data_p.h
diff --git a/lang/cpp/src/swdbresult.cpp b/lang/cpp/src/swdbresult.cpp
new file mode 100644
index 0000000..3afa8b5
--- /dev/null
+++ b/lang/cpp/src/swdbresult.cpp
@@ -0,0 +1,231 @@
+/* swdbresult.cpp - wraps gpgme swdb result / query
+  Copyright (C) 2016 Intevation GmbH
+
+  This file is part of GPGME++.
+
+  GPGME++ 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.
+
+  GPGME++ 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 GPGME++; see the file COPYING.LIB.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA 02110-1301, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include "swdbresult.h"
+
+#include <istream>
+
+#include "error.h"
+
+#include "gpgme.h"
+
+class GpgME::SwdbResult::Private
+{
+public:
+    Private() {}
+    Private(gpgme_query_swdb_result_t result)
+        : mResult(result ? new _gpgme_op_query_swdb_result (*result) : nullptr)
+    {
+        if (!result) {
+            mResult->name = nullptr;
+            return;
+        }
+        if (result->name) {
+            mResult->name = strdup(result->name);
+        }
+        if (result->version) {
+            mVersion = result->version;
+        }
+        if (result->iversion) {
+            mIVersion = result->iversion;
+        }
+    }
+
+    Private(const Private &other)
+        : mResult(other.mResult)
+    {
+        if (mResult && mResult->name) {
+            mResult->name = strdup(mResult->name);
+        }
+        mVersion = other.mVersion;
+        mIVersion = other.mIVersion;
+    }
+
+    ~Private()
+    {
+        if (mResult) {
+            std::free(mResult->name);
+            delete mResult;
+        }
+    }
+
+    GpgME::EngineInfo::Version mVersion;
+    GpgME::EngineInfo::Version mIVersion;
+    gpgme_query_swdb_result_t mResult;
+};
+
+GpgME::SwdbResult::SwdbResult(gpgme_query_swdb_result_t result)
+    : d(new Private(result))
+{
+}
+
+GpgME::SwdbResult::SwdbResult() : d()
+{
+}
+
+bool GpgME::SwdbResult::isNull() const
+{
+    return !d || !d->mResult;
+}
+
+std::string GpgME::SwdbResult::name() const
+{
+    if (isNull() || !d->mResult->name) {
+        return std::string();
+    }
+    return d->mResult->name;
+}
+
+GpgME::EngineInfo::Version GpgME::SwdbResult::version() const
+{
+    if (isNull()) {
+        return GpgME::EngineInfo::Version();
+    }
+    return d->mVersion;
+}
+
+GpgME::EngineInfo::Version GpgME::SwdbResult::installedVersion() const
+{
+    if (isNull()) {
+        return GpgME::EngineInfo::Version();
+    }
+    return d->mIVersion;
+}
+
+unsigned long GpgME::SwdbResult::created() const
+{
+    return isNull() ? 0 : d->mResult->created;
+}
+
+unsigned long GpgME::SwdbResult::retrieved() const
+{
+    return isNull() ? 0 : d->mResult->retrieved;
+}
+
+unsigned long GpgME::SwdbResult::releaseDate() const
+{
+    return isNull() ? 0 : d->mResult->reldate;
+}
+
+bool GpgME::SwdbResult::warning() const
+{
+    return isNull() ? 0 : d->mResult->warning;
+}
+
+bool GpgME::SwdbResult::update() const
+{
+    return isNull() ? 0 : d->mResult->update;
+}
+
+bool GpgME::SwdbResult::noinfo() const
+{
+    return isNull() ? 0 : d->mResult->noinfo;
+}
+
+bool GpgME::SwdbResult::unknown() const
+{
+    return isNull() ? 0 : d->mResult->unknown;
+}
+
+bool GpgME::SwdbResult::error() const
+{
+    return isNull() ? 0 : d->mResult->error;
+}
+
+bool GpgME::SwdbResult::tooOld() const
+{
+    return isNull() ? 0 : d->mResult->tooold;
+}
+
+bool GpgME::SwdbResult::urgent() const
+{
+    return isNull() ? 0 : d->mResult->urgent;
+}
+
+std::vector<GpgME::SwdbResult> GpgME::SwdbResult::query(const char *name,
+                                                        const char *iversion,
+                                                        Error *err)
+{
+  std::vector <GpgME::SwdbResult> ret;
+  gpgme_ctx_t ctx;
+  gpgme_error_t gpgerr = gpgme_new(&ctx);
+
+  if (gpgerr) {
+      if (err) {
+        *err = Error (gpgerr);
+      }
+      return ret;
+  }
+
+  gpgerr = gpgme_set_protocol(ctx, GPGME_PROTOCOL_GPGCONF);
+
+  if (gpgerr) {
+      if (err) {
+        *err = Error(gpgerr);
+      }
+      gpgme_release(ctx);
+      return ret;
+  }
+
+  gpgerr = gpgme_op_query_swdb(ctx, name, iversion, 0);
+
+  if (gpgerr) {
+      if (err) {
+        *err = Error(gpgerr);
+      }
+      gpgme_release(ctx);
+      return ret;
+  }
+  gpgme_query_swdb_result_t result = gpgme_op_query_swdb_result(ctx);
+  while (result) {
+      ret.push_back(SwdbResult(result));
+      result = result->next;
+  }
+
+  gpgme_release(ctx);
+  return ret;
+}
+
+std::ostream &GpgME::operator<<(std::ostream &os, const GpgME::SwdbResult &result)
+{
+    os << "GpgME::SwdbResult(";
+    if (!result.isNull()) {
+        os << "\n name: "     << result.name()
+           << "\n version: "  << result.version()
+           << "\n installed: "<< result.installedVersion()
+           << "\n created: "  << result.created()
+           << "\n retrieved: "<< result.retrieved()
+           << "\n warning: "  << result.warning()
+           << "\n update: "   << result.update()
+           << "\n urgent: "   << result.urgent()
+           << "\n noinfo: "   << result.noinfo()
+           << "\n unknown: "  << result.unknown()
+           << "\n tooOld: "   << result.tooOld()
+           << "\n error: "    << result.error()
+           << "\n reldate: "  << result.releaseDate()
+           << '\n';
+    }
+    return os << ")\n";
+}
diff --git a/lang/cpp/src/swdbresult.h b/lang/cpp/src/swdbresult.h
new file mode 100644
index 0000000..e15954d
--- /dev/null
+++ b/lang/cpp/src/swdbresult.h
@@ -0,0 +1,128 @@
+/*
+  swdbresult.h - wraps a gpgme swdb query / rsult
+  Copyright (C) 2016 Intevation GmbH
+
+  This file is part of GPGME++.
+
+  GPGME++ 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.
+
+  GPGME++ 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 GPGME++; 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 __GPGMEPP_SWDB_H__
+#define __GPGMEPP_SWDB_H__
+
+#include "gpgmepp_export.h"
+
+#include "global.h"
+#include "engineinfo.h"
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <ostream>
+
+namespace GpgME
+{
+
+class GPGMEPP_EXPORT SwdbResult
+{
+public:
+    /* Obtain swdb results through query() */
+    SwdbResult();
+    explicit SwdbResult(gpgme_query_swdb_result_t result);
+
+    /** Query the swdb to get information about updates.
+     *
+     * Runs gpgconf --query-swdb through gpgme and
+     * returns a list of results.
+     * If iversion is given as NULL a check is only done if GPGME
+     * can figure out the version by itself (for example when using
+     * "gpgme" or "gnupg").
+     *
+     * If NULL is used for name the current gpgme version is
+     * checked.
+     *
+     * @param name: Name of the component to query.
+     * @param iversion: Optionally the installed version.
+     * @param err: Optional error.
+     */
+    static std::vector<SwdbResult> query(const char *name,
+                                         const char *iversion = NULL,
+                                         Error *err = NULL);
+
+    const SwdbResult &operator=(SwdbResult other)
+    {
+        swap(other);
+        return *this;
+    }
+
+    void swap(SwdbResult &other)
+    {
+        using std::swap;
+        swap(this->d, other.d);
+    }
+    bool isNull() const;
+
+    /* The name of the package (e.g. "gpgme", "gnupg") */
+    std::string name() const;
+
+    /* The version of the installed version.  */
+    EngineInfo::Version installedVersion() const;
+
+    /* The time the online info was created.  */
+    unsigned long created() const;
+
+    /* The time the online info was retrieved.  */
+    unsigned long retrieved() const;
+
+    /* This bit is set if an error occured or some of the information
+     * in this structure may not be set.  */
+    bool warning() const;
+
+    /* An update is available.  */
+    bool update() const;
+
+    /* The update is important.  */
+    bool urgent() const;
+
+    /* No information at all available.  */
+    bool noinfo() const;
+
+    /* The package name is not known. */
+    bool unknown() const;
+
+    /* The information here is too old.  */
+    bool tooOld() const;
+
+    /* Other error.  */
+    bool error() const;
+
+    /* The version of the latest released version.  */
+    EngineInfo::Version version() const;
+
+    /* The release date of that version.  */
+    unsigned long releaseDate() const;
+
+private:
+    class Private;
+    std::shared_ptr<Private> d;
+};
+
+GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const SwdbResult &info);
+
+} // namespace GpgME
+
+GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(SwdbResult)
+
+#endif

commit 512de91f9a8da8f491e09653eb4b5bdd0a027198
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Nov 4 12:29:32 2016 +0100

    cpp: Add more EngineInfo::Version ctors
    
    * lang/cpp/src/engineinfo.h
    (EngineInfo::Version::Version(const char*)),
    (EngineInfo::Version::Version()): New.

diff --git a/NEWS b/NEWS
index e43aa30..4d2a110 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,8 @@ Noteworthy changes in version 1.7.2 (unreleased)
  gpgme_query_swdb_result_t       NEW.
  qt: DN                          NEW.
  qt: DN::Attribute               NEW.
+ cpp: EngineInfo::Version::Version(const char*) NEW.
+ cpp: EngineInfo::Version::Version()            NEW.
 
 
 Noteworthy changes in version 1.7.1 (2016-10-18)
diff --git a/lang/cpp/src/engineinfo.h b/lang/cpp/src/engineinfo.h
index 72e125c..aa6fcca 100644
--- a/lang/cpp/src/engineinfo.h
+++ b/lang/cpp/src/engineinfo.h
@@ -40,6 +40,12 @@ public:
     struct Version
     {
         int major, minor, patch;
+        Version()
+        {
+          major = 0;
+          minor = 0;
+          patch = 0;
+        }
 
         Version(const std::string& version)
         {
@@ -51,6 +57,16 @@ public:
             }
         }
 
+        Version(const char *version)
+        {
+            if (!version ||
+                std::sscanf(version, "%d.%d.%d", &major, &minor, &patch) != 3) {
+                major = 0;
+                minor = 0;
+                patch = 0;
+            }
+        }
+
         bool operator < (const Version& other)
         {
             if (major < other.major)

commit 4d3f33d0e9d960df2c34fb4d215987ab4d36111c
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Nov 4 12:26:46 2016 +0100

    cpp: Don't include gpgme.h in tofuinfo header
    
    * lang/cpp/src/tofuinfo.h: Don't include gpgme.h
    
    --
    No public header should include gpgme.h

diff --git a/lang/cpp/src/tofuinfo.h b/lang/cpp/src/tofuinfo.h
index c09c82a..7165d05 100644
--- a/lang/cpp/src/tofuinfo.h
+++ b/lang/cpp/src/tofuinfo.h
@@ -25,8 +25,6 @@
 
 #include "gpgmepp_export.h"
 
-#include "gpgme.h"
-
 #include "global.h"
 
 #include <memory>

commit 23979b9be5a6028e3e9cafc3aff632bc720b81f2
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Nov 4 12:24:34 2016 +0100

    cpp: Extend gpgmefw for tofuinfo and swdb query
    
    * lang/cpp/src/gpgmefw.h (gpgme_tofu_info_t)
    (gpgme_query_swdb_result_t): New forwards.

diff --git a/lang/cpp/src/gpgmefw.h b/lang/cpp/src/gpgmefw.h
index cbdd444..e3c9b18 100644
--- a/lang/cpp/src/gpgmefw.h
+++ b/lang/cpp/src/gpgmefw.h
@@ -67,4 +67,10 @@ typedef struct gpgme_conf_comp *gpgme_conf_comp_t;
 struct gpgme_conf_arg;
 typedef struct gpgme_conf_arg *gpgme_conf_arg_t;
 
+struct _gpgme_tofu_info;
+typedef struct _gpgme_tofu_info *gpgme_tofu_info_t;
+
+struct _gpgme_op_query_swdb_result;
+typedef struct _gpgme_op_query_swdb_result *gpgme_query_swdb_result_t;
+
 #endif // __GPGMEPP_GPGMEFW_H__

-----------------------------------------------------------------------

Summary of changes:
 NEWS                        |   3 +
 lang/cpp/src/Makefile.am    |   4 +-
 lang/cpp/src/engineinfo.h   |  16 +++
 lang/cpp/src/gpgmefw.h      |   6 ++
 lang/cpp/src/swdbresult.cpp | 231 ++++++++++++++++++++++++++++++++++++++++++++
 lang/cpp/src/swdbresult.h   | 128 ++++++++++++++++++++++++
 lang/cpp/src/tofuinfo.h     |   2 -
 7 files changed, 386 insertions(+), 4 deletions(-)
 create mode 100644 lang/cpp/src/swdbresult.cpp
 create mode 100644 lang/cpp/src/swdbresult.h


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list