diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-09-12 09:08:55 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:18:27 -0500 |
commit | ee67387d322cd08ae77ef11716331be7a850c5e9 (patch) | |
tree | 0b594590f77d02f05796bc3cb1a8cdf02cbffe91 | |
parent | 5addf852d25cea23ee9fe8f308bbe08244b2c344 (diff) | |
download | samba-ee67387d322cd08ae77ef11716331be7a850c5e9.tar.gz samba-ee67387d322cd08ae77ef11716331be7a850c5e9.tar.bz2 samba-ee67387d322cd08ae77ef11716331be7a850c5e9.zip |
r18423: record accept, connect and close events in socket wrapper
metze
(This used to be commit 7f29471f0b6b9158da52522984a6ab3f8ace4f42)
-rw-r--r-- | source4/lib/socket_wrapper/socket_wrapper.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/source4/lib/socket_wrapper/socket_wrapper.c b/source4/lib/socket_wrapper/socket_wrapper.c index 5ba1624af6..cedc2ecf9f 100644 --- a/source4/lib/socket_wrapper/socket_wrapper.c +++ b/source4/lib/socket_wrapper/socket_wrapper.c @@ -113,6 +113,23 @@ static const char *socket_wrapper_dir(void) return s; } +static const char *socket_wrapper_dump_dir(void) +{ + const char *s = getenv("SOCKET_WRAPPER_DUMP_DIR"); + + if (!socket_wrapper_dir()) { + return NULL; + } + + if (s == NULL) { + return NULL; + } + if (strncmp(s, "./", 2) == 0) { + s += 2; + } + return s; +} + static unsigned int socket_wrapper_default_iface(void) { const char *s = getenv("SOCKET_WRAPPER_DEFAULT_IFACE"); @@ -401,16 +418,22 @@ static int sockaddr_convert_from_un(const struct socket_info *si, } enum swrap_packet_type { + SWRAP_CONNECT, + SWRAP_ACCEPT, SWRAP_RECVFROM, SWRAP_SENDTO, SWRAP_RECV, - SWRAP_SEND + SWRAP_SEND, + SWRAP_CLOSE }; static void swrap_dump_packet(struct socket_info *si, const struct sockaddr *addr, enum swrap_packet_type type, const void *buf, size_t len, ssize_t ret) { + if (!socket_wrapper_dump_dir()) { + return; + } } @@ -493,6 +516,8 @@ _PUBLIC_ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen) DLIST_ADD(sockets, child_si); + swrap_dump_packet(child_si, addr, SWRAP_ACCEPT, NULL, 0, 0); + return fd; } @@ -586,6 +611,8 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad si->peername = sockaddr_dup(serv_addr, addrlen); } + swrap_dump_packet(si, serv_addr, SWRAP_CONNECT, NULL, 0, ret); + return ret; } @@ -822,6 +849,8 @@ _PUBLIC_ int swrap_close(int fd) if (si) { DLIST_REMOVE(sockets, si); + swrap_dump_packet(si, NULL, SWRAP_CLOSE, NULL, 0, 0); + free(si->path); free(si->myname); free(si->peername); |