global reindent, now with uncrustify hook enabled
[oweals/gnunet.git] / src / credential / gnunet-credential.c
index fb7bdb7f882cc5b29c3ae184237c4794241776bd..0558ca5fcb31d19a8fd9f62f7f0fe71d4d777381 100644 (file)
@@ -2,25 +2,25 @@
      This file is part of GNUnet.
      Copyright (C) 2012-2013 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     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
-     General Public License for more details.
+     Affero General Public License for more details.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-     Boston, MA 02110-1301, USA.
-*/
+     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 gnunet-credential.c
  * @brief command line tool to access command line Credential service
- * @author Adnan Husain
+ * @author Martin Schanzenbach
  */
 #include "platform.h"
 #include <gnunet_util_lib.h>
@@ -108,17 +108,17 @@ static char *issuer_attr;
 /**
  * Verify mode
  */
-static uint32_t verify;
+static int verify;
 
 /**
  * Issue mode
  */
-static uint32_t create_cred;
+static int create_cred;
 
 /**
  * Collect mode
  */
-static uint32_t collect;
+static int collect;
 
 /**
  * Task run on shutdown.  Cleans up everything.
@@ -130,7 +130,7 @@ do_shutdown (void *cls)
 {
   if (NULL != verify_request)
   {
-    GNUNET_CREDENTIAL_verify_cancel (verify_request);
+    GNUNET_CREDENTIAL_request_cancel (verify_request);
     verify_request = NULL;
   }
   if (NULL != credential)
@@ -158,27 +158,20 @@ do_timeout (void *cls)
   GNUNET_SCHEDULER_shutdown ();
 }
 
-/**
- * Function called with the result of a Credential lookup.
- *
- * @param cls the 'const char *' name that was resolved
- * @param cd_count number of records returned
- * @param cd array of @a cd_count records with the results
- */
 static void
 handle_collect_result (void *cls,
-                      unsigned int d_count,
-                      struct GNUNET_CREDENTIAL_Delegation *dc,
-                      unsigned int c_count,
-                      struct GNUNET_CREDENTIAL_Credential *cred)
+                       unsigned int d_count,
+                       struct GNUNET_CREDENTIAL_Delegation *dc,
+                       unsigned int c_count,
+                       struct GNUNET_CREDENTIAL_Credential *cred)
 {
   int i;
-  char* line;
+  char*line;
 
   verify_request = NULL;
   if (NULL != cred)
   {
-    for (i=0;i<c_count;i++)
+    for (i = 0; i < c_count; i++)
     {
       line = GNUNET_CREDENTIAL_credential_to_string (&cred[i]);
       printf ("%s\n",
@@ -192,13 +185,6 @@ handle_collect_result (void *cls,
 }
 
 
-/**
- * Function called with the result of a Credential lookup.
- *
- * @param cls the 'const char *' name that was resolved
- * @param cd_count number of records returned
- * @param cd array of @a cd_count records with the results
- */
 static void
 handle_verify_result (void *cls,
                       unsigned int d_count,
@@ -207,16 +193,16 @@ handle_verify_result (void *cls,
                       struct GNUNET_CREDENTIAL_Credential *cred)
 {
   int i;
-  char* iss_key;
-  char* sub_key;
+  char*iss_key;
+  char*sub_key;
 
   verify_request = NULL;
   if (NULL == cred)
     printf ("Failed.\n");
   else
   {
-    printf("Delegation Chain:\n");
-    for (i=0;i<d_count;i++)
+    printf ("Delegation Chain:\n");
+    for (i = 0; i < d_count; i++)
     {
       iss_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&dc[i].issuer_key);
       sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&dc[i].subject_key);
@@ -225,7 +211,9 @@ handle_verify_result (void *cls,
         printf ("(%d) %s.%s <- %s.%s\n", i,
                 iss_key, dc[i].issuer_attribute,
                 sub_key, dc[i].subject_attribute);
-      } else {
+      }
+      else
+      {
         printf ("(%d) %s.%s <- %s\n", i,
                 iss_key, dc[i].issuer_attribute,
                 sub_key);
@@ -233,8 +221,8 @@ handle_verify_result (void *cls,
       GNUNET_free (iss_key);
       GNUNET_free (sub_key);
     }
-    printf("\nCredentials:\n");
-    for (i=0;i<c_count;i++)
+    printf ("\nCredentials:\n");
+    for (i = 0; i < c_count; i++)
     {
       iss_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&cred[i].issuer_key);
       sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&cred[i].subject_key);
@@ -243,7 +231,6 @@ handle_verify_result (void *cls,
               sub_key);
       GNUNET_free (iss_key);
       GNUNET_free (sub_key);
-
     }
     printf ("Successful.\n");
   }
@@ -275,7 +262,7 @@ identity_cb (void *cls,
     if (NULL != ego_name)
     {
       fprintf (stderr,
-               _("Ego `%s' not known to identity service\n"),
+               _ ("Ego `%s' not known to identity service\n"),
                ego_name);
     }
     GNUNET_SCHEDULER_shutdown ();
@@ -284,29 +271,28 @@ identity_cb (void *cls,
 
   if (GNUNET_YES == collect)
   {
-    
     if (GNUNET_OK !=
         GNUNET_CRYPTO_ecdsa_public_key_from_string (issuer_key,
                                                     strlen (issuer_key),
                                                     &issuer_pkey))
     {
       fprintf (stderr,
-               _("Issuer public key `%s' is not well-formed\n"),
+               _ ("Issuer public key `%s' is not well-formed\n"),
                issuer_key);
       GNUNET_SCHEDULER_shutdown ();
     }
     privkey = GNUNET_IDENTITY_ego_get_private_key (ego);
 
-    collect_request = GNUNET_CREDENTIAL_collect(credential,
-                                                &issuer_pkey,
-                                                issuer_attr, //TODO argument
-                                                privkey,
-                                                &handle_collect_result,
-                                                NULL);
+    collect_request = GNUNET_CREDENTIAL_collect (credential,
+                                                 &issuer_pkey,
+                                                 issuer_attr,  // TODO argument
+                                                 privkey,
+                                                 &handle_collect_result,
+                                                 NULL);
     return;
   }
 
-  //Else issue
+  // Else issue
 
   if (NULL == expiration)
   {
@@ -314,12 +300,14 @@ identity_cb (void *cls,
              "Please specify a TTL\n");
     GNUNET_SCHEDULER_shutdown ();
     return;
-  } else if (GNUNET_OK == GNUNET_STRINGS_fancy_time_to_relative (expiration,
-                                                                 &etime_rel))
+  }
+  else if (GNUNET_OK == GNUNET_STRINGS_fancy_time_to_relative (expiration,
+                                                               &etime_rel))
   {
     etime_abs = GNUNET_TIME_relative_to_absolute (etime_rel);
-  } else if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_absolute (expiration,
-                                                                 &etime_abs))
+  }
+  else if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_absolute (expiration,
+                                                               &etime_abs))
   {
     fprintf (stderr,
              "%s is not a valid ttl!\n",
@@ -360,7 +348,6 @@ run (void *cls,
      const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-
   cfg = c;
 
 
@@ -368,14 +355,14 @@ run (void *cls,
                                      &do_timeout, NULL);
   GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
 
-  if (GNUNET_YES == collect) {
+  if (GNUNET_YES == collect)
+  {
     if (NULL == issuer_key)
     {
       fprintf (stderr,
-               _("Issuer public key not well-formed\n"));
+               _ ("Issuer public key not well-formed\n"));
       GNUNET_SCHEDULER_shutdown ();
       return;
-
     }
 
     credential = GNUNET_CREDENTIAL_connect (cfg);
@@ -383,39 +370,38 @@ run (void *cls,
     if (NULL == credential)
     {
       fprintf (stderr,
-               _("Failed to connect to CREDENTIAL\n"));
+               _ ("Failed to connect to CREDENTIAL\n"));
       GNUNET_SCHEDULER_shutdown ();
+      return;
     }
     if (NULL == issuer_attr)
     {
       fprintf (stderr,
-               _("You must provide issuer the attribute\n"));
+               _ ("You must provide issuer the attribute\n"));
       GNUNET_SCHEDULER_shutdown ();
+      return;
     }
 
     if (NULL == ego_name)
     {
       fprintf (stderr,
-               _("ego required\n"));
+               _ ("ego required\n"));
       GNUNET_SCHEDULER_shutdown ();
       return;
-
     }
     el = GNUNET_IDENTITY_ego_lookup (cfg,
                                      ego_name,
                                      &identity_cb,
                                      (void *) cfg);
     return;
-
-  } 
+  }
 
   if (NULL == subject_key)
   {
     fprintf (stderr,
-             _("Subject public key needed\n"));
+             _ ("Subject public key needed\n"));
     GNUNET_SCHEDULER_shutdown ();
     return;
-
   }
   if (GNUNET_OK !=
       GNUNET_CRYPTO_ecdsa_public_key_from_string (subject_key,
@@ -423,19 +409,19 @@ run (void *cls,
                                                   &subject_pkey))
   {
     fprintf (stderr,
-             _("Subject public key `%s' is not well-formed\n"),
+             _ ("Subject public key `%s' is not well-formed\n"),
              subject_key);
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  if (GNUNET_YES == verify) {
+  if (GNUNET_YES == verify)
+  {
     if (NULL == issuer_key)
     {
       fprintf (stderr,
-               _("Issuer public key not well-formed\n"));
+               _ ("Issuer public key not well-formed\n"));
       GNUNET_SCHEDULER_shutdown ();
       return;
-
     }
     if (GNUNET_OK !=
         GNUNET_CRYPTO_ecdsa_public_key_from_string (issuer_key,
@@ -443,26 +429,29 @@ run (void *cls,
                                                     &issuer_pkey))
     {
       fprintf (stderr,
-               _("Issuer public key `%s' is not well-formed\n"),
+               _ ("Issuer public key `%s' is not well-formed\n"),
                issuer_key);
       GNUNET_SCHEDULER_shutdown ();
+      return;
     }
     credential = GNUNET_CREDENTIAL_connect (cfg);
 
     if (NULL == credential)
     {
       fprintf (stderr,
-               _("Failed to connect to CREDENTIAL\n"));
+               _ ("Failed to connect to CREDENTIAL\n"));
       GNUNET_SCHEDULER_shutdown ();
+      return;
     }
-    if (NULL == issuer_attr || NULL == subject_credential)
+    if ((NULL == issuer_attr) ||(NULL == subject_credential) )
     {
       fprintf (stderr,
-               _("You must provide issuer and subject attributes\n"));
+               _ ("You must provide issuer and subject attributes\n"));
       GNUNET_SCHEDULER_shutdown ();
+      return;
     }
 
-    //Subject credentials are comma separated
+    // Subject credentials are comma separated
     char *tmp = GNUNET_strdup (subject_credential);
     char *tok = strtok (tmp, ",");
     if (NULL == tok)
@@ -471,56 +460,62 @@ run (void *cls,
                "Invalid subject credentials\n");
       GNUNET_free (tmp);
       GNUNET_SCHEDULER_shutdown ();
+      return;
     }
     int count = 1;
     int i;
-    while (NULL != (tok = strtok(NULL, ",")))
+    while (NULL != (tok = strtok (NULL, ",")))
       count++;
     struct GNUNET_CREDENTIAL_Credential credentials[count];
     struct GNUNET_CREDENTIAL_Credential *cred;
     GNUNET_free (tmp);
     tmp = GNUNET_strdup (subject_credential);
     tok = strtok (tmp, ",");
-    for (i=0;i<count;i++)
+    for (i = 0; i < count; i++)
     {
       cred = GNUNET_CREDENTIAL_credential_from_string (tok);
       GNUNET_memcpy (&credentials[i],
                      cred,
-                     sizeof (struct GNUNET_CREDENTIAL_Credential));
+                     sizeof(struct GNUNET_CREDENTIAL_Credential));
       credentials[i].issuer_attribute = GNUNET_strdup (cred->issuer_attribute);
-      tok = strtok(NULL, ",");
+      tok = strtok (NULL, ",");
       GNUNET_free (cred);
     }
 
-    verify_request = GNUNET_CREDENTIAL_verify(credential,
-                                              &issuer_pkey,
-                                              issuer_attr, //TODO argument
-                                              &subject_pkey,
-                                              count,
-                                              credentials,
-                                              &handle_verify_result,
-                                              NULL);
-    for (i=0;i<count;i++)
+    verify_request = GNUNET_CREDENTIAL_verify (credential,
+                                               &issuer_pkey,
+                                               issuer_attr,  // TODO argument
+                                               &subject_pkey,
+                                               count,
+                                               credentials,
+                                               &handle_verify_result,
+                                               NULL);
+    for (i = 0; i < count; i++)
     {
-      GNUNET_free ((char*)credentials[i].issuer_attribute);
+      GNUNET_free ((char*) credentials[i].issuer_attribute);
     }
-  } else if (GNUNET_YES == create_cred) {
+    GNUNET_free (tmp);
+  }
+  else if (GNUNET_YES == create_cred)
+  {
     if (NULL == ego_name)
     {
       fprintf (stderr,
-               _("Issuer ego required\n"));
+               _ ("Issuer ego required\n"));
       GNUNET_SCHEDULER_shutdown ();
       return;
-
     }
     el = GNUNET_IDENTITY_ego_lookup (cfg,
                                      ego_name,
                                      &identity_cb,
                                      (void *) cfg);
     return;
-  } else {
+  }
+  else
+  {
     fprintf (stderr,
-             _("Please specify name to lookup, subject key and issuer key!\n"));
+             _ (
+               "Please specify name to lookup, subject key and issuer key!\n"));
     GNUNET_SCHEDULER_shutdown ();
   }
   return;
@@ -537,34 +532,55 @@ run (void *cls,
 int
 main (int argc, char *const *argv)
 {
-  static const struct GNUNET_GETOPT_CommandLineOption options[] = {
-    {'I', "issue", NULL,
-      gettext_noop ("create credential"), 0,
-      &GNUNET_GETOPT_set_one, &create_cred},
-    {'V', "verify", NULL,
-      gettext_noop ("verify credential against attribute"), 0,
-      &GNUNET_GETOPT_set_one, &verify},
-    {'s', "subject", "PKEY",
-      gettext_noop ("The public key of the subject to lookup the credential for"), 1,
-      &GNUNET_GETOPT_set_string, &subject_key},
-    {'b', "credential", "CRED",
-      gettext_noop ("The name of the credential presented by the subject"), 1,
-      &GNUNET_GETOPT_set_string, &subject_credential},
-    {'i', "issuer", "PKEY",
-      gettext_noop ("The public key of the authority to verify the credential against"), 1,
-      &GNUNET_GETOPT_set_string, &issuer_key},
-    {'e', "ego", "EGO",
-      gettext_noop ("The ego to use"), 1,
-      &GNUNET_GETOPT_set_string, &ego_name},
-    {'a', "attribute", "ATTR",
-      gettext_noop ("The issuer attribute to verify against or to issue"), 1, 
-      &GNUNET_GETOPT_set_string, &issuer_attr},
-    {'T', "ttl", "EXP",
-      gettext_noop ("The time to live for the credential"), 1,
-      &GNUNET_GETOPT_set_string, &expiration},
-    {'g', "collect", NULL,
-      gettext_noop ("collect credentials"), 0,
-      &GNUNET_GETOPT_set_one, &collect},
+  struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_option_flag ('I',
+                               "issue",
+                               gettext_noop ("create credential"),
+                               &create_cred),
+    GNUNET_GETOPT_option_flag ('V',
+                               "verify",
+                               gettext_noop (
+                                 "verify credential against attribute"),
+                               &verify),
+    GNUNET_GETOPT_option_string ('s',
+                                 "subject",
+                                 "PKEY",
+                                 gettext_noop (
+                                   "The public key of the subject to lookup the credential for"),
+                                 &subject_key),
+    GNUNET_GETOPT_option_string ('b',
+                                 "credential",
+                                 "CRED",
+                                 gettext_noop (
+                                   "The name of the credential presented by the subject"),
+                                 &subject_credential),
+    GNUNET_GETOPT_option_string ('i',
+                                 "issuer",
+                                 "PKEY",
+                                 gettext_noop (
+                                   "The public key of the authority to verify the credential against"),
+                                 &issuer_key),
+    GNUNET_GETOPT_option_string ('e',
+                                 "ego",
+                                 "EGO",
+                                 gettext_noop ("The ego to use"),
+                                 &ego_name),
+    GNUNET_GETOPT_option_string ('a',
+                                 "attribute",
+                                 "ATTR",
+                                 gettext_noop (
+                                   "The issuer attribute to verify against or to issue"),
+                                 &issuer_attr),
+    GNUNET_GETOPT_option_string ('T',
+                                 "ttl",
+                                 "EXP",
+                                 gettext_noop (
+                                   "The time to live for the credential"),
+                                 &expiration),
+    GNUNET_GETOPT_option_flag ('g',
+                               "collect",
+                               gettext_noop ("collect credentials"),
+                               &collect),
     GNUNET_GETOPT_OPTION_END
   };
   int ret;
@@ -577,7 +593,7 @@ main (int argc, char *const *argv)
   ret =
     (GNUNET_OK ==
      GNUNET_PROGRAM_run (argc, argv, "gnunet-credential",
-                         _("GNUnet credential resolver tool"),
+                         _ ("GNUnet credential resolver tool"),
                          options,
                          &run, NULL)) ? 0 : 1;
   GNUNET_free ((void*) argv);