[git] Assuan - branch, master, updated. libassuan-2.0.1-32-gb00ae50

by Werner Koch cvs at cvs.gnupg.org
Wed Mar 9 20:53:30 CET 2011


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

The branch, master has been updated
       via  b00ae5099d3e6eda3cb7d1d1cfb0cbfd87e918f1 (commit)
       via  5666ade7de25239a36afe0f279b46a0deff1a867 (commit)
       via  79bb873edd4696fc56a0aaf91c9d11c3791691c0 (commit)
      from  8660e89916d7e0d0df59939affd07c6ed78a7313 (commit)

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

- Log -----------------------------------------------------------------
commit b00ae5099d3e6eda3cb7d1d1cfb0cbfd87e918f1
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Mar 9 20:28:18 2011 +0100

    Replace strcasecmp by ascii_strcasecmp variant/

diff --git a/src/ChangeLog b/src/ChangeLog
index 0ba2a2c..a27401d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2011-03-09  Werner Koch  <wk at g10code.com>
+
+	* assuan-handler.c (assuan_register_command): Use my_strcasecmp.
+
 2011-03-06  Ben Kibbey <bjk at luxsci.net>
 
 	* assuan-socket-connect.c (assuan_socket_connect_fd): Finalize a
diff --git a/src/assuan-handler.c b/src/assuan-handler.c
index 799d058..692bdd0 100644
--- a/src/assuan-handler.c
+++ b/src/assuan-handler.c
@@ -1,4 +1,4 @@
-/* assuan-handler.c - dispatch commands 
+/* assuan-handler.c - dispatch commands
    Copyright (C) 2001, 2002, 2003, 2007, 2009 Free Software Foundation, Inc.
 
    This file is part of Assuan.
@@ -53,7 +53,7 @@ std_handler_nop (assuan_context_t ctx, char *line)
 {
   return PROCESS_DONE (ctx, 0); /* okay */
 }
-  
+
 static gpg_error_t
 std_handler_cancel (assuan_context_t ctx, char *line)
 {
@@ -115,7 +115,7 @@ std_handler_option (assuan_context_t ctx, char *line)
     return PROCESS_DONE (ctx, ctx->option_handler_fnc (ctx, key, value));
   return PROCESS_DONE (ctx, 0);
 }
-  
+
 static gpg_error_t
 std_handler_bye (assuan_context_t ctx, char *line)
 {
@@ -128,13 +128,13 @@ std_handler_bye (assuan_context_t ctx, char *line)
   ctx->process_complete = 1;
   return PROCESS_DONE (ctx, 0);
 }
-  
+
 static gpg_error_t
 std_handler_auth (assuan_context_t ctx, char *line)
 {
   return PROCESS_DONE (ctx, set_error (ctx, GPG_ERR_NOT_IMPLEMENTED, NULL));
 }
-  
+
 static gpg_error_t
 std_handler_reset (assuan_context_t ctx, char *line)
 {
@@ -150,7 +150,7 @@ std_handler_reset (assuan_context_t ctx, char *line)
     }
   return PROCESS_DONE (ctx, err);
 }
-  
+
 static gpg_error_t
 std_handler_help (assuan_context_t ctx, char *line)
 {
@@ -168,7 +168,7 @@ std_handler_help (assuan_context_t ctx, char *line)
       for (i = 0; i < ctx->cmdtbl_used; i++)
         {
           n = strlen (ctx->cmdtbl[i].name);
-          helpstr = ctx->cmdtbl[i].helpstr; 
+          helpstr = ctx->cmdtbl[i].helpstr;
           if (helpstr
               && !strncmp (ctx->cmdtbl[i].name, helpstr, n)
               && (!helpstr[n] || helpstr[n] == '\n' || helpstr[n] == ' ')
@@ -191,7 +191,7 @@ std_handler_help (assuan_context_t ctx, char *line)
       line[n] = c;
       if (!ctx->cmdtbl[i].name)
         return PROCESS_DONE (ctx, set_error (ctx,GPG_ERR_UNKNOWN_COMMAND,NULL));
-      helpstr = ctx->cmdtbl[i].helpstr; 
+      helpstr = ctx->cmdtbl[i].helpstr;
       if (!helpstr)
         return PROCESS_DONE (ctx, set_error (ctx, GPG_ERR_NOT_FOUND, NULL));
       do
@@ -295,7 +295,7 @@ std_handler_output (assuan_context_t ctx, char *line)
 {
   gpg_error_t rc;
   assuan_fd_t fd, oldfd;
-  
+
   rc = assuan_command_parse_fd (ctx, line, &fd);
   if (rc)
     return PROCESS_DONE (ctx, rc);
@@ -340,7 +340,7 @@ static struct {
   { "RESET",  std_handler_reset, 1 },
   { "END",    std_handler_end, 1 },
   { "HELP",   std_handler_help, 1 },
-              
+
   { "INPUT",  std_handler_input, 0 },
   { "OUTPUT", std_handler_output, 0 },
   { NULL, NULL, 0 }
@@ -354,11 +354,11 @@ static struct {
  * @handler: The handler function to be called or NULL to use a default
  *           handler.
  * HELPSTRING
- * 
+ *
  * Register a handler to be used for a given command.  Note that
  * several default handlers are already regsitered with a new context.
  * This function however allows to override them.
- * 
+ *
  * Return value: 0 on success or an error code
  **/
 gpg_error_t
@@ -389,7 +389,7 @@ assuan_register_command (assuan_context_t ctx, const char *cmd_name,
       if (!handler)
         handler = dummy_handler; /* Last resort is the dummy handler. */
     }
-  
+
   if (!ctx->cmdtbl)
     {
       ctx->cmdtbl_size = 50;
@@ -411,7 +411,7 @@ assuan_register_command (assuan_context_t ctx, const char *cmd_name,
 
   for (i=0; i<ctx->cmdtbl_used; i++)
     {
-      if (!strcasecmp(ctx->cmdtbl[i].name, cmd_name))
+      if (!my_strcasecmp (cmd_name, ctx->cmdtbl[i].name))
         {
 	  cmd_index = i;
 	  break;
@@ -530,7 +530,7 @@ _assuan_register_std_commands (assuan_context_t ctx)
           if (rc)
             return rc;
         }
-    } 
+    }
   return 0;
 }
 
@@ -585,8 +585,8 @@ dispatch_command (assuan_context_t ctx, char *line, int linelen)
     ;
   if (p==line)
     return PROCESS_DONE
-      (ctx, set_error (ctx, GPG_ERR_ASS_SYNTAX, "leading white-space")); 
-  if (*p) 
+      (ctx, set_error (ctx, GPG_ERR_ASS_SYNTAX, "leading white-space"));
+  if (*p)
     { /* Skip over leading WS after the keyword */
       *p++ = 0;
       while ( *p == ' ' || *p == '\t')
@@ -652,26 +652,26 @@ assuan_process_done (assuan_context_t ctx, gpg_error_t rc)
       if (!rc && ctx->outbound.data.error)
 	rc = ctx->outbound.data.error;
     }
-  
+
   /* Error handling.  */
   if (!rc)
     {
       if (ctx->process_complete)
 	{
 	  /* No error checking because the peer may have already
-	     disconnect. */ 
+	     disconnect. */
 	  assuan_write_line (ctx, "OK closing connection");
 	  ctx->finish_handler (ctx);
 	}
       else
 	rc = assuan_write_line (ctx, ctx->okay_line ? ctx->okay_line : "OK");
     }
-  else 
+  else
     {
       char errline[300];
       const char *text = ctx->err_no == rc ? ctx->err_str : NULL;
       char ebuf[50];
-	  
+
       gpg_strerror_r (rc, ebuf, sizeof (ebuf));
       sprintf (errline, "ERR %d %.50s <%.30s>%s%.100s",
 	       rc, ebuf, gpg_strsource (rc),
@@ -679,10 +679,10 @@ assuan_process_done (assuan_context_t ctx, gpg_error_t rc)
 
       rc = assuan_write_line (ctx, errline);
     }
-  
+
   if (ctx->post_cmd_notify_fnc)
     ctx->post_cmd_notify_fnc (ctx, rc);
-  
+
   ctx->flags.confidential = 0;
   if (ctx->okay_line)
     {
@@ -816,11 +816,11 @@ process_request (assuan_context_t ctx)
 /**
  * assuan_process:
  * @ctx: assuan context
- * 
+ *
  * This function is used to handle the assuan protocol after a
  * connection has been established using assuan_accept().  This is the
  * main protocol handler.
- * 
+ *
  * Return value: 0 on success or an error code if the assuan operation
  * failed.  Note, that no error is returned for operational errors.
  **/
@@ -844,18 +844,18 @@ assuan_process (assuan_context_t ctx)
  * @what: 0 for read fds, 1 for write fds
  * @fdarray: Caller supplied array to store the FDs
  * @fdarraysize: size of that array
- * 
+ *
  * Return all active filedescriptors for the given context.  This
  * function can be used to select on the fds and call
  * assuan_process_next() if there is an active one.  The first fd in
  * the array is the one used for the command connection.
  *
  * Note, that write FDs are not yet supported.
- * 
+ *
  * Return value: number of FDs active and put into @fdarray or -1 on
  * error which is most likely a too small fdarray.
  **/
-int 
+int
 assuan_get_active_fds (assuan_context_t ctx, int what,
                        assuan_fd_t *fdarray, int fdarraysize)
 {
@@ -917,14 +917,14 @@ assuan_get_data_fp (assuan_context_t ctx)
 #if defined (HAVE_FOPENCOOKIE) || defined (HAVE_FUNOPEN)
   if (ctx->outbound.data.fp)
     return ctx->outbound.data.fp;
-  
+
 #ifdef HAVE_FUNOPEN
   ctx->outbound.data.fp = funopen (ctx, 0, fun1_cookie_write,
 				   0, _assuan_cookie_write_flush);
 #else
   ctx->outbound.data.fp = funopen (ctx, 0, fun2_cookie_write,
 				   0, _assuan_cookie_write_flush);
-#endif                                   
+#endif
 
   ctx->outbound.data.error = 0;
   return ctx->outbound.data.fp;

commit 5666ade7de25239a36afe0f279b46a0deff1a867
Author: bjk at luxsci.net <bjk at luxsci.net>
Date:   Sun Mar 6 16:18:45 2011 -0500

    Added assuan_socket_connect_fd() to attach an existing socket file descriptor to a context.

diff --git a/src/ChangeLog b/src/ChangeLog
index 5568549..0ba2a2c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-06  Ben Kibbey <bjk at luxsci.net>
+
+	* assuan-socket-connect.c (assuan_socket_connect_fd): Finalize a
+	context connection from an already connected socket descriptor.
+	* assuan.h.in (assuan_socket_connect_fd): New prototype.
+
 2011-03-05  Ben Kibbey <bjk at luxsci.net>
 
 	* assuan-handler.c (assuan_register_command): Let an existing command
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c
index fa3db4b..cb8f9d0 100644
--- a/src/assuan-socket-connect.c
+++ b/src/assuan-socket-connect.c
@@ -97,6 +97,69 @@ parse_portno (const char *str, uint16_t *r_port)
 }
 
 
+static gpg_error_t
+_assuan_connect_finalize(assuan_context_t ctx, int fd, unsigned int flags)
+{
+  gpg_error_t err;
+
+  ctx->engine.release = _assuan_client_release;
+  ctx->engine.readfnc = _assuan_simple_read;
+  ctx->engine.writefnc = _assuan_simple_write;
+  ctx->engine.sendfd = NULL;
+  ctx->engine.receivefd = NULL;
+  ctx->finish_handler = _assuan_client_finish;
+  ctx->inbound.fd = fd;
+  ctx->outbound.fd = fd;
+  ctx->max_accepts = -1;
+
+  if (flags & ASSUAN_SOCKET_CONNECT_FDPASSING)
+    _assuan_init_uds_io (ctx);
+
+  /* initial handshake */
+  {
+    assuan_response_t response;
+    int off;
+
+    err = _assuan_read_from_server (ctx, &response, &off, 0);
+    if (err)
+      TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
+	      "can't connect to server: %s\n", gpg_strerror (err));
+    else if (response != ASSUAN_RESPONSE_OK)
+      {
+	char *sname = _assuan_encode_c_string (ctx, ctx->inbound.line);
+	if (sname)
+	  {
+	    TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
+		    "can't connect to server: %s", sname);
+	    _assuan_free (ctx, sname);
+	  }
+	err = _assuan_error (ctx, GPG_ERR_ASS_CONNECT_FAILED);
+      }
+  }
+
+  return err;
+}
+
+
+/* Attach an existing connected file descriptor FD to an allocated handle CTX
+ * and initialize the connection.
+ */
+gpg_error_t
+assuan_socket_connect_fd (assuan_context_t ctx, int fd, unsigned int flags)
+{
+  gpg_error_t err;
+
+  if (!ctx || fd < 0)
+    return GPG_ERR_INV_ARG;
+
+  err = _assuan_connect_finalize(ctx, fd, flags);
+
+  if (err)
+    _assuan_reset (ctx);
+
+  return err;
+}
+
 
 /* Make a connection to the Unix domain socket NAME and return a new
    Assuan context in CTX.  SERVER_PID is currently not used but may
@@ -268,41 +331,8 @@ assuan_socket_connect (assuan_context_t ctx, const char *name,
       return _assuan_error (ctx, GPG_ERR_ASS_CONNECT_FAILED);
     }
  
-  ctx->engine.release = _assuan_client_release;
-  ctx->engine.readfnc = _assuan_simple_read;
-  ctx->engine.writefnc = _assuan_simple_write;
-  ctx->engine.sendfd = NULL;
-  ctx->engine.receivefd = NULL;
-  ctx->finish_handler = _assuan_client_finish;
-  ctx->inbound.fd = fd;
-  ctx->outbound.fd = fd;
-  ctx->max_accepts = -1;
+  err = _assuan_connect_finalize(ctx, fd, flags);
 
-  if (flags & ASSUAN_SOCKET_CONNECT_FDPASSING)
-    _assuan_init_uds_io (ctx);
-
-  /* initial handshake */
-  {
-    assuan_response_t response;
-    int off;
-
-    err = _assuan_read_from_server (ctx, &response, &off, 0);
-    if (err)
-      TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
-	      "can't connect to server: %s\n", gpg_strerror (err));
-    else if (response != ASSUAN_RESPONSE_OK)
-      {
-	char *sname = _assuan_encode_c_string (ctx, ctx->inbound.line);
-	if (sname)
-	  {
-	    TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
-		    "can't connect to server: %s", sname);
-	    _assuan_free (ctx, sname);
-	  }
-	err = _assuan_error (ctx, GPG_ERR_ASS_CONNECT_FAILED);
-      }
-  }
-  
   if (err)
     _assuan_reset (ctx);
 
diff --git a/src/assuan.h.in b/src/assuan.h.in
index 426fc4c..9ff263f 100644
--- a/src/assuan.h.in
+++ b/src/assuan.h.in
@@ -358,6 +358,10 @@ gpg_error_t assuan_pipe_connect (assuan_context_t ctx,
 gpg_error_t assuan_socket_connect (assuan_context_t ctx, const char *name,
 				   pid_t server_pid, unsigned int flags);
 
+/*-- assuan-socket-connect.c --*/
+gpg_error_t assuan_socket_connect_fd (assuan_context_t ctx, int fd,
+				   unsigned int flags);
+
 /*-- context.c --*/
 pid_t assuan_get_pid (assuan_context_t ctx);
 struct _assuan_peercred
diff --git a/src/libassuan.def b/src/libassuan.def
index 575966d..9287486 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -104,6 +104,7 @@ EXPORTS
     __assuan_socket			@83
     __assuan_connect			@84
     assuan_register_pre_cmd_notify	@85
+    assuan_socket_connect_fd		@86
 
 ; END
 
diff --git a/src/libassuan.vers b/src/libassuan.vers
index 6311ff1..8126fab 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -99,6 +99,7 @@ LIBASSUAN_1.0 {
     assuan_write_line;
     assuan_write_status;
     assuan_free;
+    assuan_socket_connect_fd;
 
     __assuan_close;
     __assuan_pipe;

commit 79bb873edd4696fc56a0aaf91c9d11c3791691c0
Author: bjk at luxsci.net <bjk at luxsci.net>
Date:   Sat Mar 5 20:06:57 2011 -0500

    Let an existing command previously registered with assuan_register_command() be updated with new values. This fixes overriding the HELP command for example.

diff --git a/src/ChangeLog b/src/ChangeLog
index a12b9cb..5568549 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-05  Ben Kibbey <bjk at luxsci.net>
+
+	* assuan-handler.c (assuan_register_command): Let an existing command
+	be updated to the new values.
+
 2011-02-28  Werner Koch  <wk at g10code.com>
 
 	* libassuan.vers: Fold LIBASSUAN_1.1 block into LIBASSUAN_1.0.
diff --git a/src/assuan-handler.c b/src/assuan-handler.c
index cb271fa..799d058 100644
--- a/src/assuan-handler.c
+++ b/src/assuan-handler.c
@@ -365,7 +365,7 @@ gpg_error_t
 assuan_register_command (assuan_context_t ctx, const char *cmd_name,
                          assuan_handler_t handler, const char *help_string)
 {
-  int i;
+  int i, cmd_index = -1;
   const char *s;
 
   if (cmd_name && !*cmd_name)
@@ -409,10 +409,21 @@ assuan_register_command (assuan_context_t ctx, const char *cmd_name,
       ctx->cmdtbl_size += 50;
     }
 
-  ctx->cmdtbl[ctx->cmdtbl_used].name = cmd_name;
-  ctx->cmdtbl[ctx->cmdtbl_used].handler = handler;
-  ctx->cmdtbl[ctx->cmdtbl_used].helpstr = help_string;
-  ctx->cmdtbl_used++;
+  for (i=0; i<ctx->cmdtbl_used; i++)
+    {
+      if (!strcasecmp(ctx->cmdtbl[i].name, cmd_name))
+        {
+	  cmd_index = i;
+	  break;
+	}
+    }
+
+  if (cmd_index == -1)
+    cmd_index = ctx->cmdtbl_used++;
+
+  ctx->cmdtbl[cmd_index].name = cmd_name;
+  ctx->cmdtbl[cmd_index].handler = handler;
+  ctx->cmdtbl[cmd_index].helpstr = help_string;
   return 0;
 }
 

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

Summary of changes:
 src/ChangeLog               |   15 +++++++
 src/assuan-handler.c        |   79 ++++++++++++++++++++---------------
 src/assuan-socket-connect.c |   98 ++++++++++++++++++++++++++++---------------
 src/assuan.h.in             |    4 ++
 src/libassuan.def           |    1 +
 src/libassuan.vers          |    1 +
 6 files changed, 130 insertions(+), 68 deletions(-)


hooks/post-receive
-- 
IPC library used by GnuPG
http://git.gnupg.org




More information about the Gnupg-commits mailing list