[SCM] Samba Shared Repository - branch master updated - 2b1bef7e87e62ff4cb744b1f4564a8fc425f34e2

Volker Lendecke vlendec at samba.org
Mon Oct 13 19:31:03 GMT 2008


The branch, master has been updated
       via  2b1bef7e87e62ff4cb744b1f4564a8fc425f34e2 (commit)
       via  76dfca1569f93a2b1b49244c4ae2e6a9834034f2 (commit)
       via  a781b78417b6d7b875230dd2edcb932445aa4197 (commit)
       via  ac126ea8186364bddfec340189a377978d52c7ae (commit)
       via  d65afbe55f3912384f93f8401b83f18965a9b569 (commit)
       via  c530009401f111bc62008a2a75cdad5b9d5ee7d1 (commit)
       via  c3fedcddd5e79c60f5fcc0219752c27277a4d9f7 (commit)
       via  3bbe5e88e55a92a177260310daffd6deae551ba3 (commit)
      from  88f1d885eabc9a723351f38e9f2dc83933cfdea1 (commit)

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


- Log -----------------------------------------------------------------
commit 2b1bef7e87e62ff4cb744b1f4564a8fc425f34e2
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Oct 13 20:38:50 2008 +0200

    Remove the current_spoolss_pipes_open thingy.
    
    I looked at a checkout from 2002 and even there it did not what it was supposed
    to do. Sadly this also removes one of the nicest comments in the whole Samba
    code :-)

commit 76dfca1569f93a2b1b49244c4ae2e6a9834034f2
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Oct 13 19:40:43 2008 +0200

    Make the internal pipe functions static

commit a781b78417b6d7b875230dd2edcb932445aa4197
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Oct 12 23:09:18 2008 +0200

    Remove smb_np_struct

commit ac126ea8186364bddfec340189a377978d52c7ae
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Oct 12 23:01:38 2008 +0200

    Use "struct files_struct" for pipes instead of smb_np_struct

commit d65afbe55f3912384f93f8401b83f18965a9b569
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Oct 9 16:55:56 2008 +0200

    Remove the chain_fsp global

commit c530009401f111bc62008a2a75cdad5b9d5ee7d1
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Oct 9 16:27:49 2008 +0200

    Pass struct smb_request to file_free
    
    on the way to get rid of chain_fsp

commit c3fedcddd5e79c60f5fcc0219752c27277a4d9f7
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Oct 9 15:38:53 2008 +0200

    Pass struct smb_request to file_new
    
    Goal is to remove the chain_fsp global variable

commit 3bbe5e88e55a92a177260310daffd6deae551ba3
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Oct 9 15:25:17 2008 +0200

    Pass struct smb_request to file_fsp
    
    The goal is to get rid of the chain_fsp global variable

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

Summary of changes:
 source3/include/fake_file.h        |    3 +-
 source3/include/ntdomain.h         |   57 -----
 source3/include/proto.h            |   61 +++----
 source3/include/smb.h              |    1 +
 source3/printing/nt_printing.c     |   10 +-
 source3/printing/printfsp.c        |    9 +-
 source3/rpc_server/srv_pipe_hnd.c  |  398 ++++++++----------------------------
 source3/rpc_server/srv_srvsvc_nt.c |    8 +-
 source3/smbd/blocking.c            |    1 -
 source3/smbd/close.c               |   25 ++-
 source3/smbd/connection.c          |  106 ----------
 source3/smbd/dosmode.c             |   10 +-
 source3/smbd/fake_file.c           |   10 +-
 source3/smbd/files.c               |   51 ++---
 source3/smbd/ipc.c                 |   90 ++++-----
 source3/smbd/nttrans.c             |   37 ++--
 source3/smbd/open.c                |   74 ++++----
 source3/smbd/pipes.c               |  104 +++++-----
 source3/smbd/posix_acls.c          |    6 +-
 source3/smbd/process.c             |    4 +-
 source3/smbd/reply.c               |   81 ++++----
 source3/smbd/service.c             |    7 +-
 source3/smbd/trans2.c              |   36 ++--
 source3/winbindd/winbindd_proto.h  |    2 -
 24 files changed, 379 insertions(+), 812 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/fake_file.h b/source3/include/fake_file.h
index 93da106..c4b271f 100644
--- a/source3/include/fake_file.h
+++ b/source3/include/fake_file.h
@@ -22,7 +22,8 @@
 
 enum FAKE_FILE_TYPE {
 	FAKE_FILE_TYPE_NONE = 0,
-	FAKE_FILE_TYPE_QUOTA	
+	FAKE_FILE_TYPE_QUOTA,
+	FAKE_FILE_TYPE_NAMED_PIPE
 };
 
 /*
diff --git a/source3/include/ntdomain.h b/source3/include/ntdomain.h
index de0a313..e6c97c6 100644
--- a/source3/include/ntdomain.h
+++ b/source3/include/ntdomain.h
@@ -287,63 +287,6 @@ typedef struct pipes_struct {
 
 } pipes_struct;
 
-typedef struct smb_np_struct {
-	struct smb_np_struct *next, *prev;
-	int pnum;
-	connection_struct *conn;
-	uint16 vuid; /* points to the unauthenticated user that opened this pipe. */
-	bool open; /* open connection */
-	uint16 device_state;
-	uint16 priority;
-	char *name;
-
-	/* When replying to an SMBtrans, this is the maximum amount of
-           data that can be sent in the initial reply. */
-	int max_trans_reply;
-
-	/*
-	 * NamedPipe state information.
-	 */
-	struct pipes_struct *np_state;
-
-	/*
-	 * NamedPipe functions, to be called to perform
-	 * Named Pipe transactions on request from an
-	 * SMB client.
-	 */
-
-	/* call to create a named pipe connection.
-	 * returns: state information representing the connection.
-	 *          is stored in np_state, above.
-	 */
-	struct pipes_struct *(*namedpipe_create)(
-		const char *pipe_name,
-		const char *client_address,
-		struct auth_serversupplied_info *server_info,
-		uint16_t vuid);
-
-	/* call to perform a write namedpipe operation
-	 */
-	ssize_t (*namedpipe_write)(struct pipes_struct *p,
-				   char *data, size_t n);
-
-	/* call to perform a read namedpipe operation.
-	 *
-	 * NOTE: the only reason that the pipe_outstanding
-	 * argument is here is because samba does not use
-	 * the namedpipe_transact function yet: instead,
-	 * it performs the same as what namedpipe_transact
-	 * does - a write, followed by a read.
-	 *
-	 * when samba is modified to use namedpipe_transact,
-	 * the pipe_outstanding argument may be removed.
-	 */
-	ssize_t (*namedpipe_read)(struct pipes_struct *p,
-				  char *data, size_t max_len,
-				  bool *pipe_outstanding);
-
-} smb_np_struct;
-
 struct api_struct {  
 	const char *name;
 	uint8 opnum;
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 7dc0319..40b89a1 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6573,7 +6573,8 @@ bool sysv_cache_reload(void);
 
 /* The following definitions come from printing/printfsp.c  */
 
-NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
+NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
+			const char *fname,
 			uint16_t current_vuid, files_struct **result);
 void print_fsp_end(files_struct *fsp, enum file_close_type close_type);
 
@@ -8691,26 +8692,16 @@ bool api_pipe_request(pipes_struct *p);
 pipes_struct *get_first_internal_pipe(void);
 pipes_struct *get_next_internal_pipe(pipes_struct *p);
 void set_pipe_handle_offset(int max_open_files);
-void reset_chain_p(void);
 void init_rpc_pipe_hnd(void);
-smb_np_struct *open_rpc_pipe_p(const char *pipe_name, 
-			      connection_struct *conn, uint16 vuid);
-ssize_t write_to_pipe(smb_np_struct *p, char *data, size_t n);
-ssize_t read_from_pipe(smb_np_struct *p, char *data, size_t n,
-		bool *is_data_outstanding);
-bool wait_rpc_pipe_hnd_state(smb_np_struct *p, uint16 priority);
-bool set_rpc_pipe_hnd_state(smb_np_struct *p, uint16 device_state);
-bool close_rpc_pipe_hnd(smb_np_struct *p);
-void pipe_close_conn(connection_struct *conn);
-smb_np_struct *get_rpc_pipe_p(uint16 pnum);
-smb_np_struct *get_rpc_pipe(int pnum);
-struct pipes_struct *make_internal_rpc_pipe_p(const char *pipe_name,
-					      const char *client_address,
-					      struct auth_serversupplied_info *server_info,
-					      uint16_t vuid);
-ssize_t read_from_internal_pipe(struct pipes_struct *p, char *data, size_t n,
-				bool *is_data_outstanding);
-ssize_t write_to_internal_pipe(struct pipes_struct *p, char *data, size_t n);
+
+bool fsp_is_np(struct files_struct *fsp);
+NTSTATUS np_open(struct smb_request *smb_req, struct connection_struct *conn,
+		 const char *name, struct files_struct **pfsp);
+NTSTATUS np_write(struct files_struct *fsp, uint8_t *data, size_t len,
+		  ssize_t *nwritten);
+NTSTATUS np_read(struct files_struct *fsp, uint8_t *data, size_t len,
+		 ssize_t *nread, bool *is_data_outstanding);
+
 
 /* The following definitions come from rpc_server/srv_samr_nt.c  */
 
@@ -9369,7 +9360,8 @@ NTSTATUS change_oem_password(struct samu *hnd, char *old_passwd, char *new_passw
 /* The following definitions come from smbd/close.c  */
 
 void set_close_write_time(struct files_struct *fsp, struct timespec ts);
-NTSTATUS close_file(files_struct *fsp, enum file_close_type close_type);
+NTSTATUS close_file(struct smb_request *req, files_struct *fsp,
+		    enum file_close_type close_type);
 void msg_close_file(struct messaging_context *msg_ctx,
 		    void *private_data,
 		    uint32_t msg_type,
@@ -9402,8 +9394,6 @@ int count_all_current_connections(void);
 bool claim_connection(connection_struct *conn, const char *name,
 		      uint32 msg_flags);
 bool register_message_flags(bool doreg, uint32 msg_flags);
-bool store_pipe_opendb( smb_np_struct *p );
-bool delete_pipe_opendb( smb_np_struct *p );
 
 /* The following definitions come from smbd/dfree.c  */
 
@@ -9528,13 +9518,13 @@ void reply_unix_error(struct smb_request *req, uint8 defclass, uint32 defcode,
 /* The following definitions come from smbd/fake_file.c  */
 
 enum FAKE_FILE_TYPE is_fake_file(const char *fname);
-NTSTATUS open_fake_file(connection_struct *conn,
+NTSTATUS open_fake_file(struct smb_request *req, connection_struct *conn,
 				uint16_t current_vuid,
 				enum FAKE_FILE_TYPE fake_file_type,
 				const char *fname,
 				uint32 access_mask,
 				files_struct **result);
-NTSTATUS close_fake_file(files_struct *fsp);
+NTSTATUS close_fake_file(struct smb_request *req, files_struct *fsp);
 
 /* The following definitions come from smbd/file_access.c  */
 
@@ -9575,7 +9565,8 @@ NTSTATUS check_name(connection_struct *conn, const char *name);
 
 /* The following definitions come from smbd/files.c  */
 
-NTSTATUS file_new(connection_struct *conn, files_struct **result);
+NTSTATUS file_new(struct smb_request *req, connection_struct *conn,
+		  files_struct **result);
 void file_close_conn(connection_struct *conn);
 void file_close_pid(uint16 smbpid, int vuid);
 void file_init(void);
@@ -9588,15 +9579,12 @@ files_struct *file_find_di_first(struct file_id id);
 files_struct *file_find_di_next(files_struct *start_fsp);
 files_struct *file_find_print(void);
 void file_sync_all(connection_struct *conn);
-void file_free(files_struct *fsp);
+void file_free(struct smb_request *req, files_struct *fsp);
 files_struct *file_fnum(uint16 fnum);
-files_struct *file_fsp(uint16 fid);
-void file_chain_reset(void);
-NTSTATUS dup_file_fsp(files_struct *fsp,
-				uint32 access_mask,
-				uint32 share_access,
-				uint32 create_options,
-		      		files_struct **result);
+files_struct *file_fsp(struct smb_request *req, uint16 fid);
+NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *fsp,
+		      uint32 access_mask, uint32 share_access,
+		      uint32 create_options, files_struct **result);
 
 /* The following definitions come from smbd/ipc.c  */
 
@@ -9788,9 +9776,10 @@ NTSTATUS open_file_ntcreate(connection_struct *conn,
 				 			/* Information (FILE_EXISTS etc.) */
 			    int *pinfo,
 			    files_struct **result);
-NTSTATUS open_file_fchmod(connection_struct *conn, const char *fname,
+NTSTATUS open_file_fchmod(struct smb_request *req, connection_struct *conn,
+			  const char *fname,
 			  SMB_STRUCT_STAT *psbuf, files_struct **result);
-NTSTATUS close_file_fchmod(files_struct *fsp);
+NTSTATUS close_file_fchmod(struct smb_request *req, files_struct *fsp);
 NTSTATUS open_directory(connection_struct *conn,
 			struct smb_request *req,
 			const char *fname,
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 6aca752..fb79e91 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -636,6 +636,7 @@ struct smb_request {
 	size_t unread_bytes;
 	bool encrypted;
 	connection_struct *conn;
+	struct files_struct *chain_fsp;
 };
 
 /* Defines for the sent_oplock_break field above. */
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index 13a6403..85f42fe 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -1376,7 +1376,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
 			DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", old_create_time));
 		}
 	}
-	close_file(fsp, NORMAL_CLOSE);
+	close_file(NULL, fsp, NORMAL_CLOSE);
 	fsp = NULL;
 
 	/* Get file version info (if available) for new file */
@@ -1417,7 +1417,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
 			DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", new_create_time));
 		}
 	}
-	close_file(fsp, NORMAL_CLOSE);
+	close_file(NULL, fsp, NORMAL_CLOSE);
 	fsp = NULL;
 
 	if (use_version && (new_major != old_major || new_minor != old_minor)) {
@@ -1447,7 +1447,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file, fstr
 
 	error_exit:
 		if(fsp)
-			close_file(fsp, NORMAL_CLOSE);
+			close_file(NULL, fsp, NORMAL_CLOSE);
 		return -1;
 }
 
@@ -1583,7 +1583,7 @@ static uint32 get_correct_cversion(const char *architecture, fstring driverpath_
 	DEBUG(10,("get_correct_cversion: Driver file [%s] cversion = %d\n",
 		driverpath, cversion));
 
-	close_file(fsp, NORMAL_CLOSE);
+	close_file(NULL, fsp, NORMAL_CLOSE);
 	close_cnum(conn, user->vuid);
 	unbecome_user();
 	*perr = WERR_OK;
@@ -1593,7 +1593,7 @@ static uint32 get_correct_cversion(const char *architecture, fstring driverpath_
   error_exit:
 
 	if(fsp)
-		close_file(fsp, NORMAL_CLOSE);
+		close_file(NULL, fsp, NORMAL_CLOSE);
 
 	close_cnum(conn, user->vuid);
 	unbecome_user();
diff --git a/source3/printing/printfsp.c b/source3/printing/printfsp.c
index c674922..a247cd8 100644
--- a/source3/printing/printfsp.c
+++ b/source3/printing/printfsp.c
@@ -25,7 +25,8 @@ open a print file and setup a fsp for it. This is a wrapper around
 print_job_start().
 ***************************************************************************/
 
-NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
+NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
+			const char *fname,
 			uint16_t current_vuid, files_struct **result)
 {
 	int jobid;
@@ -34,7 +35,7 @@ NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
 	fstring name;
 	NTSTATUS status;
 
-	status = file_new(conn, &fsp);
+	status = file_new(req, conn, &fsp);
 	if(!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -52,7 +53,7 @@ NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
 	jobid = print_job_start(conn->server_info, SNUM(conn), name, NULL);
 	if (jobid == -1) {
 		status = map_nt_error_from_unix(errno);
-		file_free(fsp);
+		file_free(req, fsp);
 		return status;
 	}
 
@@ -61,7 +62,7 @@ NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
 	if (fsp->rap_print_jobid == 0) {
 		/* We need to delete the entry in the tdb. */
 		pjob_delete(lp_const_servicename(SNUM(conn)), jobid);
-		file_free(fsp);
+		file_free(req, fsp);
 		return NT_STATUS_ACCESS_DENIED;	/* No errno around here */
 	}
 
diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c
index c55e328..c8037e6 100644
--- a/source3/rpc_server/srv_pipe_hnd.c
+++ b/source3/rpc_server/srv_pipe_hnd.c
@@ -24,27 +24,8 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
-static smb_np_struct *chain_p;
 static int pipes_open;
 
-/*
- * Sometimes I can't decide if I hate Windows printer driver
- * writers more than I hate the Windows spooler service driver
- * writers. This gets around a combination of bugs in the spooler
- * and the HP 8500 PCL driver that causes a spooler spin. JRA.
- *
- * bumped up from 20 -> 64 after viewing traffic from WordPerfect
- * 2002 running on NT 4.- SP6
- * bumped up from 64 -> 256 after viewing traffic from con2prt
- * for lots of printers on a WinNT 4.x SP6 box.
- */
- 
-#ifndef MAX_OPEN_SPOOLSS_PIPES
-#define MAX_OPEN_SPOOLSS_PIPES 256
-#endif
-static int current_spoolss_pipes_open;
-
-static smb_np_struct *Pipes;
 static pipes_struct *InternalPipes;
 static struct bitmap *bmap;
 
@@ -91,15 +72,6 @@ void set_pipe_handle_offset(int max_open_files)
 }
 
 /****************************************************************************
- Reset pipe chain handle number.
-****************************************************************************/
-
-void reset_chain_p(void)
-{
-	chain_p = NULL;
-}
-
-/****************************************************************************
  Initialise pipe handle states.
 ****************************************************************************/
 
@@ -142,132 +114,20 @@ static bool pipe_init_outgoing_data(pipes_struct *p)
 }
 
 /****************************************************************************
- Find first available pipe slot.
-****************************************************************************/
-
-smb_np_struct *open_rpc_pipe_p(const char *pipe_name, 
-			      connection_struct *conn, uint16 vuid)
-{
-	int i;
-	smb_np_struct *p, *p_it;
-	static int next_pipe;
-	bool is_spoolss_pipe = False;
-
-	DEBUG(4,("Open pipe requested %s (pipes_open=%d)\n",
-		 pipe_name, pipes_open));
-
-	if (strstr(pipe_name, "spoolss")) {
-		is_spoolss_pipe = True;
-	}
- 
-	if (is_spoolss_pipe && current_spoolss_pipes_open >= MAX_OPEN_SPOOLSS_PIPES) {
-		DEBUG(10,("open_rpc_pipe_p: spooler bug workaround. Denying open on pipe %s\n",
-			pipe_name ));
-		return NULL;
-	}
-
-	/* not repeating pipe numbers makes it easier to track things in 
-	   log files and prevents client bugs where pipe numbers are reused
-	   over connection restarts */
-
-	if (next_pipe == 0) {
-		next_pipe = (sys_getpid() ^ time(NULL)) % MAX_OPEN_PIPES;
-	}
-
-	i = bitmap_find(bmap, next_pipe);
-
-	if (i == -1) {
-		DEBUG(0,("ERROR! Out of pipe structures\n"));
-		return NULL;
-	}
-
-	next_pipe = (i+1) % MAX_OPEN_PIPES;
-
-	for (p = Pipes; p; p = p->next) {
-		DEBUG(5,("open_rpc_pipe_p: name %s pnum=%x\n", p->name, p->pnum));  
-	}
-
-	p = talloc(NULL, smb_np_struct);
-	if (!p) {
-		DEBUG(0,("ERROR! no memory for smb_np_struct!\n"));
-		return NULL;
-	}
-
-	ZERO_STRUCTP(p);
-
-	p->name = talloc_strdup(p, pipe_name);
-	if (p->name == NULL) {
-		TALLOC_FREE(p);
-		DEBUG(0,("ERROR! no memory for pipe name!\n"));
-		return NULL;
-	}
-
-	/* add a dso mechanism instead of this, here */
-
-	p->namedpipe_create = make_internal_rpc_pipe_p;
-	p->namedpipe_read = read_from_internal_pipe;
-	p->namedpipe_write = write_to_internal_pipe;
-
-	p->np_state = p->namedpipe_create(pipe_name, conn->client_address,
-					  conn->server_info, vuid);
-
-	if (p->np_state == NULL) {
-		DEBUG(0,("open_rpc_pipe_p: make_internal_rpc_pipe_p failed.\n"));
-		TALLOC_FREE(p);
-		return NULL;
-	}
-
-	DLIST_ADD(Pipes, p);
-
-	/*
-	 * Initialize the incoming RPC data buffer with one PDU worth of memory.
-	 * We cheat here and say we're marshalling, as we intend to add incoming
-	 * data directly into the prs_struct and we want it to auto grow. We will
-	 * change the type to UNMARSALLING before processing the stream.
-	 */
-
-	bitmap_set(bmap, i);
-	i += pipe_handle_offset;
-
-	pipes_open++;
-
-	p->pnum = i;
-
-	p->open = True;
-	p->device_state = 0;
-	p->priority = 0;
-	p->conn = conn;
-	p->vuid  = vuid;
-
-	p->max_trans_reply = 0;
-
-	DEBUG(4,("Opened pipe %s with handle %x (pipes_open=%d)\n",
-		 pipe_name, i, pipes_open));
-	
-	chain_p = p;
-	
-	/* Iterate over p_it as a temp variable, to display all open pipes */ 
-	for (p_it = Pipes; p_it; p_it = p_it->next) {
-		DEBUG(5,("open pipes: name %s pnum=%x\n", p_it->name, p_it->pnum));  
-	}
-
-	return chain_p;
-}
-
-/****************************************************************************
  Make an internal namedpipes structure
 ****************************************************************************/
 
-struct pipes_struct *make_internal_rpc_pipe_p(const char *pipe_name,
-					      const char *client_address,
-					      struct auth_serversupplied_info *server_info,
-					      uint16_t vuid)
+static struct pipes_struct *make_internal_rpc_pipe_p(TALLOC_CTX *mem_ctx,
+						     const char *pipe_name,
+						     const char *client_address,
+						     struct auth_serversupplied_info *server_info,
+						     uint16_t vuid)
 {
 	pipes_struct *p;
 
 	DEBUG(4,("Create pipe requested %s\n", pipe_name));
 
-	p = TALLOC_ZERO_P(NULL, pipes_struct);
+	p = TALLOC_ZERO_P(mem_ctx, struct pipes_struct);
 
 	if (!p) {
 		DEBUG(0,("ERROR! no memory for pipes_struct!\n"));


-- 
Samba Shared Repository


More information about the samba-cvs mailing list