gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r28079 - in gnunet: doc/man src/identity src/include


From: gnunet
Subject: [GNUnet-SVN] r28079 - in gnunet: doc/man src/identity src/include
Date: Tue, 16 Jul 2013 10:40:53 +0200

Author: grothoff
Date: 2013-07-16 10:40:53 +0200 (Tue, 16 Jul 2013)
New Revision: 28079

Added:
   gnunet/doc/man/gnunet-identity.1
Modified:
   gnunet/doc/man/Makefile.am
   gnunet/src/identity/gnunet-identity.c
   gnunet/src/identity/gnunet-service-identity.c
   gnunet/src/include/gnunet_disk_lib.h
Log:
initial version of gnunet-identity command-line tool

Modified: gnunet/doc/man/Makefile.am
===================================================================
--- gnunet/doc/man/Makefile.am  2013-07-16 08:19:39 UTC (rev 28078)
+++ gnunet/doc/man/Makefile.am  2013-07-16 08:40:53 UTC (rev 28079)
@@ -15,6 +15,7 @@
   gnunet-gns.1 \
   gnunet-gns-fcfsd.1 \
   gnunet-gns-proxy.1 \
+  gnunet-identity.1 \
   gnunet-namestore.1 \
   gnunet-nat-server.1 \
   gnunet-peerinfo.1 \

Copied: gnunet/doc/man/gnunet-identity.1 (from rev 28073, 
gnunet/doc/man/gnunet-pseudonym.1)
===================================================================
--- gnunet/doc/man/gnunet-identity.1                            (rev 0)
+++ gnunet/doc/man/gnunet-identity.1    2013-07-16 08:40:53 UTC (rev 28079)
@@ -0,0 +1,44 @@
+.TH GNUNET-IDENTITY "1" "16 Jul 2013" "GNUnet"
+.SH NAME
+gnunet\-identity \- create, delete or list egos
+.SH SYNOPSIS
+.B gnunet\-identity
+[options]
+.SH DESCRIPTION
+.PP
+gnunet\-identity is a tool for managing egos.  An ego is the persona that 
controls a namespace.  It is identical to a public\-private ECC key pair.
+
+gnunet\-identity can be used to list all of the egos that were created 
locally, to create new egos, and to delete existing egos (the namespace will 
continue to exist, but it will be impossible to add additional data to it).
+
+Creating a new ego requires using the \-C option together with an identifier 
(name) that is to be used for the new ego.  This identifier is only used 
locally for this peer and not shared with other peers.
+
+.TP
+\fB\-C NAME\fR, \fB\-\-create=NAME\fR
+Creates a new ego with the given NAME.
+
+.TP
+\fB\-D NAME\fR, \fB\-\-delete=NAME\fR
+Delete the ego with the given NAME.
+
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Print help page.
+
+.TP
+\fB\-L\fR, \fB\-\-list\fR
+list all ouf our egos
+
+.TP
+\fB\-m\fR, \fB\-\-monitor\fR
+run in monitor mode, listing all ouf our egos until CTRL-C is pressed
+
+
+.SH FILES
+.TP
+~/.gnunet/egos/
+Directory where the egos are stored (by default)
+
+.SH "REPORTING BUGS"
+Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending 
electronic mail to <address@hidden>
+.SH "SEE ALSO"
+\fBgnunet\-pseudonym\fP(1), \fBgnunet\-gns\fP(1)

Modified: gnunet/src/identity/gnunet-identity.c
===================================================================
--- gnunet/src/identity/gnunet-identity.c       2013-07-16 08:19:39 UTC (rev 
28078)
+++ gnunet/src/identity/gnunet-identity.c       2013-07-16 08:40:53 UTC (rev 
28079)
@@ -19,7 +19,7 @@
 */
 /**
  * @file identity/gnunet-identity.c
- * @brief IDENTITY monitoring command line tool
+ * @brief IDENTITY management command line tool
  * @author Christian Grothoff
  */
 #include "platform.h"
@@ -32,12 +32,37 @@
 static struct GNUNET_IDENTITY_Handle *sh;
 
 /**
- * Was verbose specified?
+ * Was "list" specified?
  */
-static int verbose;
+static int list;
 
+/**
+ * Was "monitor" specified?
+ */
+static int monitor;
 
 /**
+ * -C option
+ */
+static char *create_ego;
+
+/**
+ * -D option
+ */
+static char *delete_ego;
+
+/**
+ * Handle for create operation.
+ */
+static struct GNUNET_IDENTITY_Operation *create_op;
+
+/**
+ * Handle for delete operation.
+ */
+static struct GNUNET_IDENTITY_Operation *delete_op;
+
+
+/**
  * Task run on shutdown.
  *
  * @param cls NULL
@@ -52,7 +77,120 @@
 }
 
 
+
 /**
+ * Test if we are finished yet.
+ */
+static void
+test_finished ()
+{
+  if ( (NULL == create_op) &&
+       (NULL == delete_op) &&
+       (! list) &&
+       (! monitor) )  
+    GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Deletion operation finished.
+ *
+ * @param cls pointer to operation handle
+ * @param emsg NULL on success, otherwise an error message
+ */
+static void
+delete_finished (void *cls,
+                const char *emsg)
+{
+  struct GNUNET_IDENTITY_Operation **op = cls;
+
+  *op = NULL;
+  if (NULL != emsg)
+    fprintf (stderr,
+            "%s\n",
+            gettext (emsg));
+  test_finished ();
+}
+
+
+/**
+ * Creation operation finished.
+ *
+ * @param cls pointer to operation handle
+ * @param ego ego handle
+ * @param ego_ctx context for application to store data for this ego
+ *                 (during the lifetime of this process, initially NULL)
+ * @param identifier identifier assigned by the user for this ego
+ */
+static void
+create_finished (void *cls,
+                struct GNUNET_IDENTITY_Ego *ego,
+                void **ctx,
+                const char *identifier)
+{
+  struct GNUNET_IDENTITY_Operation **op = cls;
+
+  *op = NULL;
+  if (NULL == ego)
+    fprintf (stderr,
+            "%s\n",
+            _("Failed to create ego\n"));
+  test_finished ();
+}
+
+
+/**
+ * If listing is enabled, prints information about the egos.
+ *
+ * This function is initially called for all egos and then again
+ * whenever a ego's identifier changes or if it is deleted.  At the
+ * end of the initial pass over all egos, the function is once called
+ * with 'NULL' for 'ego'. That does NOT mean that the callback won't
+ * be invoked in the future or that there was an error.
+ *
+ * When used with 'GNUNET_IDENTITY_create' or 'GNUNET_IDENTITY_get',
+ * this function is only called ONCE, and 'NULL' being passed in
+ * 'ego' does indicate an error (i.e. name is taken or no default
+ * value is known).  If 'ego' is non-NULL and if '*ctx'
+ * is set in those callbacks, the value WILL be passed to a subsequent
+ * call to the identity callback of 'GNUNET_IDENTITY_connect' (if 
+ * that one was not NULL).
+ *
+ * When an identity is renamed, this function is called with the
+ * (known) ego but the NEW identifier.  
+ *
+ * When an identity is deleted, this function is called with the
+ * (known) ego and "NULL" for the 'identifier'.  In this case,
+ * the 'ego' is henceforth invalid (and the 'ctx' should also be
+ * cleaned up).
+ *
+ * @param cls closure
+ * @param ego ego handle
+ * @param ego_ctx context for application to store data for this ego
+ *                 (during the lifetime of this process, initially NULL)
+ * @param identifier identifier assigned by the user for this ego,
+ *                   NULL if the user just deleted the ego and it
+ *                   must thus no longer be used
+*/
+static void
+print_ego (void *cls,
+          struct GNUNET_IDENTITY_Ego *ego,
+          void **ctx,
+          const char *identifier)
+{  
+
+  if (! (list | monitor))
+    return;
+  if ( (NULL == ego) && (! monitor) )
+  {
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  fprintf (stderr, "%s\n", identifier);
+}
+
+
+/**
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
@@ -64,9 +202,20 @@
 run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-  sh = GNUNET_IDENTITY_connect (cfg, NULL, NULL);
+  sh = GNUNET_IDENTITY_connect (cfg, &print_ego, NULL);
+  if (NULL != delete_ego)
+    delete_op = GNUNET_IDENTITY_delete (sh,
+                                       delete_ego,
+                                       &delete_finished,
+                                       &delete_op);
+  if (NULL != create_ego)
+    create_op = GNUNET_IDENTITY_create (sh,
+                                       create_ego,
+                                       &create_finished,
+                                       &create_op);
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
                                &shutdown_task, NULL);
+  test_finished ();
 }
 
 
@@ -83,9 +232,18 @@
   int res;
 
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
-    {'V', "verbose", NULL,
-     gettext_noop ("verbose output"),
-     0, &GNUNET_GETOPT_set_one, &verbose},
+    {'C', "create", "NAME",
+     gettext_noop ("create ego NAME"),
+     1, &GNUNET_GETOPT_set_string, &create_ego},
+    {'D', "delete", "NAME",
+     gettext_noop ("delete ego NAME "),
+     1, &GNUNET_GETOPT_set_string, &delete_ego},
+    {'L', "list", NULL,
+     gettext_noop ("list all egos"),
+     0, &GNUNET_GETOPT_set_one, &list},
+    {'m', "monitor", NULL,
+     gettext_noop ("run in monitor mode egos"),
+     0, &GNUNET_GETOPT_set_one, &monitor},
     GNUNET_GETOPT_OPTION_END
   };
 
@@ -93,7 +251,7 @@
     return 2;
 
   res = GNUNET_PROGRAM_run (argc, argv, "gnunet-identity",
-                           gettext_noop ("Print information about IDENTITY 
state"), 
+                           gettext_noop ("Maintain egos"), 
                            options, &run,
                            NULL);
   GNUNET_free ((void *) argv);

Modified: gnunet/src/identity/gnunet-service-identity.c
===================================================================
--- gnunet/src/identity/gnunet-service-identity.c       2013-07-16 08:19:39 UTC 
(rev 28078)
+++ gnunet/src/identity/gnunet-service-identity.c       2013-07-16 08:40:53 UTC 
(rev 28079)
@@ -25,6 +25,10 @@
  *
  * The purpose of this service is to manage private keys that
  * represent the various egos/pseudonyms/identities of a GNUnet user.
+ *
+ * FIXME:
+ * - hint for 'end of initial list' is not implemented
+ *   (might ALSO be missing in client library!)
  */
 #include "platform.h"
 #include "gnunet_util_lib.h"

Modified: gnunet/src/include/gnunet_disk_lib.h
===================================================================
--- gnunet/src/include/gnunet_disk_lib.h        2013-07-16 08:19:39 UTC (rev 
28078)
+++ gnunet/src/include/gnunet_disk_lib.h        2013-07-16 08:40:53 UTC (rev 
28079)
@@ -585,8 +585,10 @@
  */
 ssize_t
 GNUNET_DISK_file_write_blocking (const struct GNUNET_DISK_FileHandle * h,
-    const void *buffer, size_t n);
+                                const void *buffer, 
+                                size_t n);
 
+
 /**
  * Write a buffer to a file.  If the file is longer than
  * the given buffer size, it will be truncated.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]