summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/Makefile.in29
-rw-r--r--source3/configure.in8
-rw-r--r--source3/include/includes.h2
-rw-r--r--source3/lib/socket_wrapper/config.m422
-rw-r--r--source3/lib/socket_wrapper/socket_wrapper.c (renamed from source3/lib/socket_wrapper.c)252
-rw-r--r--source3/lib/socket_wrapper/socket_wrapper.h (renamed from source3/include/socket_wrapper.h)16
6 files changed, 229 insertions, 100 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index a73da33eec..8f6d1b3036 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -207,8 +207,6 @@ ERRORMAP_OBJ = libsmb/errormap.o
PASSCHANGE_OBJ = libsmb/passchange.o
-SOCKET_WRAPPER_OBJ = lib/socket_wrapper.o
-
LIBNDR_OBJ = librpc/ndr/ndr_basic.o librpc/ndr/ndr.o librpc/ndr/ndr_misc.o \
librpc/ndr/ndr_sec_helper.o librpc/ndr/ndr_string.o librpc/ndr/sid.o
@@ -221,10 +219,12 @@ RPC_PARSE_OBJ0 = rpc_parse/parse_prs.o rpc_parse/parse_misc.o
TALLOC_OBJ = lib/talloc.o
-LIB_OBJ = $(VERSION_OBJ) lib/charcnv.o lib/debug.o lib/fault.o \
- lib/getsmbpass.o lib/interface.o lib/md4.o \
- lib/interfaces.o lib/pidfile.o lib/replace.o lib/replace1.o lib/repdir.o lib/timegm.o \
- lib/signal.o lib/system.o lib/sendfile.o lib/time.o \
+LIB_WITHOUT_PROTO_OBJ = @SOCKET_WRAPPER_OBJS@
+
+LIB_WITH_PROTO_OBJ = $(VERSION_OBJ) lib/charcnv.o lib/debug.o lib/fault.o \
+ lib/getsmbpass.o lib/interface.o lib/md4.o \
+ lib/interfaces.o lib/pidfile.o lib/replace.o lib/replace1.o lib/repdir.o lib/timegm.o \
+ lib/signal.o lib/system.o lib/sendfile.o lib/time.o \
lib/ufc.o lib/genrand.o lib/username.o \
lib/util_pw.o lib/access.o lib/smbrun.o \
lib/bitmap.o lib/crc32.o $(SNPRINTF_OBJ) lib/dprintf.o \
@@ -240,9 +240,11 @@ LIB_OBJ = $(VERSION_OBJ) lib/charcnv.o lib/debug.o lib/fault.o \
lib/pam_errors.o intl/lang_tdb.o \
lib/adt_tree.o lib/gencache.o $(TDB_OBJ) \
lib/module.o lib/events.o lib/ldap_escape.o @CHARSET_STATIC@ \
- lib/secdesc.o lib/util_seaccess.o lib/secace.o lib/secacl.o @SOCKWRAP@ \
+ lib/secdesc.o lib/util_seaccess.o lib/secace.o lib/secacl.o \
libads/krb5_errs.o lib/system_smbd.o lib/audit.o $(TALLOC_OBJ)
+LIB_OBJ = $(LIB_WITHOUT_PROTO_OBJ) $(LIB_WITH_PROTO_OBJ)
+
LIB_DUMMY_OBJ = lib/dummysmbd.o lib/dummyroot.o
LIB_NONSMBD_OBJ = $(LIB_OBJ) $(LIB_DUMMY_OBJ)
@@ -621,9 +623,9 @@ CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
MOUNT_OBJ = client/smbmount.o \
$(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
-MNT_OBJ = client/smbmnt.o lib/replace.o lib/timegm.o $(VERSION_OBJ) $(SNPRINTF_OBJ) @SOCKWRAP@
+MNT_OBJ = client/smbmnt.o lib/replace.o lib/timegm.o $(VERSION_OBJ) $(SNPRINTF_OBJ) @SOCKET_WRAPPER_OBJS@
-UMOUNT_OBJ = client/smbumount.o @SOCKWRAP@
+UMOUNT_OBJ = client/smbumount.o @SOCKET_WRAPPER_OBJS@
CIFS_MOUNT_OBJ = client/mount.cifs.o
@@ -707,9 +709,10 @@ SMBFILTER_OBJ = utils/smbfilter.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(SECRETS_OBJ) \
$(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ)
PROTO_OBJ = $(SMBD_OBJ_MAIN) $(LIBNDR_OBJ) $(LIBNDR_GEN_OBJ) \
- $(SMBD_OBJ_SRV) $(NMBD_OBJ1) $(SWAT_OBJ1) $(LIB_OBJ) $(LIBSMB_OBJ) \
+ $(SMBD_OBJ_SRV) $(NMBD_OBJ1) $(SWAT_OBJ1) $(LIBSMB_OBJ) \
$(SMBTORTURE_OBJ1) $(RPCCLIENT_OBJ1) \
$(LIBMSRPC_OBJ) @SMBWRAP_OBJS@ \
+ $(LIB_WITH_PROTO_OBJ) \
$(RPC_PIPE_OBJ) $(RPC_PARSE_OBJ) $(KRBCLIENT_OBJ) \
$(AUTH_OBJ) $(PARAM_OBJ) $(LOCKING_OBJ) $(SECRETS_OBJ) \
$(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \
@@ -1485,15 +1488,15 @@ bin/pam_smbpass.@SHLIBEXT@: $(PAM_SMBPASS_PICOOBJ)
bin/tdbbackup@EXEEXT@: $(TDBBACKUP_OBJ) bin/.dummy
@echo Linking $@
- @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBBACKUP_OBJ) @SOCKWRAP@
+ @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBBACKUP_OBJ) @SOCKET_WRAPPER_OBJS@
bin/tdbtool@EXEEXT@: $(TDBTOOL_OBJ) bin/.dummy
@echo Linking $@
- @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBTOOL_OBJ) @SOCKWRAP@
+ @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBTOOL_OBJ) @SOCKET_WRAPPER_OBJS@
bin/tdbdump@EXEEXT@: $(TDBDUMP_OBJ) bin/.dummy
@echo Linking $@
- @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBDUMP_OBJ) @SOCKWRAP@
+ @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBDUMP_OBJ) @SOCKET_WRAPPER_OBJS@
bin/t_strcmp@EXEEXT@: bin/libbigballofmud.@SHLIBEXT@ torture/t_strcmp.o
$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(DYNEXP) $(LIBS) torture/t_strcmp.o -L ./bin -lbigballofmud
diff --git a/source3/configure.in b/source3/configure.in
index 4f8e3329b9..381ad4e3a6 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -334,13 +334,7 @@ AC_ARG_ENABLE(debug,
CFLAGS="${CFLAGS} -g"
fi])
-AC_SUBST(SOCKWRAP)
-AC_ARG_ENABLE(socket-wrapper,
-[ --enable-socket-wrapper Turn on socket wrapper library (default=no)],
- [if eval "test x$enable_socket_wrapper = xyes"; then
- AC_DEFINE(SOCKET_WRAPPER,1,[Use socket wrapper library])
- SOCKWRAP="\$(SOCKET_WRAPPER_OBJ)"
- fi])
+m4_include(lib/socket_wrapper/config.m4)
#################################################
# set prefix for 'make test'
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 3cca090bb9..1effa69f9a 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -941,7 +941,7 @@ extern int errno;
#ifdef SOCKET_WRAPPER
#define SOCKET_WRAPPER_REPLACE
-#include "include/socket_wrapper.h"
+#include "lib/socket_wrapper/socket_wrapper.h"
#endif
/* Our own pstrings and fstrings */
diff --git a/source3/lib/socket_wrapper/config.m4 b/source3/lib/socket_wrapper/config.m4
new file mode 100644
index 0000000000..42212abc7f
--- /dev/null
+++ b/source3/lib/socket_wrapper/config.m4
@@ -0,0 +1,22 @@
+AC_ARG_ENABLE(socket-wrapper,
+[ --enable-socket-wrapper Turn on socket wrapper library (default=no)])
+
+DEFAULT_TEST_TARGET=test-noswrap
+HAVE_SOCKET_WRAPPER=no
+
+if eval "test x$developer = xyes"; then
+ enable_socket_wrapper=yes
+fi
+
+if eval "test x$enable_socket_wrapper = xyes"; then
+ AC_DEFINE(SOCKET_WRAPPER,1,[Use socket wrapper library])
+ DEFAULT_TEST_TARGET=test-swrap
+ HAVE_SOCKET_WRAPPER=yes
+
+ # this is only used for samba3
+ SOCKET_WRAPPER_OBJS="lib/socket_wrapper/socket_wrapper.o"
+fi
+
+AC_SUBST(DEFAULT_TEST_TARGET)
+AC_SUBST(HAVE_SOCKET_WRAPPER)
+AC_SUBST(SOCKET_WRAPPER_OBJS)
diff --git a/source3/lib/socket_wrapper.c b/source3/lib/socket_wrapper/socket_wrapper.c
index 04c337267f..af774e1927 100644
--- a/source3/lib/socket_wrapper.c
+++ b/source3/lib/socket_wrapper/socket_wrapper.c
@@ -3,6 +3,7 @@
unix domain sockets if the environment variable SOCKET_WRAPPER_DIR
is set.
Copyright (C) Jelmer Vernooij 2005
+ Copyright (C) Stefan Metzmacher 2006
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,25 +20,44 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#ifdef _SAMBA_BUILD_
+
+#define SOCKET_WRAPPER_NOT_REPLACE
#include "includes.h"
+/*
+#include "system/network.h"
+#include "system/filesys.h"
+*/
+#ifndef _DLINKLIST_H
+#include "lib/util/dlinklist.h"
+#endif
-#ifdef _PUBLIC_
-#undef _PUBLIC_
+#ifdef malloc
+#undef malloc
#endif
-#define _PUBLIC_
-
-#ifdef SOCKET_WRAPPER_REPLACE
-#undef accept
-#undef connect
-#undef bind
-#undef getpeername
-#undef getsockname
-#undef getsockopt
-#undef setsockopt
-#undef recvfrom
-#undef sendto
-#undef socket
-#undef close
+#ifdef calloc
+#undef calloc
+#endif
+#ifdef strdup
+#undef strdup
+#endif
+
+#else /* _SAMBA_BUILD_ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <errno.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#error "dlinklist.h missing"
+
#endif
/* LD_PRELOAD doesn't work yet, so REWRITE_CALLS is all we support
@@ -54,13 +74,12 @@
#define real_setsockopt setsockopt
#define real_recvfrom recvfrom
#define real_sendto sendto
+#define real_recv recv
+#define real_send send
#define real_socket socket
#define real_close close
#endif
-#undef malloc
-#undef calloc
-#undef strdup
/* we need to use a very terse format here as IRIX 6.4 silently
truncates names to 16 chars, so if we use a longer name then we
can't tell which port a packet came from with recvfrom()
@@ -82,7 +101,7 @@ struct socket_info
{
int fd;
- int domain;
+ int family;
int type;
int protocol;
int bound;
@@ -100,7 +119,7 @@ struct socket_info
struct socket_info *prev, *next;
};
-static struct socket_info *sockets = NULL;
+static struct socket_info *sockets;
static const char *socket_wrapper_dir(void)
@@ -115,6 +134,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");
@@ -346,9 +382,6 @@ static int sockaddr_convert_to_un(struct socket_info *si, const struct sockaddr
} else {
return convert_in_un_remote(si, (const struct sockaddr_in *)in_addr, out_addr, bcast);
}
- case AF_UNIX:
- memcpy(out_addr, in_addr, sizeof(*out_addr));
- return 0;
default:
break;
}
@@ -390,10 +423,6 @@ static int sockaddr_convert_from_un(const struct socket_info *si,
return -1;
}
return convert_un_in(in_addr, (struct sockaddr_in *)out_addr, _out_addrlen);
- case AF_UNIX:
- memcpy(out_addr, in_addr, out_addrlen);
- *_out_addrlen = out_addrlen;
- return 0;
default:
break;
}
@@ -402,26 +431,52 @@ static int sockaddr_convert_from_un(const struct socket_info *si,
return -1;
}
-_PUBLIC_ int swrap_socket(int domain, int type, int protocol)
+enum swrap_packet_type {
+ SWRAP_CONNECT,
+ SWRAP_ACCEPT,
+ SWRAP_RECVFROM,
+ SWRAP_SENDTO,
+ SWRAP_RECV,
+ 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;
+ }
+
+}
+
+_PUBLIC_ int swrap_socket(int family, int type, int protocol)
{
struct socket_info *si;
int fd;
if (!socket_wrapper_dir()) {
- return real_socket(domain, type, protocol);
+ return real_socket(family, type, protocol);
}
-
- si = (struct socket_info *)calloc(1, sizeof(struct socket_info));
- if (si == NULL) {
- errno = ENOMEM;
+
+ switch (family) {
+ case AF_INET:
+ break;
+ case AF_UNIX:
+ return real_socket(family, type, protocol);
+ default:
+ errno = EAFNOSUPPORT;
return -1;
}
-
+
fd = real_socket(AF_UNIX, type, 0);
if (fd == -1) return -1;
- si->domain = domain;
+ si = calloc(1, sizeof(struct socket_info));
+
+ si->family = family;
si->type = type;
si->protocol = protocol;
si->fd = fd;
@@ -458,29 +513,35 @@ _PUBLIC_ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
fd = ret;
ret = sockaddr_convert_from_un(parent_si, &un_addr, un_addrlen,
- parent_si->domain, addr, addrlen);
- if (ret == -1) return ret;
-
- child_si = (struct socket_info *)malloc(sizeof(struct socket_info));
- if (child_si == NULL) {
+ parent_si->family, addr, addrlen);
+ if (ret == -1) {
close(fd);
- errno = ENOMEM;
- return -1;
+ return ret;
}
+
+ child_si = malloc(sizeof(struct socket_info));
memset(child_si, 0, sizeof(*child_si));
child_si->fd = fd;
- child_si->domain = parent_si->domain;
+ child_si->family = parent_si->family;
child_si->type = parent_si->type;
child_si->protocol = parent_si->protocol;
child_si->bound = 1;
ret = real_getsockname(fd, (struct sockaddr *)&un_my_addr, &un_my_addrlen);
- if (ret == -1) return ret;
+ if (ret == -1) {
+ free(child_si);
+ close(fd);
+ return ret;
+ }
ret = sockaddr_convert_from_un(child_si, &un_my_addr, un_my_addrlen,
- child_si->domain, &my_addr, &my_addrlen);
- if (ret == -1) return ret;
+ child_si->family, &my_addr, &my_addrlen);
+ if (ret == -1) {
+ free(child_si);
+ close(fd);
+ return ret;
+ }
child_si->myname_len = my_addrlen;
child_si->myname = sockaddr_dup(&my_addr, my_addrlen);
@@ -490,6 +551,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;
}
@@ -504,6 +567,7 @@ static int swrap_auto_bind(struct socket_info *si)
int i;
char type;
int ret;
+ int port;
struct stat st;
un_addr.sun_family = AF_UNIX;
@@ -521,9 +585,10 @@ static int swrap_auto_bind(struct socket_info *si)
}
for (i=0;i<1000;i++) {
+ port = 10000 + i;
snprintf(un_addr.sun_path, sizeof(un_addr.sun_path),
"%s/"SOCKET_FORMAT, socket_wrapper_dir(),
- type, socket_wrapper_default_iface(), i + 10000);
+ type, socket_wrapper_default_iface(), port);
if (stat(un_addr.sun_path, &st) == 0) continue;
ret = real_bind(si->fd, (struct sockaddr *)&un_addr, sizeof(un_addr));
@@ -540,7 +605,7 @@ static int swrap_auto_bind(struct socket_info *si)
memset(&in, 0, sizeof(in));
in.sin_family = AF_INET;
- in.sin_port = htons(i);
+ in.sin_port = htons(port);
in.sin_addr.s_addr = htonl(127<<24 | socket_wrapper_default_iface());
si->myname_len = sizeof(in);
@@ -560,7 +625,7 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad
return real_connect(s, serv_addr, addrlen);
}
- if (si->bound == 0 && si->domain != AF_UNIX) {
+ if (si->bound == 0) {
ret = swrap_auto_bind(si);
if (ret == -1) return -1;
}
@@ -572,10 +637,8 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad
sizeof(struct sockaddr_un));
/* to give better errors */
- if (serv_addr->sa_family == AF_INET) {
- if (ret == -1 && errno == ENOENT) {
- errno = EHOSTUNREACH;
- }
+ if (ret == -1 && errno == ENOENT) {
+ errno = EHOSTUNREACH;
}
if (ret == 0) {
@@ -583,6 +646,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;
}
@@ -660,13 +725,8 @@ _PUBLIC_ int swrap_getsockopt(int s, int level, int optname, void *optval, sockl
return real_getsockopt(s, level, optname, optval, optlen);
}
- switch (si->domain) {
- case AF_UNIX:
- return real_getsockopt(s, level, optname, optval, optlen);
- default:
- errno = ENOPROTOOPT;
- return -1;
- }
+ errno = ENOPROTOOPT;
+ return -1;
}
_PUBLIC_ int swrap_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
@@ -681,15 +741,9 @@ _PUBLIC_ int swrap_setsockopt(int s, int level, int optname, const void *o
return real_setsockopt(s, level, optname, optval, optlen);
}
- switch (si->domain) {
- case AF_UNIX:
- return real_setsockopt(s, level, optname, optval, optlen);
+ switch (si->family) {
case AF_INET:
- /* Silence some warnings */
-#ifdef TCP_NODELAY
- if (optname == TCP_NODELAY)
- return 0;
-#endif
+ return 0;
default:
errno = ENOPROTOOPT;
return -1;
@@ -714,15 +768,17 @@ _PUBLIC_ ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags, struct
return ret;
if (sockaddr_convert_from_un(si, &un_addr, un_addrlen,
- si->domain, from, fromlen) == -1) {
+ si->family, from, fromlen) == -1) {
return -1;
}
-
+
+ swrap_dump_packet(si, from, SWRAP_RECVFROM, buf, len, ret);
+
return ret;
}
-_PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
+_PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
{
struct sockaddr_un un_addr;
int ret;
@@ -733,7 +789,7 @@ _PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags,
return real_sendto(s, buf, len, flags, to, tolen);
}
- if (si->bound == 0 && si->domain != AF_UNIX) {
+ if (si->bound == 0) {
ret = swrap_auto_bind(si);
if (ret == -1) return -1;
}
@@ -757,18 +813,58 @@ _PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags,
/* ignore the any errors in broadcast sends */
real_sendto(s, buf, len, flags, (struct sockaddr *)&un_addr, sizeof(un_addr));
}
+
+ swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len, len);
+
return len;
}
ret = real_sendto(s, buf, len, flags, (struct sockaddr *)&un_addr, sizeof(un_addr));
/* to give better errors */
- if (to->sa_family == AF_INET) {
- if (ret == -1 && errno == ENOENT) {
- errno = EHOSTUNREACH;
- }
+ if (ret == -1 && errno == ENOENT) {
+ errno = EHOSTUNREACH;
+ }
+
+ swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len, ret);
+
+ return ret;
+}
+
+_PUBLIC_ ssize_t swrap_recv(int s, void *buf, size_t len, int flags)
+{
+ int ret;
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return real_recv(s, buf, len, flags);
}
+ ret = real_recv(s, buf, len, flags);
+ if (ret == -1)
+ return ret;
+
+ swrap_dump_packet(si, NULL, SWRAP_RECV, buf, len, ret);
+
+ return ret;
+}
+
+
+_PUBLIC_ ssize_t swrap_send(int s, const void *buf, size_t len, int flags)
+{
+ int ret;
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return real_send(s, buf, len, flags);
+ }
+
+ ret = real_send(s, buf, len, flags);
+ if (ret == -1)
+ return ret;
+
+ swrap_dump_packet(si, NULL, SWRAP_SEND, buf, len, ret);
+
return ret;
}
@@ -779,6 +875,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);
diff --git a/source3/include/socket_wrapper.h b/source3/lib/socket_wrapper/socket_wrapper.h
index 3c4a2c01dc..23a261faaf 100644
--- a/source3/include/socket_wrapper.h
+++ b/source3/lib/socket_wrapper/socket_wrapper.h
@@ -19,7 +19,7 @@
#ifndef __SOCKET_WRAPPER_H__
#define __SOCKET_WRAPPER_H__
-int swrap_socket(int domain, int type, int protocol);
+int swrap_socket(int family, int type, int protocol);
int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen);
int swrap_bind(int s, const struct sockaddr *myaddr, socklen_t addrlen);
@@ -28,7 +28,9 @@ int swrap_getsockname(int s, struct sockaddr *name, socklen_t *addrlen);
int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int swrap_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
-ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
+ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
+ssize_t swrap_recv(int s, void *buf, size_t len, int flags);
+ssize_t swrap_send(int s, const void *buf, size_t len, int flags);
int swrap_close(int);
#ifdef SOCKET_WRAPPER_REPLACE
@@ -78,6 +80,16 @@ int swrap_close(int);
#endif
#define sendto(s,buf,len,flags,to,tolen) swrap_sendto(s,buf,len,flags,to,tolen)
+#ifdef recv
+#undef recv
+#endif
+#define recv(s,buf,len,flags) swrap_recv(s,buf,len,flags)
+
+#ifdef send
+#undef send
+#endif
+#define send(s,buf,len,flags) swrap_send(s,buf,len,flags)
+
#ifdef socket
#undef socket
#endif