RECLAIM: remove sqlite plugin; housekeeping
authorSchanzenbach, Martin <mschanzenbach@posteo.de>
Sun, 14 Apr 2019 07:51:33 +0000 (09:51 +0200)
committerSchanzenbach, Martin <mschanzenbach@posteo.de>
Sun, 14 Apr 2019 07:51:33 +0000 (09:51 +0200)
src/include/gnunet_reclaim_service.h
src/reclaim/Makefile.am
src/reclaim/plugin_reclaim_sqlite.c [deleted file]
src/reclaim/reclaim.conf
src/reclaim/reclaim_api.c

index 3029e1f4d72b6adb9708188390c05f73774bb8d2..d179485bbf091078a1fb0864ce79ddd8cf95215c 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #define GNUNET_RECLAIM_SERVICE_H
 
 #ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
+extern "C" {
+#if 0 /* keep Emacsens' auto-indent happy */
 }
 #endif
 #endif
 
-#include "gnunet_util_lib.h"
 #include "gnunet_reclaim_attribute_lib.h"
+#include "gnunet_util_lib.h"
 
 /**
- * Version number of GNUnet Identity Provider API.
+ * Version number of the re:claimID API.
  */
 #define GNUNET_RECLAIM_VERSION 0x00000000
 
 /**
- * Handle to access the identity service.
+ * Opaque handle to access the service.
  */
 struct GNUNET_RECLAIM_Handle;
 
+
 /**
- * Handle for a token.
+ * Opaque handle for an operation at the re:claimID service.
  */
-struct GNUNET_RECLAIM_Token;
+struct GNUNET_RECLAIM_Operation;
+
 
 /**
- * The ticket
+ * The an authorization ticket. This ticket is meant to be transferred
+ * out of band the a relying party.
+ * The contents of a ticket must be protected and should be treated as a
+ * SHARED SECRET between user and relying party.
  */
 struct GNUNET_RECLAIM_Ticket
 {
   /**
-   * The ticket issuer
+   * The ticket issuer (= the user)
    */
   struct GNUNET_CRYPTO_EcdsaPublicKey identity;
 
   /**
-   * The ticket audience
+   * The ticket audience (= relying party)
    */
   struct GNUNET_CRYPTO_EcdsaPublicKey audience;
 
@@ -77,74 +81,77 @@ struct GNUNET_RECLAIM_Ticket
   uint64_t rnd;
 };
 
-/**
- * Handle for an operation with the identity provider service.
- */
-struct GNUNET_RECLAIM_Operation;
-
 
 /**
- * Connect to the identity provider service.
+ * Method called when a token has been issued.
+ * On success returns a ticket that can be given to the relying party to retrive
+ * the token
  *
- * @param cfg Configuration to contact the identity provider service.
- * @return handle to communicate with identity provider service
+ * @param cls closure
+ * @param ticket the ticket
  */
-struct GNUNET_RECLAIM_Handle *
-GNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
+typedef void (*GNUNET_RECLAIM_TicketCallback) (
+    void *cls, const struct GNUNET_RECLAIM_Ticket *ticket);
+
 
 /**
  * Continuation called to notify client about result of the
  * operation.
  *
- * @param cls closure
- * @param success #GNUNET_SYSERR on failure (including timeout/queue drop/failure to validate)
- *                #GNUNET_NO if content was already there or not found
- *                #GNUNET_YES (or other positive value) on success
+ * @param cls The callback closure
+ * @param success #GNUNET_SYSERR on failure
  * @param emsg NULL on success, otherwise an error message
  */
-typedef void
-(*GNUNET_RECLAIM_ContinuationWithStatus) (void *cls,
-                                            int32_t success,
-                                            const char *emsg);
+typedef void (*GNUNET_RECLAIM_ContinuationWithStatus) (void *cls,
+                                                       int32_t success,
+                                                       const char *emsg);
 
 
 /**
- * Store an attribute.  If the attribute is already present,
- * it is replaced with the new attribute.
+ * Callback used to notify the client of attribute results.
  *
- * @param h handle to the identity provider
- * @param pkey private key of the identity
- * @param attr the attribute
- * @param exp_interval the relative expiration interval for the attribute
- * @param cont continuation to call when done
- * @param cont_cls closure for @a cont
- * @return handle to abort the request
+ * @param cls The callback closure
+ * @param identity The identity authoritative over the attributes
+ * @param attr The attribute
  */
-struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h,
-                                          const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
-                                          const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr,
-                                          const struct GNUNET_TIME_Relative *exp_interval,
-                                          GNUNET_RECLAIM_ContinuationWithStatus cont,
-                                          void *cont_cls);
+typedef void (*GNUNET_RECLAIM_AttributeResult) (
+    void *cls, const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
+    const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr);
 
 
 /**
- * Process an attribute that was stored in the idp.
+ * Connect to the re:claimID service.
  *
- * @param cls closure
- * @param identity the identity
- * @param attr the attribute
+ * @param cfg Configuration to contact the re:claimID service.
+ * @return handle to communicate with the service
  */
-typedef void
-(*GNUNET_RECLAIM_AttributeResult) (void *cls,
-                                   const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
-                                   const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr);
+struct GNUNET_RECLAIM_Handle *
+GNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
+
 
+/**
+ * Store an attribute.  If the attribute is already present,
+ * it is replaced with the new attribute.
+ *
+ * @param h handle to the re:claimID service
+ * @param pkey Private key of the identity to add an attribute to
+ * @param attr The attribute
+ * @param exp_interval The relative expiration interval for the attribute
+ * @param cont Continuation to call when done
+ * @param cont_cls Closure for @a cont
+ * @return handle Used to to abort the request
+ */
+struct GNUNET_RECLAIM_Operation *
+GNUNET_RECLAIM_attribute_store (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
+    const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr,
+    const struct GNUNET_TIME_Relative *exp_interval,
+    GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls);
 
 
 /**
- * List all attributes for a local identity. 
+ * List all attributes for a local identity.
  * This MUST lock the `struct GNUNET_RECLAIM_Handle`
  * for any other calls than #GNUNET_RECLAIM_get_attributes_next() and
  * #GNUNET_RECLAIM_get_attributes_stop. @a proc will be called once
@@ -155,87 +162,76 @@ typedef void
  * On normal completion, @a finish_cb proc will be
  * invoked.
  *
- * @param h handle to the idp
- * @param identity identity to access
- * @param error_cb function to call on error (i.e. disconnect),
+ * @param h Handle to the re:claimID service
+ * @param identity Identity to iterate over
+ * @param error_cb Function to call on error (i.e. disconnect),
  *        the handle is afterwards invalid
- * @param error_cb_cls closure for @a error_cb
- * @param proc function to call on each attribute; it
- *        will be called repeatedly with a value (if available)
- * @param proc_cls closure for @a proc
- * @param finish_cb function to call on completion
+ * @param error_cb_cls Closure for @a error_cb
+ * @param proc Function to call on each attribute
+ * @param proc_cls Closure for @a proc
+ * @param finish_cb Function to call on completion
  *        the handle is afterwards invalid
- * @param finish_cb_cls closure for @a finish_cb
- * @return an iterator handle to use for iteration
+ * @param finish_cb_cls Closure for @a finish_cb
+ * @return an iterator Handle to use for iteration
  */
 struct GNUNET_RECLAIM_AttributeIterator *
-GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h,
-                                               const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                               GNUNET_SCHEDULER_TaskCallback error_cb,
-                                               void *error_cb_cls,
-                                               GNUNET_RECLAIM_AttributeResult proc,
-                                               void *proc_cls,
-                                               GNUNET_SCHEDULER_TaskCallback finish_cb,
-                                               void *finish_cb_cls);
+GNUNET_RECLAIM_get_attributes_start (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls,
+    GNUNET_RECLAIM_AttributeResult proc, void *proc_cls,
+    GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls);
 
 
 /**
  * Calls the record processor specified in #GNUNET_RECLAIM_get_attributes_start
  * for the next record.
  *
- * @param it the iterator
+ * @param it The iterator
  */
 void
-GNUNET_RECLAIM_get_attributes_next (struct GNUNET_RECLAIM_AttributeIterator *it);
+GNUNET_RECLAIM_get_attributes_next (
+    struct GNUNET_RECLAIM_AttributeIterator *it);
 
 
 /**
- * Stops iteration and releases the idp handle for further calls.  Must
+ * Stops iteration and releases the handle for further calls. Must
  * be called on any iteration that has not yet completed prior to calling
  * #GNUNET_RECLAIM_disconnect.
  *
  * @param it the iterator
  */
 void
-GNUNET_RECLAIM_get_attributes_stop (struct GNUNET_RECLAIM_AttributeIterator *it);
+GNUNET_RECLAIM_get_attributes_stop (
+    struct GNUNET_RECLAIM_AttributeIterator *it);
 
 
 /**
- * Method called when a token has been issued.
- * On success returns a ticket that can be given to the audience to retrive the
- * token
- *
- * @param cls closure
- * @param ticket the ticket
- */
-typedef void
-(*GNUNET_RECLAIM_TicketCallback)(void *cls,
-                            const struct GNUNET_RECLAIM_Ticket *ticket);
-
-/**
- * Issues a ticket to another identity. The identity may use
+ * Issues a ticket to a relying party. The identity may use
  * GNUNET_RECLAIM_ticket_consume to consume the ticket
- * and retrieve the attributes specified in the AttributeList.
+ * and retrieve the attributes specified in the attribute list.
  *
  * @param h the identity provider to use
- * @param iss the issuing identity
- * @param rp the subject of the ticket (the relying party)
+ * @param iss the issuing identity (= the user)
+ * @param rp the subject of the ticket (the relying party)
  * @param attrs the attributes that the relying party is given access to
  * @param cb the callback
  * @param cb_cls the callback closure
  * @return handle to abort the operation
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h,
-                                       const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss,
-                                       const struct GNUNET_CRYPTO_EcdsaPublicKey *rp,
-                                       const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
-                                       GNUNET_RECLAIM_TicketCallback cb,
-                                       void *cb_cls);
+GNUNET_RECLAIM_ticket_issue (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss,
+    const struct GNUNET_CRYPTO_EcdsaPublicKey *rp,
+    const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
+    GNUNET_RECLAIM_TicketCallback cb, void *cb_cls);
 
 /**
  * Revoked an issued ticket. The relying party will be unable to retrieve
- * updated attributes.
+ * attributes. Other issued tickets remain unaffected.
+ * This includes tickets issued to other relying parties as well as to
+ * other tickets issued to the audience specified in this ticket.
  *
  * @param h the identity provider to use
  * @param identity the issuing identity
@@ -245,31 +241,31 @@ GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h,
  * @return handle to abort the operation
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h,
-                                        const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                        const struct GNUNET_RECLAIM_Ticket *ticket,
-                                        GNUNET_RECLAIM_ContinuationWithStatus cb,
-                                        void *cb_cls);
-
+GNUNET_RECLAIM_ticket_revoke (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    const struct GNUNET_RECLAIM_Ticket *ticket,
+    GNUNET_RECLAIM_ContinuationWithStatus cb, void *cb_cls);
 
 
 /**
- * Consumes an issued ticket. The ticket is persisted
- * and used to retrieve identity information from the issuer
+ * Consumes an issued ticket. The ticket is used to retrieve identity
+ * information from the issuer
  *
  * @param h the identity provider to use
- * @param identity the identity that is the subject of the issued ticket (the audience)
+ * @param identity the identity that is the subject of the issued ticket (the
+ * relying party)
  * @param ticket the issued ticket to consume
  * @param cb the callback to call
  * @param cb_cls the callback closure
  * @return handle to abort the operation
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h,
-                                         const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                         const struct GNUNET_RECLAIM_Ticket *ticket,
-                                         GNUNET_RECLAIM_AttributeResult cb,
-                                         void *cb_cls);
+GNUNET_RECLAIM_ticket_consume (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    const struct GNUNET_RECLAIM_Ticket *ticket,
+    GNUNET_RECLAIM_AttributeResult cb, void *cb_cls);
 
 /**
  * Lists all tickets that have been issued to remote
@@ -289,45 +285,17 @@ GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h,
  * @return an iterator handle to use for iteration
  */
 struct GNUNET_RECLAIM_TicketIterator *
-GNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h,
-                                                 const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                                 GNUNET_SCHEDULER_TaskCallback error_cb,
-                                                 void *error_cb_cls,
-                                                 GNUNET_RECLAIM_TicketCallback proc,
-                                                 void *proc_cls,
-                                                 GNUNET_SCHEDULER_TaskCallback finish_cb,
-                                                 void *finish_cb_cls);
+GNUNET_RECLAIM_ticket_iteration_start (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls,
+    GNUNET_RECLAIM_TicketCallback proc, void *proc_cls,
+    GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls);
 
-/**
- * Lists all tickets that have been issued to remote
- * identites (relying parties)
- *
- * @param h the identity provider to use
- * @param identity the issuing identity
- * @param error_cb function to call on error (i.e. disconnect),
- *        the handle is afterwards invalid
- * @param error_cb_cls closure for @a error_cb
- * @param proc function to call on each ticket; it
- *        will be called repeatedly with a value (if available)
- * @param proc_cls closure for @a proc
- * @param finish_cb function to call on completion
- *        the handle is afterwards invalid
- * @param finish_cb_cls closure for @a finish_cb
- * @return an iterator handle to use for iteration
- */
-struct GNUNET_RECLAIM_TicketIterator *
-GNUNET_RECLAIM_ticket_iteration_start_rp (struct GNUNET_RECLAIM_Handle *h,
-                                                    const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
-                                                    GNUNET_SCHEDULER_TaskCallback error_cb,
-                                                    void *error_cb_cls,
-                                                    GNUNET_RECLAIM_TicketCallback proc,
-                                                    void *proc_cls,
-                                                    GNUNET_SCHEDULER_TaskCallback finish_cb,
-                                                    void *finish_cb_cls);
 
 /**
- * Calls the record processor specified in #GNUNET_RECLAIM_ticket_iteration_start
- * for the next record.
+ * Calls the ticket processor specified in
+ * #GNUNET_RECLAIM_ticket_iteration_start for the next record.
  *
  * @param it the iterator
  */
@@ -335,7 +303,7 @@ void
 GNUNET_RECLAIM_ticket_iteration_next (struct GNUNET_RECLAIM_TicketIterator *it);
 
 /**
- * Stops iteration and releases the idp handle for further calls.  Must
+ * Stops iteration and releases the handle for further calls.  Must
  * be called on any iteration that has not yet completed prior to calling
  * #GNUNET_RECLAIM_disconnect.
  *
@@ -364,7 +332,7 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h);
 void
 GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op);
 
-#if 0                           /* keep Emacsens' auto-indent happy */
+#if 0 /* keep Emacsens' auto-indent happy */
 {
 #endif
 #ifdef __cplusplus
index 7e8686734cf23057a85d04ac10a7299a34a82a6e..67d640357216bd89e4813ecc39e79606885b1089 100644 (file)
@@ -12,9 +12,6 @@ if USE_COVERAGE
   XLIB = -lgcov
 endif
 
-if HAVE_SQLITE
-SQLITE_PLUGIN = libgnunet_plugin_reclaim_sqlite.la
-endif
 
 if HAVE_MHD
 if HAVE_JSON
@@ -41,7 +38,6 @@ lib_LTLIBRARIES = \
   libgnunetreclaim.la
 plugin_LTLIBRARIES = \
   libgnunet_plugin_gnsrecord_reclaim.la \
-  $(SQLITE_PLUGIN) \
   $(REST_PLUGIN)
 
 bin_PROGRAMS = \
@@ -93,19 +89,6 @@ libgnunet_plugin_gnsrecord_reclaim_la_LIBADD = \
 libgnunet_plugin_gnsrecord_reclaim_la_LDFLAGS = \
  $(GN_PLUGIN_LDFLAGS)
 
-libgnunet_plugin_reclaim_sqlite_la_SOURCES = \
-  plugin_reclaim_sqlite.c
-libgnunet_plugin_reclaim_sqlite_la_LIBADD = \
-  libgnunetreclaim.la  \
-  $(top_builddir)/src/sq/libgnunetsq.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/reclaim-attribute/libgnunetreclaimattribute.la \
-  $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) -lsqlite3 \
-  $(LTLIBINTL)
-libgnunet_plugin_reclaim_sqlite_la_LDFLAGS = \
- $(GN_PLUGIN_LDFLAGS)
-
-
 
 gnunet_service_reclaim_SOURCES = \
  gnunet-service-reclaim.c \
diff --git a/src/reclaim/plugin_reclaim_sqlite.c b/src/reclaim/plugin_reclaim_sqlite.c
deleted file mode 100644 (file)
index f6e1436..0000000
+++ /dev/null
@@ -1,736 +0,0 @@
- /*
-  * This file is part of GNUnet
-  * Copyright (C) 2009-2017 GNUnet e.V.
-  *
-  * GNUnet is free software: you can redistribute it and/or modify it
-  * under the terms of the GNU Affero General Public License as published
-  * by the Free Software Foundation, either version 3 of the License,
-  * or (at your option) any later version.
-  *
-  * GNUnet 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
-  * Affero General Public License for more details.
-  *
-  * You should have received a copy of the GNU Affero General Public License
-  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-  */
-
-/**
- * @file reclaim/plugin_reclaim_sqlite.c
- * @brief sqlite-based idp backend
- * @author Martin Schanzenbach
- */
-
-#include "platform.h"
-#include "gnunet_reclaim_service.h"
-#include "gnunet_reclaim_plugin.h"
-#include "gnunet_reclaim_attribute_lib.h"
-#include "gnunet_sq_lib.h"
-#include <sqlite3.h>
-
-/**
- * After how many ms "busy" should a DB operation fail for good?  A
- * low value makes sure that we are more responsive to requests
- * (especially PUTs).  A high value guarantees a higher success rate
- * (SELECTs in iterate can take several seconds despite LIMIT=1).
- *
- * The default value of 1s should ensure that users do not experience
- * huge latencies while at the same time allowing operations to
- * succeed with reasonable probability.
- */
-#define BUSY_TIMEOUT_MS 1000
-
-
-/**
- * Log an error message at log-level 'level' that indicates
- * a failure of the command 'cmd' on file 'filename'
- * with the message given by strerror(errno).
- */
-#define LOG_SQLITE(db, level, cmd) do { GNUNET_log_from (level, "reclaim", _("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(db->dbh)); } while(0)
-
-#define LOG(kind,...) GNUNET_log_from (kind, "reclaim-sqlite", __VA_ARGS__)
-
-
-/**
- * Context for all functions in this plugin.
- */
-struct Plugin
-{
-
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Database filename.
-   */
-  char *fn;
-
-  /**
-   * Native SQLite database handle.
-   */
-  sqlite3 *dbh;
-
-  /**
-   * Precompiled SQL to store ticket.
-   */
-  sqlite3_stmt *store_ticket;
-
-  /**
-   * Precompiled SQL to delete existing ticket.
-   */
-  sqlite3_stmt *delete_ticket;
-
-  /**
-   * Precompiled SQL to iterate tickets.
-   */
-  sqlite3_stmt *iterate_tickets;
-
-  /**
-   * Precompiled SQL to get ticket attributes.
-   */
-  sqlite3_stmt *get_ticket_attrs;
-  
-  /**
-   * Precompiled SQL to iterate tickets by audience.
-   */
-  sqlite3_stmt *iterate_tickets_by_audience;
-};
-
-
-/**
- * @brief Prepare a SQL statement
- *
- * @param dbh handle to the database
- * @param zSql SQL statement, UTF-8 encoded
- * @param ppStmt set to the prepared statement
- * @return 0 on success
- */
-static int
-sq_prepare (sqlite3 *dbh,
-            const char *zSql,
-            sqlite3_stmt **ppStmt)
-{
-  char *dummy;
-  int result;
-
-  result =
-      sqlite3_prepare_v2 (dbh,
-                          zSql,
-                          strlen (zSql),
-                          ppStmt,
-                          (const char **) &dummy);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Prepared `%s' / %p: %d\n",
-       zSql,
-       *ppStmt,
-       result);
-  return result;
-}
-
-/**
- * Create our database indices.
- *
- * @param dbh handle to the database
- */
-static void
-create_indices (sqlite3 * dbh)
-{
-  /* create indices */
-  if ( (SQLITE_OK !=
-       sqlite3_exec (dbh,
-                      "CREATE INDEX IF NOT EXISTS identity_reverse ON identity001tickets (identity,audience)",
-                     NULL, NULL, NULL)) ||
-       (SQLITE_OK !=
-       sqlite3_exec (dbh,
-                      "CREATE INDEX IF NOT EXISTS it_iter ON identity001tickets (rnd)",
-                     NULL, NULL, NULL)) )
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-        "Failed to create indices: %s\n",
-         sqlite3_errmsg (dbh));
-}
-
-
-
-#if 0
-#define CHECK(a) GNUNET_break(a)
-#define ENULL NULL
-#else
-#define ENULL &e
-#define ENULL_DEFINED 1
-#define CHECK(a) if (! (a)) { GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "%s\n", e); sqlite3_free(e); }
-#endif
-
-
-/**
- * Initialize the database connections and associated
- * data structures (create tables and indices
- * as needed as well).
- *
- * @param plugin the plugin context (state for this module)
- * @return #GNUNET_OK on success
- */
-static int
-database_setup (struct Plugin *plugin)
-{
-  sqlite3_stmt *stmt;
-  char *afsdir;
-#if ENULL_DEFINED
-  char *e;
-#endif
-
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (plugin->cfg,
-                                               "reclaim-sqlite",
-                                               "FILENAME",
-                                               &afsdir))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                              "reclaim-sqlite",
-                               "FILENAME");
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK !=
-      GNUNET_DISK_file_test (afsdir))
-  {
-    if (GNUNET_OK !=
-        GNUNET_DISK_directory_create_for_file (afsdir))
-    {
-      GNUNET_break (0);
-      GNUNET_free (afsdir);
-      return GNUNET_SYSERR;
-    }
-  }
-  /* afsdir should be UTF-8-encoded. If it isn't, it's a bug */
-  plugin->fn = afsdir;
-
-  /* Open database and precompile statements */
-  if (sqlite3_open (plugin->fn, &plugin->dbh) != SQLITE_OK)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-        _("Unable to initialize SQLite: %s.\n"),
-        sqlite3_errmsg (plugin->dbh));
-    return GNUNET_SYSERR;
-  }
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA temp_store=MEMORY", NULL, NULL,
-                       ENULL));
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA synchronous=NORMAL", NULL, NULL,
-                       ENULL));
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA legacy_file_format=OFF", NULL, NULL,
-                       ENULL));
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA auto_vacuum=INCREMENTAL", NULL,
-                       NULL, ENULL));
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA encoding=\"UTF-8\"", NULL,
-                       NULL, ENULL));
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL,
-                       ENULL));
-  CHECK (SQLITE_OK ==
-         sqlite3_exec (plugin->dbh,
-                       "PRAGMA page_size=4092", NULL, NULL,
-                       ENULL));
-
-  CHECK (SQLITE_OK ==
-         sqlite3_busy_timeout (plugin->dbh,
-                               BUSY_TIMEOUT_MS));
-
-
-  /* Create table */
-  CHECK (SQLITE_OK ==
-         sq_prepare (plugin->dbh,
-                     "SELECT 1 FROM sqlite_master WHERE tbl_name = 'identity001tickets'",
-                     &stmt));
-  if ((sqlite3_step (stmt) == SQLITE_DONE) &&
-      (sqlite3_exec
-       (plugin->dbh,
-        "CREATE TABLE identity001tickets ("
-        " identity BLOB NOT NULL DEFAULT '',"
-        " audience BLOB NOT NULL DEFAULT '',"
-             " rnd INT8 NOT NULL DEFAULT '',"
-        " attributes BLOB NOT NULL DEFAULT ''"
-       ")",
-       NULL, NULL, NULL) != SQLITE_OK))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR,
-                "sqlite3_exec");
-    sqlite3_finalize (stmt);
-    return GNUNET_SYSERR;
-  }
-  sqlite3_finalize (stmt);
-
-  create_indices (plugin->dbh);
-
-  if ( (SQLITE_OK !=
-        sq_prepare (plugin->dbh,
-                    "INSERT INTO identity001tickets (identity, audience, rnd, attributes)"
-                    " VALUES (?, ?, ?, ?)",
-                    &plugin->store_ticket)) ||
-       (SQLITE_OK !=
-        sq_prepare (plugin->dbh,
-                    "DELETE FROM identity001tickets WHERE identity=? AND rnd=?",
-                    &plugin->delete_ticket)) ||
-       (SQLITE_OK !=
-        sq_prepare (plugin->dbh,
-                    "SELECT identity,audience,rnd,attributes"
-                    " FROM identity001tickets WHERE identity=? AND rnd=?",
-                    &plugin->get_ticket_attrs)) ||
-       (SQLITE_OK !=
-        sq_prepare (plugin->dbh,
-                    "SELECT identity,audience,rnd,attributes"
-                    " FROM identity001tickets WHERE identity=?"
-                    " ORDER BY rnd LIMIT 1 OFFSET ?",
-                    &plugin->iterate_tickets)) ||
-       (SQLITE_OK !=
-        sq_prepare (plugin->dbh,
-                    "SELECT identity,audience,rnd,attributes"
-                    " FROM identity001tickets WHERE audience=?"
-                    " ORDER BY rnd LIMIT 1 OFFSET ?",
-                    &plugin->iterate_tickets_by_audience)) ) 
-  {
-    LOG_SQLITE (plugin,
-                GNUNET_ERROR_TYPE_ERROR,
-                "precompiling");
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Shutdown database connection and associate data
- * structures.
- * @param plugin the plugin context (state for this module)
- */
-static void
-database_shutdown (struct Plugin *plugin)
-{
-  int result;
-  sqlite3_stmt *stmt;
-
-  if (NULL != plugin->store_ticket)
-    sqlite3_finalize (plugin->store_ticket);
-  if (NULL != plugin->delete_ticket)
-    sqlite3_finalize (plugin->delete_ticket);
-  if (NULL != plugin->iterate_tickets)
-    sqlite3_finalize (plugin->iterate_tickets);
-  if (NULL != plugin->iterate_tickets_by_audience)
-    sqlite3_finalize (plugin->iterate_tickets_by_audience);
-  if (NULL != plugin->get_ticket_attrs)
-    sqlite3_finalize (plugin->get_ticket_attrs);
-  result = sqlite3_close (plugin->dbh);
-  if (result == SQLITE_BUSY)
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-        _("Tried to close sqlite without finalizing all prepared statements.\n"));
-    stmt = sqlite3_next_stmt (plugin->dbh,
-                              NULL);
-    while (NULL != stmt)
-    {
-      GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG,
-                       "sqlite",
-                       "Closing statement %p\n",
-                       stmt);
-      result = sqlite3_finalize (stmt);
-      if (result != SQLITE_OK)
-        GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING,
-                         "sqlite",
-                         "Failed to close statement %p: %d\n",
-                         stmt,
-                         result);
-      stmt = sqlite3_next_stmt (plugin->dbh,
-                                NULL);
-    }
-    result = sqlite3_close (plugin->dbh);
-  }
-  if (SQLITE_OK != result)
-    LOG_SQLITE (plugin,
-                GNUNET_ERROR_TYPE_ERROR,
-                "sqlite3_close");
-
-  GNUNET_free_non_null (plugin->fn);
-}
-
-
-/**
- * Store a ticket in the database.
- *
- * @param cls closure (internal context for the plugin)
- * @param ticket the ticket to persist
- * @param attrs the attributes associated with the ticket
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-reclaim_sqlite_store_ticket (void *cls,
-                                       const struct GNUNET_RECLAIM_Ticket *ticket,
-                                       const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs)
-{
-  struct Plugin *plugin = cls;
-  size_t attrs_len;
-  char *attrs_ser;
-  int n;
-
-  { 
-    /* First delete duplicates */
-    struct GNUNET_SQ_QueryParam dparams[] = {
-      GNUNET_SQ_query_param_auto_from_type (&ticket->identity),
-      GNUNET_SQ_query_param_uint64 (&ticket->rnd),
-      GNUNET_SQ_query_param_end
-    };
-    if (GNUNET_OK !=
-        GNUNET_SQ_bind (plugin->delete_ticket,
-                        dparams))
-    {
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_bind_XXXX");
-      GNUNET_SQ_reset (plugin->dbh,
-                       plugin->delete_ticket);
-      return GNUNET_SYSERR;
-    }
-    n = sqlite3_step (plugin->delete_ticket);
-    GNUNET_SQ_reset (plugin->dbh,
-                     plugin->delete_ticket);
-    
-    attrs_len = GNUNET_RECLAIM_ATTRIBUTE_list_serialize_get_size (attrs);
-    attrs_ser = GNUNET_malloc (attrs_len);
-    GNUNET_RECLAIM_ATTRIBUTE_list_serialize (attrs,
-                              attrs_ser);
-    struct GNUNET_SQ_QueryParam sparams[] = {
-      GNUNET_SQ_query_param_auto_from_type (&ticket->identity),
-      GNUNET_SQ_query_param_auto_from_type (&ticket->audience),
-      GNUNET_SQ_query_param_uint64 (&ticket->rnd),
-      GNUNET_SQ_query_param_fixed_size (attrs_ser, attrs_len),
-      GNUNET_SQ_query_param_end
-    };
-
-    if (GNUNET_OK !=
-        GNUNET_SQ_bind (plugin->store_ticket,
-                        sparams))
-    {
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_bind_XXXX");
-      GNUNET_SQ_reset (plugin->dbh,
-                       plugin->store_ticket);
-      return GNUNET_SYSERR;
-    }
-    n = sqlite3_step (plugin->store_ticket);
-    GNUNET_SQ_reset (plugin->dbh,
-                     plugin->store_ticket);
-    GNUNET_free (attrs_ser);
-  }
-  switch (n)
-  {
-    case SQLITE_DONE:
-      GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG,
-                       "sqlite",
-                       "Ticket stored\n");
-      return GNUNET_OK;
-    case SQLITE_BUSY:
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-      return GNUNET_NO;
-    default:
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-      return GNUNET_SYSERR;
-  }
-}
-
-
-/**
- * Store a ticket in the database.
- *
- * @param cls closure (internal context for the plugin)
- * @param ticket the ticket to delete
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-reclaim_sqlite_delete_ticket (void *cls,
-                                        const struct GNUNET_RECLAIM_Ticket *ticket)
-{
-  struct Plugin *plugin = cls;
-  int n;
-
-  {  
-    struct GNUNET_SQ_QueryParam sparams[] = {
-      GNUNET_SQ_query_param_auto_from_type (&ticket->identity),
-      GNUNET_SQ_query_param_uint64 (&ticket->rnd),
-      GNUNET_SQ_query_param_end
-    };
-
-    if (GNUNET_OK !=
-        GNUNET_SQ_bind (plugin->delete_ticket,
-                        sparams))
-    {
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_bind_XXXX");
-      GNUNET_SQ_reset (plugin->dbh,
-                       plugin->store_ticket);
-      return GNUNET_SYSERR;
-    }
-    n = sqlite3_step (plugin->delete_ticket);
-    GNUNET_SQ_reset (plugin->dbh,
-                     plugin->delete_ticket);
-  }
-  switch (n)
-  {
-    case SQLITE_DONE:
-      GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG,
-                       "sqlite",
-                       "Ticket deleted\n");
-      return GNUNET_OK;
-    case SQLITE_BUSY:
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-      return GNUNET_NO;
-    default:
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-      return GNUNET_SYSERR;
-  }
-}
-
-
-/**
- * The given 'sqlite' statement has been prepared to be run.
- * It will return a record which should be given to the iterator.
- * Runs the statement and parses the returned record.
- *
- * @param plugin plugin context
- * @param stmt to run (and then clean up)
- * @param iter iterator to call with the result
- * @param iter_cls closure for @a iter
- * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
- */
-static int
-get_ticket_and_call_iterator (struct Plugin *plugin,
-                              sqlite3_stmt *stmt,
-                              GNUNET_RECLAIM_TicketIterator iter,
-                              void *iter_cls)
-{
-  struct GNUNET_RECLAIM_Ticket ticket;
-  struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs;
-  int ret;
-  int sret;
-  size_t attrs_len;
-  char *attrs_ser;
-
-  ret = GNUNET_NO;
-  if (SQLITE_ROW == (sret = sqlite3_step (stmt)))
-  {
-    struct GNUNET_SQ_ResultSpec rs[] = {
-      GNUNET_SQ_result_spec_auto_from_type (&ticket.identity),
-      GNUNET_SQ_result_spec_auto_from_type (&ticket.audience),
-      GNUNET_SQ_result_spec_uint64 (&ticket.rnd),
-      GNUNET_SQ_result_spec_variable_size ((void**)&attrs_ser,
-                                           &attrs_len),
-      GNUNET_SQ_result_spec_end
-
-    };
-    ret = GNUNET_SQ_extract_result (stmt,
-                                    rs);
-    if (GNUNET_OK != ret)
-    {
-      GNUNET_break (0);
-      ret = GNUNET_SYSERR;
-    }
-    else
-    {
-      attrs = GNUNET_RECLAIM_ATTRIBUTE_list_deserialize (attrs_ser,
-                                          attrs_len);
-      if (NULL != iter)
-        iter (iter_cls,
-              &ticket,
-              attrs);
-      GNUNET_RECLAIM_ATTRIBUTE_list_destroy (attrs);
-      ret = GNUNET_YES;
-    }
-    GNUNET_SQ_cleanup_result (rs);
-  }
-  else
-  {
-    if (SQLITE_DONE != sret)
-      LOG_SQLITE (plugin,
-                  GNUNET_ERROR_TYPE_ERROR,
-                  "sqlite_step");
-  }
-  GNUNET_SQ_reset (plugin->dbh,
-                   stmt);
-  return ret;
-}
-
-
-/**
- * Lookup tickets in the datastore.
- *
- * @param cls closure (internal context for the plugin)
- * @param ticket the ticket to retrieve attributes for
- * @param iter function to call with the result
- * @param iter_cls closure for @a iter
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-reclaim_sqlite_ticket_get_attrs (void *cls,
-                                           const struct GNUNET_RECLAIM_Ticket *ticket,
-                                           GNUNET_RECLAIM_TicketIterator iter,
-                                           void *iter_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_SQ_QueryParam params[] = {
-    GNUNET_SQ_query_param_auto_from_type (&ticket->identity),
-    GNUNET_SQ_query_param_uint64 (&ticket->rnd),
-    GNUNET_SQ_query_param_end
-  };
-
-  if (GNUNET_OK !=
-      GNUNET_SQ_bind (plugin->get_ticket_attrs,
-                      params))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind_XXXX");
-    GNUNET_SQ_reset (plugin->dbh,
-                     plugin->get_ticket_attrs);
-    return GNUNET_SYSERR;
-  }
-  return get_ticket_and_call_iterator (plugin,
-                                       plugin->get_ticket_attrs,
-                                       iter,
-                                       iter_cls);
-}
-
-
-/**
- * Iterate over the results for a particular key and zone in the
- * datastore.  Will return at most one result to the iterator.
- *
- * @param cls closure (internal context for the plugin)
- * @param identity the issuing identity or audience (depending on audience switch)
- * @param audience GNUNET_YES if identity is audience
- * @param offset offset in the list of all matching records
- * @param iter function to call with the result
- * @param iter_cls closure for @a iter
- * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
- */
-static int
-reclaim_sqlite_iterate_tickets (void *cls,
-                                          const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
-                                          int audience,
-                                          uint64_t offset,
-                                          GNUNET_RECLAIM_TicketIterator iter,
-                                          void *iter_cls)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt;
-  int err;
-
-  if (NULL == identity)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  struct GNUNET_SQ_QueryParam params[] = {
-    GNUNET_SQ_query_param_auto_from_type (identity),
-    GNUNET_SQ_query_param_uint64 (&offset),
-    GNUNET_SQ_query_param_end
-  };
-  if (GNUNET_YES == audience)
-  {
-    stmt = plugin->iterate_tickets_by_audience;
-    err = GNUNET_SQ_bind (stmt,
-                          params);
-  }
-  else
-  {
-    stmt = plugin->iterate_tickets;
-    err = GNUNET_SQ_bind (stmt,
-                          params);
-  }
-  if (GNUNET_OK != err)
-  {
-    LOG_SQLITE (plugin,
-                GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind_XXXX");
-    GNUNET_SQ_reset (plugin->dbh,
-                     stmt);
-    return GNUNET_SYSERR;
-  }
-  return get_ticket_and_call_iterator (plugin,
-                                       stmt,
-                                       iter,
-                                       iter_cls);
-}
-
-
-/**
- * Entry point for the plugin.
- *
- * @param cls the "struct GNUNET_RECLAIM_PluginEnvironment*"
- * @return NULL on error, otherwise the plugin context
- */
-void *
-libgnunet_plugin_reclaim_sqlite_init (void *cls)
-{
-  static struct Plugin plugin;
-  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
-  struct GNUNET_RECLAIM_PluginFunctions *api;
-
-  if (NULL != plugin.cfg)
-    return NULL;                /* can only initialize once! */
-  memset (&plugin, 0, sizeof (struct Plugin));
-  plugin.cfg = cfg;
-  if (GNUNET_OK != database_setup (&plugin))
-  {
-    database_shutdown (&plugin);
-    return NULL;
-  }
-  api = GNUNET_new (struct GNUNET_RECLAIM_PluginFunctions);
-  api->cls = &plugin;
-  api->store_ticket = &reclaim_sqlite_store_ticket;
-  api->delete_ticket = &reclaim_sqlite_delete_ticket;
-  api->iterate_tickets = &reclaim_sqlite_iterate_tickets;
-  api->get_ticket_attributes = &reclaim_sqlite_ticket_get_attrs;
-  LOG (GNUNET_ERROR_TYPE_INFO,
-       _("Sqlite database running\n"));
-  return api;
-}
-
-
-/**
- * Exit point from the plugin.
- *
- * @param cls the plugin context (as returned by "init")
- * @return always NULL
- */
-void *
-libgnunet_plugin_reclaim_sqlite_done (void *cls)
-{
-  struct GNUNET_RECLAIM_PluginFunctions *api = cls;
-  struct Plugin *plugin = api->cls;
-
-  database_shutdown (plugin);
-  plugin->cfg = NULL;
-  GNUNET_free (api);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "sqlite plugin is finished\n");
-  return NULL;
-}
-
-/* end of plugin_reclaim_sqlite.c */
index 5073199ca6e608bd0b92adb3de1825837c637edf..605a63d5ec3bee6f15d636bb8c6735354b05413c 100644 (file)
@@ -10,7 +10,6 @@ UNIXPATH = $GNUNET_USER_RUNTIME_DIR/gnunet-service-reclaim.sock
 UNIX_MATCH_UID = NO
 UNIX_MATCH_GID = YES
 TOKEN_EXPIRATION_INTERVAL = 30 m
-DATABASE = sqlite
 
 [reclaim-rest-plugin]
 #ADDRESS = https://identity.gnu:8000#/login
@@ -18,6 +17,3 @@ ADDRESS = https://ui.reclaim/#/login
 PSW = secret
 JWT_SECRET = secret
 EXPIRATION_TIME = 1d
-
-[reclaim-sqlite]
-FILENAME = $GNUNET_DATA_HOME/reclaim/sqlite.db
index dd6a249b589a8b56a096b603ff85cc786b10856e..0edae76c24ed89bc3d8a6896bdc9356f3f241656 100644 (file)
  * @author Martin Schanzenbach
  */
 #include "platform.h"
+
 #include "gnunet_util_lib.h"
+
 #include "gnunet_constants.h"
-#include "gnunet_protocols.h"
 #include "gnunet_mq_lib.h"
-#include "gnunet_reclaim_service.h"
+#include "gnunet_protocols.h"
 #include "gnunet_reclaim_attribute_lib.h"
+#include "gnunet_reclaim_service.h"
 #include "reclaim.h"
 
-#define LOG(kind,...) GNUNET_log_from (kind, "reclaim-api",__VA_ARGS__)
+#define LOG(kind, ...) GNUNET_log_from (kind, "reclaim-api", __VA_ARGS__)
 
 
 /**
@@ -96,9 +98,9 @@ struct GNUNET_RECLAIM_Operation
    * Closure for @e cont or @e cb.
    */
   void *cls;
-
 };
 
+
 /**
  * Handle for a ticket iterator operation
  */
@@ -126,7 +128,7 @@ struct GNUNET_RECLAIM_TicketIterator
   GNUNET_SCHEDULER_TaskCallback finish_cb;
 
   /**
-   * Closure for @e error_cb.
+   * Closure for @e finish_cb.
    */
   void *finish_cb_cls;
 
@@ -160,7 +162,6 @@ struct GNUNET_RECLAIM_TicketIterator
    * The operation id this zone iteration operation has
    */
   uint32_t r_id;
-
 };
 
 
@@ -181,7 +182,7 @@ struct GNUNET_RECLAIM_AttributeIterator
   struct GNUNET_RECLAIM_AttributeIterator *prev;
 
   /**
-   * Main handle to access the idp.
+   * Main handle to access the service.
    */
   struct GNUNET_RECLAIM_Handle *h;
 
@@ -191,7 +192,7 @@ struct GNUNET_RECLAIM_AttributeIterator
   GNUNET_SCHEDULER_TaskCallback finish_cb;
 
   /**
-   * Closure for @e error_cb.
+   * Closure for @e finish_cb.
    */
   void *finish_cb_cls;
 
@@ -230,12 +231,11 @@ struct GNUNET_RECLAIM_AttributeIterator
    * The operation id this zone iteration operation has
    */
   uint32_t r_id;
-
 };
 
 
 /**
- * Handle for the service.
+ * Handle to the service.
  */
 struct GNUNET_RECLAIM_Handle
 {
@@ -284,7 +284,6 @@ struct GNUNET_RECLAIM_Handle
    */
   struct GNUNET_RECLAIM_TicketIterator *ticket_it_tail;
 
-
   /**
    * Currently pending transmission request, or NULL for none.
    */
@@ -293,7 +292,7 @@ struct GNUNET_RECLAIM_Handle
   /**
    * Task doing exponential back-off trying to reconnect.
    */
-  struct GNUNET_SCHEDULER_Task * reconnect_task;
+  struct GNUNET_SCHEDULER_Task *reconnect_task;
 
   /**
    * Time for next connect retry.
@@ -314,9 +313,9 @@ struct GNUNET_RECLAIM_Handle
    * Are we polling for incoming messages right now?
    */
   int in_receive;
-
 };
 
+
 /**
  * Try again to connect to the service.
  *
@@ -325,6 +324,7 @@ struct GNUNET_RECLAIM_Handle
 static void
 reconnect (struct GNUNET_RECLAIM_Handle *h);
 
+
 /**
  * Reconnect
  *
@@ -350,14 +350,13 @@ force_reconnect (struct GNUNET_RECLAIM_Handle *handle)
 {
   GNUNET_MQ_destroy (handle->mq);
   handle->mq = NULL;
-  handle->reconnect_backoff
-    = GNUNET_TIME_STD_BACKOFF (handle->reconnect_backoff);
-  handle->reconnect_task
-    = GNUNET_SCHEDULER_add_delayed (handle->reconnect_backoff,
-                                    &reconnect_task,
-                                    handle);
+  handle->reconnect_backoff =
+      GNUNET_TIME_STD_BACKOFF (handle->reconnect_backoff);
+  handle->reconnect_task = GNUNET_SCHEDULER_add_delayed (
+      handle->reconnect_backoff, &reconnect_task, handle);
 }
 
+
 /**
  * Free @a it.
  *
@@ -368,22 +367,25 @@ free_it (struct GNUNET_RECLAIM_AttributeIterator *it)
 {
   struct GNUNET_RECLAIM_Handle *h = it->h;
 
-  GNUNET_CONTAINER_DLL_remove (h->it_head,
-                               h->it_tail,
-                               it);
+  GNUNET_CONTAINER_DLL_remove (h->it_head, h->it_tail, it);
   if (NULL != it->env)
     GNUNET_MQ_discard (it->env);
   GNUNET_free (it);
 }
 
+/**
+ * Free @a op
+ *
+ * @param op the operation to free
+ */
 static void
-free_op (struct GNUNET_RECLAIM_Operationop)
+free_op (struct GNUNET_RECLAIM_Operation *op)
 {
   if (NULL == op)
     return;
   if (NULL != op->env)
     GNUNET_MQ_discard (op->env);
-  GNUNET_free(op);
+  GNUNET_free (op);
 }
 
 
@@ -396,13 +398,13 @@ free_op (struct GNUNET_RECLAIM_Operation* op)
  * @param error error code
  */
 static void
-mq_error_handler (void *cls,
-                  enum GNUNET_MQ_Error error)
+mq_error_handler (void *cls, enum GNUNET_MQ_Error error)
 {
   struct GNUNET_RECLAIM_Handle *handle = cls;
   force_reconnect (handle);
 }
 
+
 /**
  * Handle an incoming message of type
  * #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE
@@ -412,7 +414,7 @@ mq_error_handler (void *cls,
  */
 static void
 handle_attribute_store_response (void *cls,
-                             const struct AttributeStoreResultMessage *msg)
+                                 const struct AttributeStoreResultMessage *msg)
 {
   struct GNUNET_RECLAIM_Handle *h = cls;
   struct GNUNET_RECLAIM_Operation *op;
@@ -428,23 +430,17 @@ handle_attribute_store_response (void *cls,
 
   res = ntohl (msg->op_result);
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received ATTRIBUTE_STORE_RESPONSE with result %d\n",
-       res);
+       "Received ATTRIBUTE_STORE_RESPONSE with result %d\n", res);
 
   /* TODO: add actual error message to response... */
   if (GNUNET_SYSERR == res)
-    emsg = _("failed to store record\n");
+    emsg = _ ("failed to store record\n");
   else
     emsg = NULL;
   if (NULL != op->as_cb)
-    op->as_cb (op->cls,
-              res,
-              emsg);
-  GNUNET_CONTAINER_DLL_remove (h->op_head,
-                               h->op_tail,
-                               op);
+    op->as_cb (op->cls, res, emsg);
+  GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op);
   free_op (op);
-
 }
 
 
@@ -465,8 +461,7 @@ check_consume_ticket_result (void *cls,
 
   msg_len = ntohs (msg->header.size);
   attrs_len = ntohs (msg->attrs_len);
-  if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len)
-  {
+  if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len) {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
@@ -491,8 +486,7 @@ handle_consume_ticket_result (void *cls,
   uint32_t r_id = ntohl (msg->id);
 
   attrs_len = ntohs (msg->attrs_len);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Processing attribute result.\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n");
 
 
   for (op = h->op_head; NULL != op; op = op->next)
@@ -504,33 +498,20 @@ handle_consume_ticket_result (void *cls,
   {
     struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs;
     struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le;
-    attrs = GNUNET_RECLAIM_ATTRIBUTE_list_deserialize ((char*)&msg[1],
-                                        attrs_len);
-    if (NULL != op->ar_cb)
-    {
-      if (NULL == attrs)
-      {
-        op->ar_cb (op->cls,
-                   &msg->identity,
-                   NULL);
-      }
-      else
-      {
+    attrs =
+        GNUNET_RECLAIM_ATTRIBUTE_list_deserialize ((char *)&msg[1], attrs_len);
+    if (NULL != op->ar_cb) {
+      if (NULL == attrs) {
+        op->ar_cb (op->cls, &msg->identity, NULL);
+      } else {
         for (le = attrs->list_head; NULL != le; le = le->next)
-          op->ar_cb (op->cls,
-                     &msg->identity,
-                     le->claim);
+          op->ar_cb (op->cls, &msg->identity, le->claim);
         GNUNET_RECLAIM_ATTRIBUTE_list_destroy (attrs);
       }
     }
-    if (NULL != op)
-    {
-      op->ar_cb (op->cls,
-                 NULL,
-                 NULL);
-      GNUNET_CONTAINER_DLL_remove (h->op_head,
-                                   h->op_tail,
-                                   op);
+    if (NULL != op) {
+      op->ar_cb (op->cls, NULL, NULL);
+      GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op);
       free_op (op);
     }
     return;
@@ -548,16 +529,14 @@ handle_consume_ticket_result (void *cls,
  * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
  */
 static int
-check_attribute_result (void *cls,
-                        const struct AttributeResultMessage *msg)
+check_attribute_result (void *cls, const struct AttributeResultMessage *msg)
 {
   size_t msg_len;
   size_t attr_len;
 
   msg_len = ntohs (msg->header.size);
   attr_len = ntohs (msg->attr_len);
-  if (msg_len != sizeof (struct AttributeResultMessage) + attr_len)
-  {
+  if (msg_len != sizeof (struct AttributeResultMessage) + attr_len) {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
@@ -573,8 +552,7 @@ check_attribute_result (void *cls,
  * @param msg the message we received
  */
 static void
-handle_attribute_result (void *cls,
-                         const struct AttributeResultMessage *msg)
+handle_attribute_result (void *cls, const struct AttributeResultMessage *msg)
 {
   static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
   struct GNUNET_RECLAIM_Handle *h = cls;
@@ -584,8 +562,7 @@ handle_attribute_result (void *cls,
   uint32_t r_id = ntohl (msg->id);
 
   attr_len = ntohs (msg->attr_len);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Processing attribute result.\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n");
 
 
   for (it = h->it_head; NULL != it; it = it->next)
@@ -597,54 +574,36 @@ handle_attribute_result (void *cls,
   if ((NULL == it) && (NULL == op))
     return;
 
-  if ( (0 == (memcmp (&msg->identity,
-                      &identity_dummy,
-                      sizeof (identity_dummy)))) )
-  {
-    if ((NULL == it) && (NULL == op))
-    {
+  if ((0 ==
+       (memcmp (&msg->identity, &identity_dummy, sizeof (identity_dummy))))) {
+    if ((NULL == it) && (NULL == op)) {
       GNUNET_break (0);
       force_reconnect (h);
       return;
     }
-    if (NULL != it)
-    {
+    if (NULL != it) {
       if (NULL != it->finish_cb)
         it->finish_cb (it->finish_cb_cls);
       free_it (it);
     }
-    if (NULL != op)
-    {
+    if (NULL != op) {
       if (NULL != op->ar_cb)
-        op->ar_cb (op->cls,
-                   NULL,
-                   NULL);
-      GNUNET_CONTAINER_DLL_remove (h->op_head,
-                                   h->op_tail,
-                                   op);
+        op->ar_cb (op->cls, NULL, NULL);
+      GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op);
       free_op (op);
-
     }
     return;
   }
 
   {
     struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr;
-    attr = GNUNET_RECLAIM_ATTRIBUTE_deserialize ((char*)&msg[1],
-                                                  attr_len);
-    if (NULL != it)
-    {
+    attr = GNUNET_RECLAIM_ATTRIBUTE_deserialize ((char *)&msg[1], attr_len);
+    if (NULL != it) {
       if (NULL != it->proc)
-        it->proc (it->proc_cls,
-                  &msg->identity,
-                  attr);
-    } else if (NULL != op)
-    {
+        it->proc (it->proc_cls, &msg->identity, attr);
+    } else if (NULL != op) {
       if (NULL != op->ar_cb)
-        op->ar_cb (op->cls,
-                   &msg->identity,
-                   attr);
-
+        op->ar_cb (op->cls, &msg->identity, attr);
     }
     GNUNET_free (attr);
     return;
@@ -661,14 +620,12 @@ handle_attribute_result (void *cls,
  * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
  */
 static int
-check_ticket_result (void *cls,
-                     const struct TicketResultMessage *msg)
+check_ticket_result (void *cls, const struct TicketResultMessage *msg)
 {
   size_t msg_len;
 
   msg_len = ntohs (msg->header.size);
-  if (msg_len < sizeof (struct TicketResultMessage))
-  {
+  if (msg_len < sizeof (struct TicketResultMessage)) {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
@@ -676,7 +633,6 @@ check_ticket_result (void *cls,
 }
 
 
-
 /**
  * Handle an incoming message of type
  * #GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT
@@ -685,8 +641,7 @@ check_ticket_result (void *cls,
  * @param msg the message we received
  */
 static void
-handle_ticket_result (void *cls,
-                      const struct TicketResultMessage *msg)
+handle_ticket_result (void *cls, const struct TicketResultMessage *msg)
 {
   struct GNUNET_RECLAIM_Handle *handle = cls;
   struct GNUNET_RECLAIM_Operation *op;
@@ -704,13 +659,9 @@ handle_ticket_result (void *cls,
   if ((NULL == op) && (NULL == it))
     return;
   msg_len = ntohs (msg->header.size);
-  if (NULL != op)
-  {
-    GNUNET_CONTAINER_DLL_remove (handle->op_head,
-                                 handle->op_tail,
-                                 op);
-    if (msg_len == sizeof (struct TicketResultMessage))
-    {
+  if (NULL != op) {
+    GNUNET_CONTAINER_DLL_remove (handle->op_head, handle->op_tail, op);
+    if (msg_len == sizeof (struct TicketResultMessage)) {
       if (NULL != op->tr_cb)
         op->tr_cb (op->cls, NULL);
     } else {
@@ -721,12 +672,10 @@ handle_ticket_result (void *cls,
     free_op (op);
     return;
   } else if (NULL != it) {
-    if (msg_len == sizeof (struct TicketResultMessage))
-    {
+    if (msg_len == sizeof (struct TicketResultMessage)) {
       if (NULL != it->tr_cb)
         GNUNET_CONTAINER_DLL_remove (handle->ticket_it_head,
-                                     handle->ticket_it_tail,
-                                     it);
+                                     handle->ticket_it_tail, it);
       it->finish_cb (it->finish_cb_cls);
       GNUNET_free (it);
     } else {
@@ -756,8 +705,7 @@ handle_revoke_ticket_result (void *cls,
   uint32_t r_id = ntohl (msg->id);
   int32_t success;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Processing revocation result.\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing revocation result.\n");
 
 
   for (op = h->op_head; NULL != op; op = op->next)
@@ -767,15 +715,10 @@ handle_revoke_ticket_result (void *cls,
     return;
   success = ntohl (msg->success);
   {
-    if (NULL != op->rvk_cb)
-    {
-      op->rvk_cb (op->cls,
-                  success,
-                  NULL);
+    if (NULL != op->rvk_cb) {
+      op->rvk_cb (op->cls, success, NULL);
     }
-    GNUNET_CONTAINER_DLL_remove (h->op_head,
-                                 h->op_tail,
-                                 op);
+    GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op);
     free_op (op);
     return;
   }
@@ -783,7 +726,6 @@ handle_revoke_ticket_result (void *cls,
 }
 
 
-
 /**
  * Try again to connect to the service.
  *
@@ -793,44 +735,34 @@ static void
 reconnect (struct GNUNET_RECLAIM_Handle *h)
 {
   struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (attribute_store_response,
-                             GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE_RESPONSE,
-                             struct AttributeStoreResultMessage,
-                             h),
-    GNUNET_MQ_hd_var_size (attribute_result,
-                           GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT,
-                           struct AttributeResultMessage,
-                           h),
-    GNUNET_MQ_hd_var_size (ticket_result,
-                           GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT,
-                           struct TicketResultMessage,
-                           h),
-    GNUNET_MQ_hd_var_size (consume_ticket_result,
-                           GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT,
-                           struct ConsumeTicketResultMessage,
-                           h),
-    GNUNET_MQ_hd_fixed_size (revoke_ticket_result,
-                             GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT,
-                             struct RevokeTicketResultMessage,
-                             h),
-    GNUNET_MQ_handler_end ()
-  };
+      GNUNET_MQ_hd_fixed_size (
+          attribute_store_response,
+          GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE_RESPONSE,
+          struct AttributeStoreResultMessage, h),
+      GNUNET_MQ_hd_var_size (attribute_result,
+                             GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT,
+                             struct AttributeResultMessage, h),
+      GNUNET_MQ_hd_var_size (ticket_result,
+                             GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT,
+                             struct TicketResultMessage, h),
+      GNUNET_MQ_hd_var_size (consume_ticket_result,
+                             GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT,
+                             struct ConsumeTicketResultMessage, h),
+      GNUNET_MQ_hd_fixed_size (revoke_ticket_result,
+                               GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT,
+                               struct RevokeTicketResultMessage, h),
+      GNUNET_MQ_handler_end ()};
   struct GNUNET_RECLAIM_Operation *op;
 
   GNUNET_assert (NULL == h->mq);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Connecting to reclaim service.\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to reclaim service.\n");
 
-  h->mq = GNUNET_CLIENT_connect (h->cfg,
-                                 "reclaim",
-                                 handlers,
-                                 &mq_error_handler,
-                                 h);
+  h->mq =
+      GNUNET_CLIENT_connect (h->cfg, "reclaim", handlers, &mq_error_handler, h);
   if (NULL == h->mq)
     return;
   for (op = h->op_head; NULL != op; op = op->next)
-    GNUNET_MQ_send_copy (h->mq,
-                         op->env);
+    GNUNET_MQ_send_copy (h->mq, op->env);
 }
 
 
@@ -848,8 +780,7 @@ GNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
   h = GNUNET_new (struct GNUNET_RECLAIM_Handle);
   h->cfg = cfg;
   reconnect (h);
-  if (NULL == h->mq)
-  {
+  if (NULL == h->mq) {
     GNUNET_free (h);
     return NULL;
   }
@@ -870,9 +801,7 @@ GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op)
 {
   struct GNUNET_RECLAIM_Handle *h = op->h;
 
-  GNUNET_CONTAINER_DLL_remove (h->op_head,
-                               h->op_tail,
-                               op);
+  GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op);
   free_op (op);
 }
 
@@ -886,13 +815,11 @@ void
 GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h)
 {
   GNUNET_assert (NULL != h);
-  if (NULL != h->mq)
-  {
+  if (NULL != h->mq) {
     GNUNET_MQ_destroy (h->mq);
     h->mq = NULL;
   }
-  if (NULL != h->reconnect_task)
-  {
+  if (NULL != h->reconnect_task) {
     GNUNET_SCHEDULER_cancel (h->reconnect_task);
     h->reconnect_task = NULL;
   }
@@ -904,7 +831,7 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h)
  * Store an attribute.  If the attribute is already present,
  * it is replaced with the new attribute.
  *
- * @param h handle to the reclaim
+ * @param h handle to the re:claimID service
  * @param pkey private key of the identity
  * @param attr the attribute value
  * @param exp_interval the relative expiration interval for the attribute
@@ -913,12 +840,12 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h)
  * @return handle to abort the request
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h,
-                                          const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
-                                          const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr,
-                                          const struct GNUNET_TIME_Relative *exp_interval,
-                                          GNUNET_RECLAIM_ContinuationWithStatus cont,
-                                          void *cont_cls)
+GNUNET_RECLAIM_attribute_store (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
+    const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr,
+    const struct GNUNET_TIME_Relative *exp_interval,
+    GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 {
   struct GNUNET_RECLAIM_Operation *op;
   struct AttributeStoreMessage *sam;
@@ -929,26 +856,20 @@ GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h,
   op->as_cb = cont;
   op->cls = cont_cls;
   op->r_id = h->r_id_gen++;
-  GNUNET_CONTAINER_DLL_insert_tail (h->op_head,
-                                    h->op_tail,
-                                    op);
+  GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op);
   attr_len = GNUNET_RECLAIM_ATTRIBUTE_serialize_get_size (attr);
-  op->env = GNUNET_MQ_msg_extra (sam,
-                                 attr_len,
+  op->env = GNUNET_MQ_msg_extra (sam, attr_len,
                                  GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE);
   sam->identity = *pkey;
   sam->id = htonl (op->r_id);
   sam->exp = GNUNET_htonll (exp_interval->rel_value_us);
 
-  GNUNET_RECLAIM_ATTRIBUTE_serialize (attr,
-                                       (char*)&sam[1]);
+  GNUNET_RECLAIM_ATTRIBUTE_serialize (attr, (char *)&sam[1]);
 
   sam->attr_len = htons (attr_len);
   if (NULL != h->mq)
-    GNUNET_MQ_send_copy (h->mq,
-                         op->env);
+    GNUNET_MQ_send_copy (h->mq, op->env);
   return op;
-
 }
 
 
@@ -964,28 +885,25 @@ GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h,
  * On normal completion, @a finish_cb proc will be
  * invoked.
  *
- * @param h handle to the idp
- * @param identity identity to access
- * @param error_cb function to call on error (i.e. disconnect),
+ * @param h Handle to the re:claimID service
+ * @param identity Identity to iterate over
+ * @param error_cb Function to call on error (i.e. disconnect),
  *        the handle is afterwards invalid
- * @param error_cb_cls closure for @a error_cb
- * @param proc function to call on each attribute; it
- *        will be called repeatedly with a value (if available)
- * @param proc_cls closure for @a proc
- * @param finish_cb function to call on completion
+ * @param error_cb_cls Closure for @a error_cb
+ * @param proc Function to call on each attribute
+ * @param proc_cls Closure for @a proc
+ * @param finish_cb Function to call on completion
  *        the handle is afterwards invalid
- * @param finish_cb_cls closure for @a finish_cb
- * @return an iterator handle to use for iteration
+ * @param finish_cb_cls Closure for @a finish_cb
+ * @return an iterator Handle to use for iteration
  */
 struct GNUNET_RECLAIM_AttributeIterator *
-GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h,
-                                               const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                               GNUNET_SCHEDULER_TaskCallback error_cb,
-                                               void *error_cb_cls,
-                                               GNUNET_RECLAIM_AttributeResult proc,
-                                               void *proc_cls,
-                                               GNUNET_SCHEDULER_TaskCallback finish_cb,
-                                               void *finish_cb_cls)
+GNUNET_RECLAIM_get_attributes_start (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls,
+    GNUNET_RECLAIM_AttributeResult proc, void *proc_cls,
+    GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls)
 {
   struct GNUNET_RECLAIM_AttributeIterator *it;
   struct GNUNET_MQ_Envelope *env;
@@ -1003,9 +921,7 @@ GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h,
   it->proc_cls = proc_cls;
   it->r_id = rid;
   it->identity = *identity;
-  GNUNET_CONTAINER_DLL_insert_tail (h->it_head,
-                                    h->it_tail,
-                                    it);
+  GNUNET_CONTAINER_DLL_insert_tail (h->it_head, h->it_tail, it);
   env = GNUNET_MQ_msg (msg,
                        GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_START);
   msg->id = htonl (rid);
@@ -1013,8 +929,7 @@ GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h,
   if (NULL == h->mq)
     it->env = env;
   else
-    GNUNET_MQ_send (h->mq,
-                    env);
+    GNUNET_MQ_send (h->mq, env);
   return it;
 }
 
@@ -1032,16 +947,15 @@ GNUNET_RECLAIM_get_attributes_next (struct GNUNET_RECLAIM_AttributeIterator *it)
   struct AttributeIterationNextMessage *msg;
   struct GNUNET_MQ_Envelope *env;
 
-  env = GNUNET_MQ_msg (msg,
-                       GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_NEXT);
+  env =
+      GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_NEXT);
   msg->id = htonl (it->r_id);
-  GNUNET_MQ_send (h->mq,
-                  env);
+  GNUNET_MQ_send (h->mq, env);
 }
 
 
 /**
- * Stops iteration and releases the idp handle for further calls.  Must
+ * Stops iteration and releases the handle for further calls. Must
  * be called on any iteration that has not yet completed prior to calling
  * #GNUNET_RECLAIM_disconnect.
  *
@@ -1054,38 +968,36 @@ GNUNET_RECLAIM_get_attributes_stop (struct GNUNET_RECLAIM_AttributeIterator *it)
   struct GNUNET_MQ_Envelope *env;
   struct AttributeIterationStopMessage *msg;
 
-  if (NULL != h->mq)
-  {
+  if (NULL != h->mq) {
     env = GNUNET_MQ_msg (msg,
                          GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_STOP);
     msg->id = htonl (it->r_id);
-    GNUNET_MQ_send (h->mq,
-                    env);
+    GNUNET_MQ_send (h->mq, env);
   }
   free_it (it);
 }
 
 
-/** TODO
- * Issues a ticket to another identity. The identity may use
- * @GNUNET_RECLAIM_authorization_ticket_consume to consume the ticket
- * and retrieve the attributes specified in the AttributeList.
+/**
+ * Issues a ticket to another relying party. The identity may use
+ * @GNUNET_RECLAIM_ticket_consume to consume the ticket
+ * and retrieve the attributes specified in the attribute list.
  *
  * @param h the reclaim to use
- * @param iss the issuing identity
- * @param rp the subject of the ticket (the relying party)
+ * @param iss the issuing identity (= the user)
+ * @param rp the subject of the ticket (the relying party)
  * @param attrs the attributes that the relying party is given access to
  * @param cb the callback
  * @param cb_cls the callback closure
  * @return handle to abort the operation
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h,
-                                       const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss,
-                                       const struct GNUNET_CRYPTO_EcdsaPublicKey *rp,
-                                       const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
-                                       GNUNET_RECLAIM_TicketCallback cb,
-                                       void *cb_cls)
+GNUNET_RECLAIM_ticket_issue (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss,
+    const struct GNUNET_CRYPTO_EcdsaPublicKey *rp,
+    const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs,
+    GNUNET_RECLAIM_TicketCallback cb, void *cb_cls)
 {
   struct GNUNET_RECLAIM_Operation *op;
   struct IssueTicketMessage *tim;
@@ -1096,44 +1008,41 @@ GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h,
   op->tr_cb = cb;
   op->cls = cb_cls;
   op->r_id = h->r_id_gen++;
-  GNUNET_CONTAINER_DLL_insert_tail (h->op_head,
-                                    h->op_tail,
-                                    op);
+  GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op);
   attr_len = GNUNET_RECLAIM_ATTRIBUTE_list_serialize_get_size (attrs);
-  op->env = GNUNET_MQ_msg_extra (tim,
-                                 attr_len,
+  op->env = GNUNET_MQ_msg_extra (tim, attr_len,
                                  GNUNET_MESSAGE_TYPE_RECLAIM_ISSUE_TICKET);
   tim->identity = *iss;
   tim->rp = *rp;
   tim->id = htonl (op->r_id);
 
-  GNUNET_RECLAIM_ATTRIBUTE_list_serialize (attrs,
-                                            (char*)&tim[1]);
+  GNUNET_RECLAIM_ATTRIBUTE_list_serialize (attrs, (char *)&tim[1]);
 
   tim->attr_len = htons (attr_len);
   if (NULL != h->mq)
-    GNUNET_MQ_send_copy (h->mq,
-                         op->env);
+    GNUNET_MQ_send_copy (h->mq, op->env);
   return op;
 }
 
+
 /**
  * Consumes an issued ticket. The ticket is persisted
  * and used to retrieve identity information from the issuer
  *
  * @param h the reclaim to use
- * @param identity the identity that is the subject of the issued ticket (the relying party)
+ * @param identity the identity that is the subject of the issued ticket (the
+ * relying party)
  * @param ticket the issued ticket to consume
  * @param cb the callback to call
  * @param cb_cls the callback closure
  * @return handle to abort the operation
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h,
-                                         const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                         const struct GNUNET_RECLAIM_Ticket *ticket,
-                                         GNUNET_RECLAIM_AttributeResult cb,
-                                         void *cb_cls)
+GNUNET_RECLAIM_ticket_consume (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    const struct GNUNET_RECLAIM_Ticket *ticket,
+    GNUNET_RECLAIM_AttributeResult cb, void *cb_cls)
 {
   struct GNUNET_RECLAIM_Operation *op;
   struct ConsumeTicketMessage *ctm;
@@ -1143,24 +1052,19 @@ GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h,
   op->ar_cb = cb;
   op->cls = cb_cls;
   op->r_id = h->r_id_gen++;
-  GNUNET_CONTAINER_DLL_insert_tail (h->op_head,
-                                    h->op_tail,
-                                    op);
-  op->env = GNUNET_MQ_msg_extra (ctm,
-                                 sizeof (const struct GNUNET_RECLAIM_Ticket),
-                                 GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET);
+  GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op);
+  op->env =
+      GNUNET_MQ_msg_extra (ctm, sizeof (const struct GNUNET_RECLAIM_Ticket),
+                           GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET);
   ctm->identity = *identity;
   ctm->id = htonl (op->r_id);
 
-  GNUNET_memcpy ((char*)&ctm[1],
-                 ticket,
+  GNUNET_memcpy ((char *)&ctm[1], ticket,
                  sizeof (const struct GNUNET_RECLAIM_Ticket));
 
   if (NULL != h->mq)
-    GNUNET_MQ_send_copy (h->mq,
-                         op->env);
+    GNUNET_MQ_send_copy (h->mq, op->env);
   return op;
-
 }
 
 
@@ -1182,14 +1086,12 @@ GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h,
  * @return an iterator handle to use for iteration
  */
 struct GNUNET_RECLAIM_TicketIterator *
-GNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h,
-                                                 const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                                 GNUNET_SCHEDULER_TaskCallback error_cb,
-                                                 void *error_cb_cls,
-                                                 GNUNET_RECLAIM_TicketCallback proc,
-                                                 void *proc_cls,
-                                                 GNUNET_SCHEDULER_TaskCallback finish_cb,
-                                                 void *finish_cb_cls)
+GNUNET_RECLAIM_ticket_iteration_start (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls,
+    GNUNET_RECLAIM_TicketCallback proc, void *proc_cls,
+    GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls)
 {
   struct GNUNET_RECLAIM_TicketIterator *it;
   struct GNUNET_MQ_Envelope *env;
@@ -1206,26 +1108,21 @@ GNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h,
   it->tr_cb = proc;
   it->cls = proc_cls;
   it->r_id = rid;
-  GNUNET_CONTAINER_DLL_insert_tail (h->ticket_it_head,
-                                    h->ticket_it_tail,
-                                    it);
-  env = GNUNET_MQ_msg (msg,
-                       GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_START);
+  GNUNET_CONTAINER_DLL_insert_tail (h->ticket_it_head, h->ticket_it_tail, it);
+  env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_START);
   msg->id = htonl (rid);
   msg->identity = *identity;
   if (NULL == h->mq)
     it->env = env;
   else
-    GNUNET_MQ_send (h->mq,
-                    env);
+    GNUNET_MQ_send (h->mq, env);
   return it;
-
 }
 
 
 /**
- * Calls the record processor specified in #GNUNET_RECLAIM_ticket_iteration_start
- * for the next record.
+ * Calls the ticket processor specified in
+ * #GNUNET_RECLAIM_ticket_iteration_start for the next record.
  *
  * @param it the iterator
  */
@@ -1236,16 +1133,14 @@ GNUNET_RECLAIM_ticket_iteration_next (struct GNUNET_RECLAIM_TicketIterator *it)
   struct TicketIterationNextMessage *msg;
   struct GNUNET_MQ_Envelope *env;
 
-  env = GNUNET_MQ_msg (msg,
-                       GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_NEXT);
+  env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_NEXT);
   msg->id = htonl (it->r_id);
-  GNUNET_MQ_send (h->mq,
-                  env);
+  GNUNET_MQ_send (h->mq, env);
 }
 
 
 /**
- * Stops iteration and releases the idp handle for further calls.  Must
+ * Stops iteration and releases the handle for further calls.  Must
  * be called on any iteration that has not yet completed prior to calling
  * #GNUNET_RECLAIM_disconnect.
  *
@@ -1258,22 +1153,23 @@ GNUNET_RECLAIM_ticket_iteration_stop (struct GNUNET_RECLAIM_TicketIterator *it)
   struct GNUNET_MQ_Envelope *env;
   struct TicketIterationStopMessage *msg;
 
-  if (NULL != h->mq)
-  {
-    env = GNUNET_MQ_msg (msg,
-                         GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_STOP);
+  if (NULL != h->mq) {
+    env =
+        GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_STOP);
     msg->id = htonl (it->r_id);
-    GNUNET_MQ_send (h->mq,
-                    env);
+    GNUNET_MQ_send (h->mq, env);
   }
   GNUNET_free (it);
 }
 
+
 /**
  * Revoked an issued ticket. The relying party will be unable to retrieve
- * updated attributes.
+ * attributes. Other issued tickets remain unaffected.
+ * This includes tickets issued to other relying parties as well as to
+ * other tickets issued to the audience specified in this ticket.
  *
- * @param h the reclaim to use
+ * @param h the identity provider to use
  * @param identity the issuing identity
  * @param ticket the ticket to revoke
  * @param cb the callback
@@ -1281,11 +1177,11 @@ GNUNET_RECLAIM_ticket_iteration_stop (struct GNUNET_RECLAIM_TicketIterator *it)
  * @return handle to abort the operation
  */
 struct GNUNET_RECLAIM_Operation *
-GNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h,
-                                        const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
-                                        const struct GNUNET_RECLAIM_Ticket *ticket,
-                                        GNUNET_RECLAIM_ContinuationWithStatus cb,
-                                        void *cb_cls)
+GNUNET_RECLAIM_ticket_revoke (
+    struct GNUNET_RECLAIM_Handle *h,
+    const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
+    const struct GNUNET_RECLAIM_Ticket *ticket,
+    GNUNET_RECLAIM_ContinuationWithStatus cb, void *cb_cls)
 {
   struct GNUNET_RECLAIM_Operation *op;
   struct RevokeTicketMessage *msg;
@@ -1297,25 +1193,18 @@ GNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h,
   op->rvk_cb = cb;
   op->cls = cb_cls;
   op->r_id = rid;
-  GNUNET_CONTAINER_DLL_insert_tail (h->op_head,
-                                    h->op_tail,
-                                    op);
-  op->env = GNUNET_MQ_msg_extra (msg,
-                             sizeof (struct GNUNET_RECLAIM_Ticket),
-                             GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET);
+  GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op);
+  op->env = GNUNET_MQ_msg_extra (msg, sizeof (struct GNUNET_RECLAIM_Ticket),
+                                 GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET);
   msg->id = htonl (rid);
   msg->identity = *identity;
-  GNUNET_memcpy (&msg[1],
-                 ticket,
-                 sizeof (struct GNUNET_RECLAIM_Ticket));
+  GNUNET_memcpy (&msg[1], ticket, sizeof (struct GNUNET_RECLAIM_Ticket));
   if (NULL != h->mq) {
-    GNUNET_MQ_send (h->mq,
-                    op->env);
+    GNUNET_MQ_send (h->mq, op->env);
     op->env = NULL;
   }
   return op;
 }
 
 
-
 /* end of reclaim_api.c */