[Pkg-gnupg-commit] [libassuan] 346/437: Extend system hooks table by socket and connect functions.

Eric Dorland eric at moszumanska.debian.org
Fri May 22 05:34:02 UTC 2015


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository libassuan.

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.
---
 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(-)

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);
+}
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/libassuan.git



More information about the Pkg-gnupg-commit mailing list