[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Sat Dec 6 18:38:03 MST 2014


The branch, master has been updated
       via  49e208c smbd: Use read_data() in notify_inotify
       via  b322ea2 lib: Add a simple read_data call without NTSTATUS
       via  78d1c04 lib: Make write_data take a const void *
       via  0013001 lib: Split out write_data[_iov]
       via  214fc09 lib: Split out iov_buf[len]
       via  a8491cb lib: read_data->read_data_ntstatus
       via  97b2570 lib: Split out sys_[read|write] & friends
       via  a25e913 ctdb: ctdb_protocol.h references struct sockaddr
       via  a2d6511 Fix signed/unsigned comparisons
       via  6a3db15 ctdbd_conn: Accept msgs to all registered srvids
      from  ecd0e6e rwrap: Bump version to 1.1.0.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 49e208c2b34616d4308e0a3fcf3029c72ee7059f
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 14:41:42 2014 +0000

    smbd: Use read_data() in notify_inotify
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Sun Dec  7 02:37:04 CET 2014 on sn-devel-104

commit b322ea2059604ed94aa2170e634a59cdb4561681
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 14:35:14 2014 +0000

    lib: Add a simple read_data call without NTSTATUS
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 78d1c04e1ac48711ad6aa3d08b33a51848c49303
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 14:29:26 2014 +0000

    lib: Make write_data take a const void *
    
    This aligns it with write(2)
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 0013001e702a091b102c3a9a531d12e1d8d97828
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 14:25:56 2014 +0000

    lib: Split out write_data[_iov]
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 214fc09a3443ab62772666a985975fa548b215fa
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 14:21:17 2014 +0000

    lib: Split out iov_buf[len]
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a8491cb95a2c181d40b0b94cceff8d69d137935c
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 14:06:49 2014 +0000

    lib: read_data->read_data_ntstatus
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 97b2570a5e526273476d3990bcef0ac074b34d67
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Nov 19 13:33:06 2014 +0000

    lib: Split out sys_[read|write] & friends
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a25e913cf58c0490755d5a555e2175ae2e74e24e
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Dec 3 16:02:35 2014 +0100

    ctdb: ctdb_protocol.h references struct sockaddr
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a2d6511f909f2bd16907997d06500598a5099941
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Dec 5 14:38:48 2014 +0100

    Fix signed/unsigned comparisons
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6a3db15810a01dc51faf39ea355525bc4c598758
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Nov 21 16:20:10 2014 +0100

    ctdbd_conn: Accept msgs to all registered srvids
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 ctdb/include/ctdb_protocol.h                       |   2 +
 lib/util/genrand.c                                 |   2 +-
 lib/util/util_id.c                                 |   4 +-
 source3/include/proto.h                            |  12 +-
 source3/lib/ctdbd_conn.c                           |  50 ++++++--
 lib/util/close_low_fd.c => source3/lib/iov_buf.c   |  64 +++++-----
 lib/util/close_low_fd.h => source3/lib/iov_buf.h   |  15 +--
 source3/lib/messages.c                             |   1 +
 source3/lib/messages_ctdbd.c                       |   1 +
 source3/lib/recvfile.c                             |   1 +
 source3/lib/sys_rw.c                               | 101 ++++++++++++++++
 lib/util/close_low_fd.h => source3/lib/sys_rw.h    |  24 ++--
 source3/lib/sys_rw_data.c                          | 129 +++++++++++++++++++++
 .../close_low_fd.h => source3/lib/sys_rw_data.h    |  22 ++--
 source3/lib/system.c                               |  90 --------------
 source3/lib/util.c                                 |   2 +
 source3/lib/util_file.c                            |   1 +
 source3/lib/util_sock.c                            | 127 +-------------------
 source3/lib/util_transfer_file.c                   |   1 +
 source3/libsmb/unexpected.c                        |   1 +
 source3/modules/vfs_aio_fork.c                     |   2 +
 source3/modules/vfs_aio_linux.c                    |   1 +
 source3/modules/vfs_aio_posix.c                    |   1 +
 source3/modules/vfs_default.c                      |   1 +
 source3/modules/vfs_fruit.c                        |   1 +
 source3/modules/vfs_preopen.c                      |   1 +
 source3/modules/vfs_smb_traffic_analyzer.c         |   1 +
 source3/nmbd/asyncdns.c                            |   5 +-
 source3/printing/print_cups.c                      |   1 +
 source3/printing/printing.c                        |   1 +
 source3/rpc_server/samr/srv_samr_chgpasswd.c       |   1 +
 source3/smbd/files.c                               |   2 +-
 source3/smbd/notify_inotify.c                      |  11 +-
 source3/smbd/process.c                             |   1 +
 source3/smbd/reply.c                               |   4 +-
 source3/smbd/scavenger.c                           |   1 +
 source3/smbd/smb2_read.c                           |   1 +
 source3/torture/torture.c                          |   1 +
 source3/utils/smbfilter.c                          |   1 +
 source3/winbindd/winbindd_dual.c                   |   7 +-
 source3/wscript_build                              |  12 +-
 41 files changed, 405 insertions(+), 302 deletions(-)
 copy lib/util/close_low_fd.c => source3/lib/iov_buf.c (52%)
 copy lib/util/close_low_fd.h => source3/lib/iov_buf.h (74%)
 create mode 100644 source3/lib/sys_rw.c
 copy lib/util/close_low_fd.h => source3/lib/sys_rw.h (54%)
 create mode 100644 source3/lib/sys_rw_data.c
 copy lib/util/close_low_fd.h => source3/lib/sys_rw_data.h (59%)


Changeset truncated at 500 lines:

diff --git a/ctdb/include/ctdb_protocol.h b/ctdb/include/ctdb_protocol.h
index 15d9fc5..3cecc12 100644
--- a/ctdb/include/ctdb_protocol.h
+++ b/ctdb/include/ctdb_protocol.h
@@ -20,6 +20,8 @@
 #ifndef _CTDB_PROTOCOL_H
 #define _CTDB_PROTOCOL_H
 
+#include <sys/socket.h>
+
 /* location of daemon socket, set at configure time */
 #ifdef SOCKPATH
 #define CTDB_SOCKET 	SOCKPATH
diff --git a/lib/util/genrand.c b/lib/util/genrand.c
index 0e5902f..c0163f4 100644
--- a/lib/util/genrand.c
+++ b/lib/util/genrand.c
@@ -526,7 +526,7 @@ _PUBLIC_ char** generate_unique_strs(TALLOC_CTX *mem_ctx, size_t len,
 {
 	const char *c_list = "abcdefghijklmnopqrstuvwxyz0123456789+_-#.,";
 	const unsigned c_size = 42;
-	int i, j;
+	size_t i, j;
 	unsigned rem;
 	char ** strs = NULL;
 
diff --git a/lib/util/util_id.c b/lib/util/util_id.c
index d5a8c66..c5bf911 100644
--- a/lib/util/util_id.c
+++ b/lib/util/util_id.c
@@ -28,7 +28,7 @@
 bool add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid,
 			     gid_t **gids, uint32_t *num_gids)
 {
-	int i;
+	uint32_t i;
 
 	if ((*num_gids != 0) && (*gids == NULL)) {
 		/*
@@ -61,7 +61,7 @@ bool add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid,
 bool add_uid_to_array_unique(TALLOC_CTX *mem_ctx, uid_t uid,
 			     uid_t **uids, uint32_t *num_uids)
 {
-	int i;
+	uint32_t i;
 
 	if ((*num_uids != 0) && (*uids == NULL)) {
 		/*
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 82e1032..82b2fb5 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -242,11 +242,6 @@ int sys_set_nfs_quota(const char *path, const char *bdev,
 
 /* The following definitions come from lib/system.c  */
 
-ssize_t sys_read(int fd, void *buf, size_t count);
-ssize_t sys_write(int fd, const void *buf, size_t count);
-ssize_t sys_writev(int fd, const struct iovec *iov, int iovcnt);
-ssize_t sys_pread(int fd, void *buf, size_t count, off_t off);
-ssize_t sys_pwrite(int fd, const void *buf, size_t count, off_t off);
 ssize_t sys_send(int s, const void *msg, size_t len, int flags);
 ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
 int sys_fcntl_ptr(int fd, int cmd, void *arg);
@@ -570,11 +565,8 @@ NTSTATUS read_fd_with_timeout(int fd, char *buf,
 				  size_t mincnt, size_t maxcnt,
 				  unsigned int time_out,
 				  size_t *size_ret);
-NTSTATUS read_data(int fd, char *buffer, size_t N);
-ssize_t write_data(int fd, const char *buffer, size_t N);
-ssize_t iov_buflen(const struct iovec *iov, int iovlen);
-uint8_t *iov_buf(TALLOC_CTX *mem_ctx, const struct iovec *iov, int iovcnt);
-ssize_t write_data_iov(int fd, const struct iovec *orig_iov, int iovcnt);
+NTSTATUS read_data_ntstatus(int fd, char *buffer, size_t N);
+
 bool send_keepalive(int client);
 NTSTATUS read_smb_length_return_keepalive(int fd, char *inbuf,
 					  unsigned int timeout,
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index a26f410..c41ec53 100644
--- a/source3/lib/ctdbd_conn.c
+++ b/source3/lib/ctdbd_conn.c
@@ -23,6 +23,7 @@
 #include "serverid.h"
 #include "ctdbd_conn.h"
 #include "system/select.h"
+#include "lib/sys_rw_data.h"
 
 #include "messages.h"
 
@@ -54,6 +55,7 @@ struct ctdbd_connection {
 	uint32_t reqid;
 	uint32_t our_vnn;
 	uint64_t rand_srvid;
+	uint64_t *srvids;
 	int fd;
 	struct tevent_fd *fde;
 
@@ -109,10 +111,43 @@ static void ctdb_packet_dump(struct ctdb_req_header *hdr)
 NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid)
 {
 
+	NTSTATUS status;
 	int cstatus;
-	return ctdbd_control(conn, CTDB_CURRENT_NODE,
-			     CTDB_CONTROL_REGISTER_SRVID, srvid, 0,
-			     tdb_null, NULL, NULL, &cstatus);
+	size_t num_srvids;
+	uint64_t *tmp;
+
+	status = ctdbd_control(conn, CTDB_CURRENT_NODE,
+			       CTDB_CONTROL_REGISTER_SRVID, srvid, 0,
+			       tdb_null, NULL, NULL, &cstatus);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
+	num_srvids = talloc_array_length(conn->srvids);
+
+	tmp = talloc_realloc(conn, conn->srvids, uint64_t,
+			     num_srvids + 1);
+	if (tmp == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	conn->srvids = tmp;
+
+	conn->srvids[num_srvids] = srvid;
+	return NT_STATUS_OK;
+}
+
+static bool ctdb_is_our_srvid(struct ctdbd_connection *conn, uint64_t srvid)
+{
+	size_t i, num_srvids;
+
+	num_srvids = talloc_array_length(conn->srvids);
+
+	for (i=0; i<num_srvids; i++) {
+		if (srvid == conn->srvids[i]) {
+			return true;
+		}
+	}
+	return false;
 }
 
 /*
@@ -345,7 +380,7 @@ static NTSTATUS ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
 		}
 	}
 
-	status = read_data(fd, (char *)&msglen, sizeof(msglen));
+	status = read_data_ntstatus(fd, (char *)&msglen, sizeof(msglen));
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -362,8 +397,8 @@ static NTSTATUS ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
 
 	req->length = msglen;
 
-	status = read_data(fd, ((char *)req) + sizeof(msglen),
-			   msglen - sizeof(msglen));
+	status = read_data_ntstatus(fd, ((char *)req) + sizeof(msglen),
+				    msglen - sizeof(msglen));
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -661,8 +696,7 @@ static NTSTATUS ctdb_handle_message(struct messaging_context *msg_ctx,
 		return NT_STATUS_OK;
 	}
 
-	/* only messages to our pid or the broadcast are valid here */
-	if (msg->srvid != getpid() && msg->srvid != MSG_SRVID_SAMBA) {
+	if (!ctdb_is_our_srvid(conn, msg->srvid)) {
 		DEBUG(0,("Got unexpected message with srvid=%llu\n", 
 			 (unsigned long long)msg->srvid));
 		return NT_STATUS_OK;
diff --git a/lib/util/close_low_fd.c b/source3/lib/iov_buf.c
similarity index 52%
copy from lib/util/close_low_fd.c
copy to source3/lib/iov_buf.c
index b11d25f..dd99da3 100644
--- a/lib/util/close_low_fd.c
+++ b/source3/lib/iov_buf.c
@@ -1,6 +1,6 @@
 /*
  * Unix SMB/CIFS implementation.
- * Samba utility functions
+ * Samba system utilities
  * Copyright (C) Volker Lendecke 2014
  *
  * This program is free software; you can redistribute it and/or modify
@@ -19,47 +19,47 @@
 
 #include "replace.h"
 #include "system/filesys.h"
-#include "close_low_fd.h"
+#include "iov_buf.h"
 
-_PUBLIC_ int close_low_fd(int fd)
+ssize_t iov_buflen(const struct iovec *iov, int iovcnt)
 {
-#ifndef VALGRIND
-	int ret, dev_null;
+	size_t buflen = 0;
+	int i;
 
-	dev_null = open("/dev/null", O_RDWR, 0);
+	for (i=0; i<iovcnt; i++) {
+		size_t thislen = iov[i].iov_len;
+		size_t tmp = buflen + thislen;
 
-	if ((dev_null == -1) && (errno = ENFILE)) {
-		/*
-		 * Try to free up an fd
-		 */
-		ret = close(fd);
-		if (ret != 0) {
-			return errno;
+		if ((tmp < buflen) || (tmp < thislen)) {
+			/* overflow */
+			return -1;
 		}
+		buflen = tmp;
 	}
+	return buflen;
+}
+
+uint8_t *iov_buf(TALLOC_CTX *mem_ctx, const struct iovec *iov, int iovcnt)
+{
+	int i;
+	ssize_t buflen;
+	uint8_t *buf, *p;
 
-	dev_null = open("/dev/null", O_RDWR, 0);
-	if (dev_null == -1) {
-		dev_null = open("/dev/null", O_WRONLY, 0);
+	buflen = iov_buflen(iov, iovcnt);
+	if (buflen == -1) {
+		return NULL;
 	}
-	if (dev_null == -1) {
-		return errno;
+	buf = talloc_array(mem_ctx, uint8_t, buflen);
+	if (buf == NULL) {
+		return NULL;
 	}
 
-	if (dev_null == fd) {
-		/*
-		 * This can happen in the ENFILE case above
-		 */
-		return 0;
-	}
+	p = buf;
+	for (i=0; i<iovcnt; i++) {
+		size_t len = iov[i].iov_len;
 
-	ret = dup2(dev_null, fd);
-	if (ret == -1) {
-		int err = errno;
-		close(dev_null);
-		return err;
+		memcpy(p, iov[i].iov_base, len);
+		p += len;
 	}
-	close(dev_null);
-#endif
-	return 0;
+	return buf;
 }
diff --git a/lib/util/close_low_fd.h b/source3/lib/iov_buf.h
similarity index 74%
copy from lib/util/close_low_fd.h
copy to source3/lib/iov_buf.h
index 954d1d2..a884bdb 100644
--- a/lib/util/close_low_fd.h
+++ b/source3/lib/iov_buf.h
@@ -1,6 +1,6 @@
 /*
  * Unix SMB/CIFS implementation.
- * Samba utility functions
+ * Samba system utilities
  * Copyright (C) Volker Lendecke 2014
  *
  * This program is free software; you can redistribute it and/or modify
@@ -17,12 +17,13 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef _CLOSE_LOW_FD_H
-#define _CLOSE_LOW_FD_H
+#ifndef __LIB_IOV_BUF_H__
+#define __LIB_IOV_BUF_H__
 
-/*
- * Redirect "fd" to /dev/null
- */
-int close_low_fd(int fd);
+#include <unistd.h>
+#include <talloc.h>
+
+ssize_t iov_buflen(const struct iovec *iov, int iovlen);
+uint8_t *iov_buf(TALLOC_CTX *mem_ctx, const struct iovec *iov, int iovcnt);
 
 #endif
diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index d4c580f..5b4daa2 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -52,6 +52,7 @@
 #include "lib/util/tevent_unix.h"
 #include "lib/background.h"
 #include "lib/messages_dgm.h"
+#include "lib/iov_buf.h"
 
 struct messaging_callback {
 	struct messaging_callback *prev, *next;
diff --git a/source3/lib/messages_ctdbd.c b/source3/lib/messages_ctdbd.c
index eb7e929..59f5976 100644
--- a/source3/lib/messages_ctdbd.c
+++ b/source3/lib/messages_ctdbd.c
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "messages.h"
 #include "util_tdb.h"
+#include "lib/iov_buf.h"
 
 /*
  * It is not possible to include ctdb.h and tdb_compat.h (included via
diff --git a/source3/lib/recvfile.c b/source3/lib/recvfile.c
index 273c51f..403d5e8 100644
--- a/source3/lib/recvfile.c
+++ b/source3/lib/recvfile.c
@@ -25,6 +25,7 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "lib/sys_rw.h"
 
 /* Do this on our own in TRANSFER_BUF_SIZE chunks.
  * It's safe to make direct syscalls to lseek/write here
diff --git a/source3/lib/sys_rw.c b/source3/lib/sys_rw.c
new file mode 100644
index 0000000..6d8f149
--- /dev/null
+++ b/source3/lib/sys_rw.c
@@ -0,0 +1,101 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * Samba system utilities
+ * Copyright (C) Andrew Tridgell 1992-1998
+ * Copyright (C) Jeremy Allison  1998-2005
+ * Copyright (C) Timur Bakeyev        2005
+ * Copyright (C) Bjoern Jacke    2006-2007
+ *
+ * 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
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "replace.h"
+#include "system/filesys.h"
+#include "lib/sys_rw.h"
+
+/*******************************************************************
+A read wrapper that will deal with EINTR/EWOULDBLOCK
+********************************************************************/
+
+ssize_t sys_read(int fd, void *buf, size_t count)
+{
+	ssize_t ret;
+
+	do {
+		ret = read(fd, buf, count);
+	} while (ret == -1 && (errno == EINTR || errno == EAGAIN ||
+			       errno == EWOULDBLOCK));
+
+	return ret;
+}
+
+/*******************************************************************
+A write wrapper that will deal with EINTR/EWOULDBLOCK.
+********************************************************************/
+
+ssize_t sys_write(int fd, const void *buf, size_t count)
+{
+	ssize_t ret;
+
+	do {
+		ret = write(fd, buf, count);
+	} while (ret == -1 && (errno == EINTR || errno == EAGAIN ||
+			       errno == EWOULDBLOCK));
+
+	return ret;
+}
+
+/*******************************************************************
+A writev wrapper that will deal with EINTR.
+********************************************************************/
+
+ssize_t sys_writev(int fd, const struct iovec *iov, int iovcnt)
+{
+	ssize_t ret;
+
+	do {
+		ret = writev(fd, iov, iovcnt);
+	} while (ret == -1 && (errno == EINTR || errno == EAGAIN ||
+			       errno == EWOULDBLOCK));
+
+	return ret;
+}
+
+/*******************************************************************
+A pread wrapper that will deal with EINTR
+********************************************************************/
+
+ssize_t sys_pread(int fd, void *buf, size_t count, off_t off)
+{
+	ssize_t ret;
+
+	do {
+		ret = pread(fd, buf, count, off);
+	} while (ret == -1 && errno == EINTR);
+	return ret;
+}
+
+/*******************************************************************
+A write wrapper that will deal with EINTR
+********************************************************************/
+
+ssize_t sys_pwrite(int fd, const void *buf, size_t count, off_t off)
+{
+	ssize_t ret;
+
+	do {
+		ret = pwrite(fd, buf, count, off);
+	} while (ret == -1 && errno == EINTR);
+	return ret;
+}
diff --git a/lib/util/close_low_fd.h b/source3/lib/sys_rw.h
similarity index 54%
copy from lib/util/close_low_fd.h
copy to source3/lib/sys_rw.h
index 954d1d2..ee1584e 100644
--- a/lib/util/close_low_fd.h
+++ b/source3/lib/sys_rw.h
@@ -1,7 +1,10 @@
 /*
  * Unix SMB/CIFS implementation.
- * Samba utility functions
- * Copyright (C) Volker Lendecke 2014
+ * Samba system utilities
+ * Copyright (C) Andrew Tridgell 1992-1998
+ * Copyright (C) Jeremy Allison  1998-2005
+ * Copyright (C) Timur Bakeyev        2005
+ * Copyright (C) Bjoern Jacke    2006-2007
  *
  * 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
@@ -17,12 +20,17 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef _CLOSE_LOW_FD_H
-#define _CLOSE_LOW_FD_H
+#ifndef __LIB_SYS_RW_H__
+#define __LIB_SYS_RW_H__
 
-/*
- * Redirect "fd" to /dev/null
- */
-int close_low_fd(int fd);
+#include <unistd.h>
+
+struct iovec;
+
+ssize_t sys_read(int fd, void *buf, size_t count);
+ssize_t sys_write(int fd, const void *buf, size_t count);
+ssize_t sys_writev(int fd, const struct iovec *iov, int iovcnt);
+ssize_t sys_pread(int fd, void *buf, size_t count, off_t off);
+ssize_t sys_pwrite(int fd, const void *buf, size_t count, off_t off);
 
 #endif
diff --git a/source3/lib/sys_rw_data.c b/source3/lib/sys_rw_data.c
new file mode 100644
index 0000000..353dbe7
--- /dev/null
+++ b/source3/lib/sys_rw_data.c
@@ -0,0 +1,129 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * Samba system utilities


-- 
Samba Shared Repository


More information about the samba-cvs mailing list