[git] Assuan - branch, master, updated. libassuan-2.0.1-22-g1875301

by Marcus Brinkmann cvs at cvs.gnupg.org
Wed Feb 2 13:49:23 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  1875301d3a5a61e79097e0cd20e1ef8900e7515a (commit)
      from  88d8aea1614fcf1f549d85c0a6a0082dcd6a9787 (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 1875301d3a5a61e79097e0cd20e1ef8900e7515a
Author: Marcus Brinkmann <marcus.brinkmann at ruhr-uni-bochum.de>
Date:   Wed Feb 2 13:28:22 2011 +0100

    Extend system hooks table by socket and connect functions.
    
    2011-02-02  Marcus Brinkmann  <marcus.brinkmann at ruhr-uni-bochum.de>
    
            * assuan-defs.h (_assuan_socket, _assuan_connect): New prototypes.
            * assuan.h.in (ASSUAN_SYSTEM_HOOKS_VERSION): Bumped to 2.
            (struct assuan_system_hooks): Add socket and connect members.
            (__assuan_socket, __assuan_connect): New prototypes.
            (_ASSUAN_SYSTEM_PTH_IMPL): Add socket and connect members.  *
            assuan-socket-connect.c (assuan_socket_connect): Call
            _assuan_socket and _assuan_connect instead _assuan_sock_new and
            _assuan_sock_connect.
    	(libassuan.def, libassuan.vers): Add __assuan_socket and
    	__assuan_connect.
            * system.c (_assuan_system_hooks_copy): Initialize destination
            from system hooks, so we don't get any NULL pointers if there is a
            version	mismatch.  Support version 2 of	the system hook	structure.
            (_assuan_socket, _assuan_connect): New functions.
            * system-posix.c (__assuan_socket, __assuan_connect): New functions.
            (_assuan_system_hooks): Add __assuan_socketm, __assuan_connect.
            * system-w32.c (__assuan_socket, __assuan_connect): New functions.
            (_assuan_system_hooks): Add __assuan_socketm, __assuan_connect.
            * system-w32ce.c (__assuan_socket, __assuan_connect): New functions.
            (_assuan_system_hooks): Add __assuan_socketm, __assuan_connect.

diff --git a/NEWS b/NEWS
index 4f4cd5b..2affd80 100644
--- a/NEWS
+++ b/NEWS
@@ -7,10 +7,15 @@ Noteworthy changes in version 2.0.2
 
  * The gpgcedev.c driver now provides a log device.
 
+ * It is now possible to overwrite socket and connect functions in
+   struct assuan_system_hooks.
+
  * Interface changes relative to the 2.0.1 release:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ASSUAN_CONVEY_COMMENTS   NEW.
  ASSUAN_NO_LOGGING        NEW.
+ assuan_system_hooks_t	  CHANGED: Added socket and connect members.
+ ASSUAN_SYSTEM_HOOKS_VERSION  CHANGED: Bumped to 2.
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
diff --git a/src/ChangeLog b/src/ChangeLog
index 2199e24..7f0d32f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,26 @@
+2011-02-02  Marcus Brinkmann  <marcus.brinkmann at ruhr-uni-bochum.de>
+
+	* assuan-defs.h (_assuan_socket, _assuan_connect): New prototypes.
+	* assuan.h.in (ASSUAN_SYSTEM_HOOKS_VERSION): Bumped to 2.
+	(struct assuan_system_hooks): Add socket and connect members.
+	(__assuan_socket, __assuan_connect): New prototypes.
+	(_ASSUAN_SYSTEM_PTH_IMPL): Add socket and connect members.  *
+	assuan-socket-connect.c (assuan_socket_connect): Call
+	_assuan_socket and _assuan_connect instead _assuan_sock_new and
+	_assuan_sock_connect.
+	(libassuan.def, libassuan.vers): Add __assuan_socket and
+	__assuan_connect.
+	* system.c (_assuan_system_hooks_copy): Initialize destination
+	from system hooks, so we don't get any NULL pointers if there is a
+	version mismatch.  Support version 2 of the system hook structure.
+	(_assuan_socket, _assuan_connect): New functions.
+	* system-posix.c (__assuan_socket, __assuan_connect): New functions.
+	(_assuan_system_hooks): Add __assuan_socketm, __assuan_connect.
+	* system-w32.c (__assuan_socket, __assuan_connect): New functions.
+	(_assuan_system_hooks): Add __assuan_socketm, __assuan_connect.
+	* system-w32ce.c (__assuan_socket, __assuan_connect): New functions.
+	(_assuan_system_hooks): Add __assuan_socketm, __assuan_connect.
+	
 2010-12-20  Werner Koch  <wk at g10code.com>
 
 	* gpgcedev.c (pipeimpl_new): Check malloc and CreateEvent return
diff --git a/src/assuan-defs.h b/src/assuan-defs.h
index 4a25568..88863eb 100644
--- a/src/assuan-defs.h
+++ b/src/assuan-defs.h
@@ -259,6 +259,9 @@ pid_t  _assuan_waitpid (assuan_context_t ctx, pid_t pid, int nowait,
 			int *status, int options);
 int _assuan_socketpair (assuan_context_t ctx, int namespace, int style,
 			int protocol, assuan_fd_t filedes[2]);
+int _assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol);
+int _assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr,
+		     socklen_t length);
 
 extern struct assuan_system_hooks _assuan_system_hooks;
 
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c
index fa3db4b..609813d 100644
--- a/src/assuan-socket-connect.c
+++ b/src/assuan-socket-connect.c
@@ -251,7 +251,7 @@ assuan_socket_connect (assuan_context_t ctx, const char *name,
         return err;
     }
   
-  fd = _assuan_sock_new (ctx, pf, SOCK_STREAM, 0);
+  fd = _assuan_socket (ctx, pf, SOCK_STREAM, 0);
   if (fd == ASSUAN_INVALID_FD)
     {
       err = _assuan_error (ctx, gpg_err_code_from_syserror ());
@@ -260,7 +260,7 @@ assuan_socket_connect (assuan_context_t ctx, const char *name,
       return err;
     }
 
-  if (_assuan_sock_connect (ctx, fd, srvr_addr, len) == -1)
+  if (_assuan_connect (ctx, fd, srvr_addr, len) == -1)
     {
       TRACE2 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
 	      "can't connect to `%s': %s\n", name, strerror (errno));
diff --git a/src/assuan.h.in b/src/assuan.h.in
index ea91973..baf5594 100644
--- a/src/assuan.h.in
+++ b/src/assuan.h.in
@@ -202,7 +202,7 @@ void assuan_set_io_monitor (assuan_context_t ctx,
 			    assuan_io_monitor_t io_monitor, void *hook_data);
 
 
-#define ASSUAN_SYSTEM_HOOKS_VERSION 1
+#define ASSUAN_SYSTEM_HOOKS_VERSION 2
 #define ASSUAN_SPAWN_DETACHED 128
 struct assuan_system_hooks
 {
@@ -245,6 +245,8 @@ struct assuan_system_hooks
 		    int action, int *status, int options);
   int (*socketpair) (assuan_context_t ctx, int _namespace, int style,
 		     int protocol, assuan_fd_t filedes[2]);
+  int (*socket) (assuan_context_t ctx, int namespace, int style, int protocol);
+  int (*connect) (assuan_context_t ctx, int sock, struct sockaddr *addr, socklen_t length);
 };
 typedef struct assuan_system_hooks *assuan_system_hooks_t;
 
@@ -470,6 +472,8 @@ int __assuan_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
 		    void *atforkvalue, unsigned int flags);
 int __assuan_socketpair (assuan_context_t ctx, int _namespace, int style,
 			 int protocol, assuan_fd_t filedes[2]);
+int __assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol);
+int __assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr, socklen_t length);
 
 
 #define ASSUAN_SYSTEM_PTH_IMPL						\
@@ -492,7 +496,8 @@ int __assuan_socketpair (assuan_context_t ctx, int _namespace, int style,
     { ASSUAN_SYSTEM_HOOKS_VERSION, _assuan_pth_usleep, __assuan_pipe,	\
       __assuan_close, _assuan_pth_read, _assuan_pth_write,		\
       _assuan_pth_recvmsg, _assuan_pth_sendmsg,				\
-      __assuan_spawn, _assuan_pth_waitpid, __assuan_socketpair }
+      __assuan_spawn, _assuan_pth_waitpid, __assuan_socketpair,		\
+      __assuan_socket, __assuan_connect }
 
 extern struct assuan_system_hooks _assuan_system_pth;
 #define ASSUAN_SYSTEM_PTH &_assuan_system_pth
diff --git a/src/libassuan.def b/src/libassuan.def
index 59aba41..a2e7b61 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -101,6 +101,8 @@ EXPORTS
     assuan_free                         @80
     _assuan_w32ce_prepare_pipe          @81
     _assuan_w32ce_finish_pipe           @82
+    __assuan_socket			@83
+    __assuan_connect			@84
 
 ; END
 
diff --git a/src/libassuan.vers b/src/libassuan.vers
index b91d8e4..b14a940 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -20,6 +20,12 @@
 # Please remember to add new functions also to libassuan.def
 #-----------------------------------------------------------
 
+LIBASSUAN_1.1 {
+  global:
+    __assuan_socket;
+    __assuan_connect;
+};
+
 LIBASSUAN_1.0 {
   global:
     assuan_accept;
diff --git a/src/system-posix.c b/src/system-posix.c
index e36767a..68294c0 100644
--- a/src/system-posix.c
+++ b/src/system-posix.c
@@ -321,6 +321,21 @@ __assuan_socketpair (assuan_context_t ctx, int namespace, int style,
 }
 
 
+int
+__assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol)
+{
+  return socket (namespace, style, protocol);
+}
+
+
+int
+__assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr,
+		  socklen_t length)
+{
+  return connect (sock, addr, length);
+}
+
+
 
 /* The default system hooks for assuan contexts.  */
 struct assuan_system_hooks _assuan_system_hooks =
@@ -335,5 +350,7 @@ struct assuan_system_hooks _assuan_system_hooks =
     __assuan_sendmsg,
     __assuan_spawn,
     __assuan_waitpid,
-    __assuan_socketpair    
+    __assuan_socketpair,
+    __assuan_socket,
+    __assuan_connect
   };
diff --git a/src/system-w32.c b/src/system-w32.c
index 5c11114..539d34e 100644
--- a/src/system-w32.c
+++ b/src/system-w32.c
@@ -514,6 +514,21 @@ __assuan_socketpair (assuan_context_t ctx, int namespace, int style,
   return -1;
 }
 
+
+int
+__assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol)
+{
+  return _assuan_sock_new (ctx, namespace, style, protocol);
+}
+
+
+int
+__assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr,
+		  socklen_t length)
+{
+  return _assuan_sock_connect (ctx, sock, addr, length);
+}
+
 
 /* The default system hooks for assuan contexts.  */
 struct assuan_system_hooks _assuan_system_hooks =
@@ -528,5 +543,7 @@ struct assuan_system_hooks _assuan_system_hooks =
     __assuan_sendmsg,
     __assuan_spawn,
     __assuan_waitpid,
-    __assuan_socketpair    
+    __assuan_socketpair,
+    __assuan_socket,
+    __assuan_connect    
   };
diff --git a/src/system-w32ce.c b/src/system-w32ce.c
index 6b5c3c9..da660ea 100644
--- a/src/system-w32ce.c
+++ b/src/system-w32ce.c
@@ -660,6 +660,21 @@ __assuan_socketpair (assuan_context_t ctx, int namespace, int style,
 }
 
 
+int
+__assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol)
+{
+  return _assuan_sock_new (ctx, namespace, style, protocol);
+}
+
+
+int
+__assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr,
+		  socklen_t length)
+{
+  return _assuan_sock_connect (ctx, sock, addr, length);
+}
+
+
 
 /* The default system hooks for assuan contexts.  */
 struct assuan_system_hooks _assuan_system_hooks =
@@ -674,5 +689,7 @@ struct assuan_system_hooks _assuan_system_hooks =
     __assuan_sendmsg,
     __assuan_spawn,
     __assuan_waitpid,
-    __assuan_socketpair    
+    __assuan_socketpair,
+    __assuan_socket,
+    __assuan_connect    
   };
diff --git a/src/system.c b/src/system.c
index 373fc5b..1fca056 100644
--- a/src/system.c
+++ b/src/system.c
@@ -108,8 +108,10 @@ _assuan_system_hooks_copy (assuan_system_hooks_t dst,
 			   assuan_system_hooks_t src)
 
 {
-  memset (dst, '\0', sizeof (*dst));
-
+  /* Reset the defaults.  */
+  if (dst != &_assuan_system_hooks)
+    memcpy (dst, &_assuan_system_hooks, sizeof (*dst));
+      
   dst->version = ASSUAN_SYSTEM_HOOKS_VERSION;
   if (src->version >= 1)
     {
@@ -124,7 +126,12 @@ _assuan_system_hooks_copy (assuan_system_hooks_t dst,
       dst->waitpid = src->waitpid;
       dst->socketpair = src->socketpair;
     }
-  if (src->version > 1)
+  if (src->version >= 2)
+    {
+      dst->socket = src->socket;
+      dst->connect = src->connect;
+    }
+  if (src->version > 2)
     /* FIXME.  Application uses newer version of the library.  What to
        do?  */
     ;
@@ -385,3 +392,29 @@ _assuan_socketpair (assuan_context_t ctx, int namespace, int style,
   return TRACE_SYSERR (res);
 }
 
+
+
+int
+_assuan_socket (assuan_context_t ctx, int namespace, int style, int protocol)
+{
+  int res;
+  TRACE_BEG3 (ctx, ASSUAN_LOG_SYSIO, "_assuan_socket", ctx,
+	      "namespace=%i,style=%i,protocol=%i",
+	      namespace, style, protocol);
+  
+  res = (ctx->system.socket) (ctx, namespace, style, protocol);
+  return TRACE_SYSRES (res);
+}
+
+
+int
+_assuan_connect (assuan_context_t ctx, int sock, struct sockaddr *addr, socklen_t length)
+{
+  int res;
+  TRACE_BEG3 (ctx, ASSUAN_LOG_SYSIO, "_assuan_connect", ctx,
+	      "socket=%i,addr=%p,length=%i", sock, addr, length);
+  
+  res = (ctx->system.connect) (ctx, sock, addr, length);
+  return TRACE_SYSRES (res);
+}
+

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

Summary of changes:
 NEWS                        |    5 +++++
 src/ChangeLog               |   23 +++++++++++++++++++++++
 src/assuan-defs.h           |    3 +++
 src/assuan-socket-connect.c |    4 ++--
 src/assuan.h.in             |    9 +++++++--
 src/libassuan.def           |    2 ++
 src/libassuan.vers          |    6 ++++++
 src/system-posix.c          |   19 ++++++++++++++++++-
 src/system-w32.c            |   19 ++++++++++++++++++-
 src/system-w32ce.c          |   19 ++++++++++++++++++-
 src/system.c                |   39 ++++++++++++++++++++++++++++++++++++---
 11 files changed, 138 insertions(+), 10 deletions(-)


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




More information about the Gnupg-commits mailing list